chore: remove dependency with custom-card-helpers

This commit is contained in:
Jérôme Wiedemann 2023-07-24 07:50:43 +00:00
parent 9ea1b515a3
commit 331ed6ad53
13 changed files with 170 additions and 129 deletions

View File

@ -68,7 +68,6 @@
"dependencies": {
"@ctrl/tinycolor": "^3.1.6",
"@material/mwc-ripple": "^0.19.1",
"custom-card-helpers": "^1.9.0",
"fast-copy": "^2.1.0",
"home-assistant-js-websocket": "^8.2.0",
"lit": "^2.7.6",

View File

@ -2,7 +2,7 @@ import { noChange } from 'lit-html';
// import '@material/mwc-ripple';
// tslint:disable-next-line
import { Ripple } from '@material/mwc-ripple';
import { myFireEvent } from './my-fire-event';
import { fireEvent } from './common/fire-event';
import { deepEqual } from './deep-equal';
import { AttributePart, Directive, DirectiveParameters, directive } from 'lit-html/directive';
@ -154,7 +154,7 @@ class ActionHandler extends HTMLElement implements ActionHandler {
if (options.repeat && !this.isRepeating) {
this.isRepeating = true;
this.repeatTimeout = setInterval(() => {
myFireEvent(element, 'action', { action: 'hold' });
fireEvent(element, 'action', { action: 'hold' });
}, options.repeat);
}
}, this.holdTime);
@ -186,21 +186,21 @@ class ActionHandler extends HTMLElement implements ActionHandler {
}
if (options.hasHold && this.held) {
if (!options.repeat) {
myFireEvent(target, 'action', { action: 'hold' });
fireEvent(target, 'action', { action: 'hold' });
}
} else if (options.hasDoubleClick) {
if ((ev.type === 'click' && (ev as MouseEvent).detail < 2) || !this.dblClickTimeout) {
this.dblClickTimeout = window.setTimeout(() => {
this.dblClickTimeout = undefined;
myFireEvent(target, 'action', { action: 'tap' });
fireEvent(target, 'action', { action: 'tap' });
}, 250);
} else {
clearTimeout(this.dblClickTimeout);
this.dblClickTimeout = undefined;
myFireEvent(target, 'action', { action: 'double_tap' });
fireEvent(target, 'action', { action: 'double_tap' });
}
} else {
myFireEvent(target, 'action', { action: 'tap' });
fireEvent(target, 'action', { action: 'tap' });
}
};

View File

@ -1,4 +0,0 @@
export const atLeastVersion = (version: string, major: number, minor: number): boolean => {
const [haMajor, haMinor] = version.split('.', 2);
return Number(haMajor) > major || (Number(haMajor) === major && Number(haMinor) >= minor);
};

View File

@ -9,7 +9,6 @@ import { styleMap, StyleInfo } from 'lit-html/directives/style-map';
import { unsafeHTML } from 'lit-html/directives/unsafe-html';
import { classMap, ClassInfo } from 'lit-html/directives/class-map';
import { HassEntity } from 'home-assistant-js-websocket';
import { timerTimeRemaining, createThing, DOMAINS_TOGGLE, computeStateDomain } from 'custom-card-helpers';
import { LovelaceCard } from './types/lovelace';
import {
ButtonCardConfig,
@ -36,17 +35,20 @@ import {
getLovelaceCast,
secondsToDuration,
durationToSeconds,
computeStateDomain,
} from './helpers';
import { createThing } from './common/create-thing';
import { styles } from './styles';
import { computeStateDisplay } from './compute_state_display';
import { computeStateDisplay } from './common/compute_state_display';
import copy from 'fast-copy';
import * as pjson from '../package.json';
import { deepEqual } from './deep-equal';
import { stateColorCss } from './state_color';
import { ON } from './common/const';
import { stateColorCss } from './common/state_color';
import { ON, DOMAINS_TOGGLE } from './common/const';
import { handleAction } from './handle-action';
import { myFireEvent } from './my-fire-event';
import { fireEvent } from './common/fire-event';
import { HomeAssistant } from './types/homeassistant';
import { timerTimeRemaining } from './common/timer';
let helpers = (window as any).cardHelpers;
const helperPromise = new Promise<void>(async (resolve) => {
@ -145,7 +147,7 @@ class ButtonCard extends LitElement {
else {
const element = createThing(config);
helperPromise.then(() => {
myFireEvent(element, 'll-rebuild', {});
fireEvent(element, 'll-rebuild', {});
});
return element;
}

View File

@ -1,14 +1,19 @@
import { HassConfig, HassEntity } from 'home-assistant-js-websocket';
import { LocalizeFunc } from 'custom-card-helpers';
import { computeDomain, isNumericFromAttributes } from './helpers';
import { formatNumber, getNumberFormatOptions, blankBeforePercent } from './common/format_number';
import { EntityRegistryDisplayEntry, FrontendLocaleData, HomeAssistant, TimeZone } from './types/homeassistant';
import { UNIT_TO_MILLISECOND_CONVERT, formatDuration } from './common/duration';
import { formatDateTime } from './common/format_date_time';
import { formatDate } from './common/format_date';
import { formatTime } from './common/format_time';
import { UPDATE_SUPPORT_PROGRESS, updateIsInstallingFromAttributes } from './common/update';
import { supportsFeatureFromAttributes } from './common/supports-features';
import { computeDomain, isNumericFromAttributes } from '../helpers';
import { formatNumber, getNumberFormatOptions, blankBeforePercent } from './format_number';
import {
LocalizeFunc,
EntityRegistryDisplayEntry,
FrontendLocaleData,
HomeAssistant,
TimeZone,
} from '../types/homeassistant';
import { UNIT_TO_MILLISECOND_CONVERT, formatDuration } from './duration';
import { formatDateTime } from './format_date_time';
import { formatDate } from './format_date';
import { formatTime } from './format_time';
import { UPDATE_SUPPORT_PROGRESS, updateIsInstallingFromAttributes } from './update';
import { supportsFeatureFromAttributes } from './supports-features';
const UNAVAILABLE = 'unavailable';
const UNKNOWN = 'unknown';

View File

@ -1,10 +1,10 @@
export const UNAVAILABLE = 'unavailable';
export const BINARY_STATE_ON = 'on';
export const BINARY_STATE_OFF = 'off';
const arrayLiteralIncludes = <T extends readonly unknown[]>(array: T) => (
searchElement: unknown,
fromIndex?: number,
): searchElement is T[number] => array.includes(searchElement as T[number], fromIndex);
const arrayLiteralIncludes =
<T extends readonly unknown[]>(array: T) =>
(searchElement: unknown, fromIndex?: number): searchElement is T[number] =>
array.includes(searchElement as T[number], fromIndex);
export const UNKNOWN = 'unknown';
export const ON = 'on';
@ -15,3 +15,5 @@ export const OFF_STATES = [UNAVAILABLE, UNKNOWN, OFF] as const;
export const isUnavailableState = arrayLiteralIncludes(UNAVAILABLE_STATES);
export const isOffState = arrayLiteralIncludes(OFF_STATES);
export const DOMAINS_TOGGLE = new Set(['fan', 'input_boolean', 'light', 'switch', 'group', 'automation', 'humidifier']);

View File

@ -0,0 +1,96 @@
import { fireEvent } from './fire-event';
const SPECIAL_TYPES = new Set(['call-service', 'divider', 'section', 'weblink', 'cast', 'select']);
const DOMAIN_TO_ELEMENT_TYPE = {
alert: 'toggle',
automation: 'toggle',
climate: 'climate',
cover: 'cover',
fan: 'toggle',
group: 'group',
input_boolean: 'toggle',
input_number: 'input-number',
input_select: 'input-select',
input_text: 'input-text',
light: 'toggle',
lock: 'lock',
media_player: 'media-player',
remote: 'toggle',
scene: 'scene',
script: 'script',
sensor: 'sensor',
timer: 'timer',
switch: 'toggle',
vacuum: 'toggle',
// Temporary. Once climate is rewritten,
// water heater should get it's own row.
water_heater: 'climate',
input_datetime: 'input-datetime',
};
declare global {
// eslint-disable-next-line
interface HASSDomEvents {
'll-rebuild': Record<string, unknown>;
'll-badge-rebuild': Record<string, unknown>;
}
}
export const createThing = (cardConfig, isRow = false) => {
const _createError = (error, config) => {
return _createThing('hui-error-card', {
type: 'error',
error,
config,
});
};
const _createThing = (tag, config) => {
const element = window.document.createElement(tag);
try {
// Preventing an error-card infinity loop: https://github.com/custom-cards/custom-card-helpers/issues/54
if (!element.setConfig) return;
element.setConfig(config);
} catch (err) {
console.error(tag, err);
return _createError((err as Error).message, config);
}
return element;
};
if (!cardConfig || typeof cardConfig !== 'object' || (!isRow && !cardConfig.type))
return _createError('No type defined', cardConfig);
let tag = cardConfig.type;
if (tag && tag.startsWith('custom:')) {
tag = tag.substr('custom:'.length);
} else if (isRow) {
if (SPECIAL_TYPES.has(tag)) {
tag = `hui-${tag}-row`;
} else {
if (!cardConfig.entity) {
return _createError('Invalid config given.', cardConfig);
}
const domain = cardConfig.entity.split('.', 1)[0];
tag = `hui-${DOMAIN_TO_ELEMENT_TYPE[domain] || 'text'}-entity-row`;
}
} else {
tag = `hui-${tag}-card`;
}
if (customElements.get(tag)) return _createThing(tag, cardConfig);
// If element doesn't exist (yet) create an error
const element = _createError(`Custom element doesn't exist: ${cardConfig.type}.`, cardConfig);
element.style.display = 'None';
const timer = setTimeout(() => {
element.style.display = '';
}, 2000);
// Remove error if element is defined later
customElements.whenDefined(cardConfig.type).then(() => {
clearTimeout(timer);
fireEvent(element, 'll-rebuild', {}, element);
});
return element;
};

View File

@ -55,7 +55,7 @@ export interface HASSDomEvent<T> extends Event {
* @return {Event} The new event that was fired.
*/
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
export const myFireEvent = <HassEvent extends ValidHassDomEvent>(
export const fireEvent = <HassEvent extends ValidHassDomEvent>(
node: HTMLElement | Window,
type: HassEvent,
detail?: HASSDomEvents[HassEvent],

View File

@ -1,11 +1,11 @@
/** Return an color representing a state. */
import { HassEntity } from 'home-assistant-js-websocket';
import { UNAVAILABLE } from './common/const';
import { computeGroupDomain, GroupEntity } from './helpers';
import { computeCssVariable } from './helpers';
import { computeDomain, slugify } from './helpers';
import { batteryStateColorProperty } from './helpers';
import { stateActive } from './helpers';
import { UNAVAILABLE } from './const';
import { computeGroupDomain, GroupEntity } from '../helpers';
import { computeCssVariable } from '../helpers';
import { computeDomain, slugify } from '../helpers';
import { batteryStateColorProperty } from '../helpers';
import { stateActive } from '../helpers';
const STATE_COLORED_DOMAIN = new Set([
'alarm_control_panel',

17
src/common/timer.ts Normal file
View File

@ -0,0 +1,17 @@
import { HassEntity } from 'home-assistant-js-websocket';
import { durationToSeconds } from '../helpers';
export const timerTimeRemaining = (stateObj: HassEntity): undefined | number => {
if (!stateObj.attributes.remaining) {
return undefined;
}
let timeRemaining = durationToSeconds(stateObj.attributes.remaining);
if (stateObj.state === 'active') {
const now = new Date().getTime();
const madeActive = new Date(stateObj.last_changed).getTime();
timeRemaining = Math.max(timeRemaining - (now - madeActive) / 1000, 0);
}
return timeRemaining;
};

View File

@ -1,4 +1,4 @@
import { myFireEvent } from './my-fire-event';
import { fireEvent } from './common/fire-event';
import { ActionConfig } from './types/types';
import { HomeAssistant } from './types/homeassistant';
@ -16,7 +16,7 @@ export const handleAction = async (
config: ActionConfigParams,
action: string,
): Promise<void> => {
myFireEvent(node, 'hass-action', { config, action });
fireEvent(node, 'hass-action', { config, action });
};
type ActionParams = { config: ActionConfigParams; action: string };

View File

@ -1,10 +1,16 @@
import { PropertyValues } from 'lit';
import tinycolor, { TinyColor } from '@ctrl/tinycolor';
import { HomeAssistant, LovelaceConfig } from 'custom-card-helpers';
import { HomeAssistant } from './types/homeassistant';
import { LovelaceConfig } from './types/lovelace';
import { StateConfig } from './types/types';
import { HassEntity, HassEntityAttributeBase, HassEntityBase } from 'home-assistant-js-websocket';
import { OFF, UNAVAILABLE, isUnavailableState } from './common/const';
export const atLeastVersion = (version: string, major: number, minor: number): boolean => {
const [haMajor, haMinor] = version.split('.', 2);
return Number(haMajor) > major || (Number(haMajor) === major && Number(haMinor) >= minor);
};
export function computeDomain(entityId: string): string {
return entityId.substr(0, entityId.indexOf('.'));
}
@ -13,6 +19,8 @@ export function computeEntity(entityId: string): string {
return entityId.substr(entityId.indexOf('.') + 1);
}
export const computeStateDomain = (stateObj: HassEntity) => computeDomain(stateObj.entity_id);
export function getColorFromVariable(elt: Element, color: string): string {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const colorArray: string[] = [];

View File

@ -326,52 +326,6 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
"@formatjs/ecma402-abstract@1.11.4":
version "1.11.4"
resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz#b962dfc4ae84361f9f08fbce411b4e4340930eda"
integrity sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==
dependencies:
"@formatjs/intl-localematcher" "0.2.25"
tslib "^2.1.0"
"@formatjs/fast-memoize@1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz#e6f5aee2e4fd0ca5edba6eba7668e2d855e0fc21"
integrity sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==
dependencies:
tslib "^2.1.0"
"@formatjs/icu-messageformat-parser@2.1.0":
version "2.1.0"
resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz#a54293dd7f098d6a6f6a084ab08b6d54a3e8c12d"
integrity sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==
dependencies:
"@formatjs/ecma402-abstract" "1.11.4"
"@formatjs/icu-skeleton-parser" "1.3.6"
tslib "^2.1.0"
"@formatjs/icu-skeleton-parser@1.3.6":
version "1.3.6"
resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz#4ce8c0737d6f07b735288177049e97acbf2e8964"
integrity sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==
dependencies:
"@formatjs/ecma402-abstract" "1.11.4"
tslib "^2.1.0"
"@formatjs/intl-localematcher@0.2.25":
version "0.2.25"
resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz#60892fe1b271ec35ba07a2eb018a2dd7bca6ea3a"
integrity sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==
dependencies:
tslib "^2.1.0"
"@formatjs/intl-utils@^3.8.4":
version "3.8.4"
resolved "https://registry.yarnpkg.com/@formatjs/intl-utils/-/intl-utils-3.8.4.tgz#291baac91001db428fc3275c515a3e40fbe95945"
integrity sha512-j5C6NyfKevIxsfLK8KwO1C0vvP7k1+h4A9cFpc+cr6mEwCc1sPkr17dzh0Ke6k9U5pQccAQoXdcNBl3IYa4+ZQ==
dependencies:
emojis-list "^3.0.0"
"@gar/promisify@^1.0.1":
version "1.1.3"
resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
@ -2332,19 +2286,6 @@ crypto-random-string@^2.0.0:
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==
custom-card-helpers@^1.9.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/custom-card-helpers/-/custom-card-helpers-1.9.0.tgz#dac7bb7a531101f4c83096b26a8be8ccad70d8c0"
integrity sha512-5IW4OXq3MiiCqDvqeu+MYsM1NmntKW1WfJhyJFsdP2tbzqEI4BOnqRz2qzdp08lE4QLVhYfRLwe0WAqgQVNeFg==
dependencies:
"@formatjs/intl-utils" "^3.8.4"
home-assistant-js-websocket "^6.0.1"
intl-messageformat "^9.11.1"
lit "^2.1.1"
rollup "^2.63.0"
superstruct "^0.15.3"
typescript "^4.5.4"
cyclist@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.2.tgz#673b5f233bf34d8e602b949429f8171d9121bea3"
@ -2631,11 +2572,6 @@ emoji-regex@^8.0.0:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
emojis-list@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
encoding@^0.1.11, encoding@^0.1.12:
version "0.1.13"
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
@ -3870,11 +3806,6 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
home-assistant-js-websocket@^6.0.1:
version "6.1.1"
resolved "https://registry.yarnpkg.com/home-assistant-js-websocket/-/home-assistant-js-websocket-6.1.1.tgz#87ba846753c4fb58a2e5ace6bb15a82689fd0735"
integrity sha512-TnZFzF4mn5F/v0XKUTK2GMQXrn/+eQpgaSDSELl6U0HSwSbFwRhGWLz330YT+hiKMspDflamsye//RPL+zwhDw==
home-assistant-js-websocket@^8.2.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/home-assistant-js-websocket/-/home-assistant-js-websocket-8.2.0.tgz#3505bf004cc3026c5d0cfdae5c031a44b0fcb01b"
@ -4120,16 +4051,6 @@ internal-slot@^1.0.5:
has "^1.0.3"
side-channel "^1.0.4"
intl-messageformat@^9.11.1:
version "9.13.0"
resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.13.0.tgz#97360b73bd82212e4f6005c712a4a16053165468"
integrity sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==
dependencies:
"@formatjs/ecma402-abstract" "1.11.4"
"@formatjs/fast-memoize" "1.2.1"
"@formatjs/icu-messageformat-parser" "2.1.0"
tslib "^2.1.0"
into-stream@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-6.0.0.tgz#4bfc1244c0128224e18b8870e85b2de8e66c6702"
@ -5046,7 +4967,7 @@ lit-html@^2.7.0, lit-html@^2.7.5:
dependencies:
"@types/trusted-types" "^2.0.2"
lit@^2.1.1, lit@^2.7.6:
lit@^2.7.6:
version "2.7.6"
resolved "https://registry.yarnpkg.com/lit/-/lit-2.7.6.tgz#810007b876ed43e0c70124de91831921598b1665"
integrity sha512-1amFHA7t4VaaDe+vdQejSVBklwtH9svGoG6/dZi9JhxtJBBlqY5D1RV7iLUYY0trCqQc4NfhYYZilZiVHt7Hxg==
@ -7253,7 +7174,7 @@ rollup-pluginutils@^2.8.2:
dependencies:
estree-walker "^0.6.1"
rollup@^2.33.1, rollup@^2.63.0:
rollup@^2.33.1:
version "2.79.1"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7"
integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==
@ -7913,11 +7834,6 @@ strip-json-comments@~2.0.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
superstruct@^0.15.3:
version "0.15.5"
resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.5.tgz#0f0a8d3ce31313f0d84c6096cd4fa1bfdedc9dab"
integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@ -8182,7 +8098,7 @@ tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
tslib@^2.1.0, tslib@^2.5.3:
tslib@^2.5.3:
version "2.6.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3"
integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
@ -8316,7 +8232,7 @@ typescript@^3.8.3, typescript@^3.9.3:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"
integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==
typescript@^4.0.5, typescript@^4.5.4:
typescript@^4.0.5:
version "4.9.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==