From dafbcd5a6cb9e3987b12466293e5c4af4c8c2750 Mon Sep 17 00:00:00 2001 From: Seth Posner Date: Fri, 17 Feb 2023 15:56:04 -0800 Subject: [PATCH 001/134] Advanced Decorator first draft --- src/features/buyable.tsx | 22 ++++++- src/features/decorators.ts | 117 +++++++++++++++++++++++++++++++++++++ src/features/feature.ts | 6 +- 3 files changed, 140 insertions(+), 5 deletions(-) create mode 100644 src/features/decorators.ts diff --git a/src/features/buyable.tsx b/src/features/buyable.tsx index 30edd29..4457993 100644 --- a/src/features/buyable.tsx +++ b/src/features/buyable.tsx @@ -23,6 +23,7 @@ import { createLazyProxy } from "util/proxies"; import { coerceComponent, isCoercableComponent } from "util/vue"; import type { Ref } from "vue"; import { computed, unref } from "vue"; +import { Decorator } from "./decorators"; export const BuyableType = Symbol("Buyable"); @@ -89,9 +90,13 @@ export type GenericBuyable = Replace< >; export function createBuyable( - optionsFunc: OptionsFunc + optionsFunc: OptionsFunc, + ...decorators: Decorator[] ): Buyable { const amount = persistent(0); + + const persistents = decorators.reduce((current, next) => Object.assign(current, next.getPersistents?.()), {}); + return createLazyProxy(() => { const buyable = optionsFunc(); @@ -107,8 +112,15 @@ export function createBuyable( buyable.type = BuyableType; buyable[Component] = ClickableComponent; + for (const decorator of decorators) { + decorator.preConstruct?.(buyable); + } + buyable.amount = amount; buyable.amount[DefaultValue] = buyable.initialValue ?? 0; + + Object.assign(buyable, persistents); + buyable.canAfford = computed(() => { const genericBuyable = buyable as GenericBuyable; const cost = unref(genericBuyable.cost); @@ -230,6 +242,7 @@ export function createBuyable( processComputable(buyable as T, "mark"); processComputable(buyable as T, "small"); + const gatheredProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(buyable)), {}); buyable[GatherProps] = function (this: GenericBuyable) { const { display, visibility, style, classes, onClick, canClick, small, mark, id } = this; @@ -242,10 +255,15 @@ export function createBuyable( canClick, small, mark, - id + id, + ...gatheredProps }; }; + for (const decorator of decorators) { + decorator.postConstruct?.(buyable); + } + return buyable as unknown as Buyable; }); } diff --git a/src/features/decorators.ts b/src/features/decorators.ts new file mode 100644 index 0000000..774312c --- /dev/null +++ b/src/features/decorators.ts @@ -0,0 +1,117 @@ +import { Replace, OptionsObject } from "./feature"; +import Decimal, { DecimalSource } from "util/bignum"; +import { Computable, GetComputableType, processComputable, ProcessedComputable } from "util/computed"; +import { AchievementOptions, BaseAchievement, GenericAchievement } from "./achievements/achievement"; +import { BarOptions, BaseBar, GenericBar } from "./bars/bar"; +import { BaseBuyable, BuyableOptions, GenericBuyable } from "./buyable"; +import { BaseChallenge, ChallengeOptions, GenericChallenge } from "./challenges/challenge"; +import { BaseClickable, ClickableOptions, GenericClickable } from "./clickables/clickable"; +import { BaseMilestone, GenericMilestone, MilestoneOptions } from "./milestones/milestone"; +import { BaseUpgrade, GenericUpgrade, UpgradeOptions } from "./upgrades/upgrade"; +import { Persistent, State } from "game/persistence"; +import { computed, Ref, unref } from "vue"; + +type FeatureOptions = AchievementOptions | BarOptions | BuyableOptions | ChallengeOptions | ClickableOptions | MilestoneOptions | UpgradeOptions; + +type BaseFeature = BaseAchievement | BaseBar | BaseBuyable | BaseChallenge | BaseClickable | BaseMilestone | BaseUpgrade; + +type GenericFeature = GenericAchievement | GenericBar | GenericBuyable | GenericChallenge | GenericClickable | GenericMilestone | GenericUpgrade; + +/*----====----*/ + +export type Decorator = { + getPersistents?(): Record>; + preConstruct?(feature: OptionsObject): void; + postConstruct?(feature: OptionsObject): void; + getGatheredProps?(feature: OptionsObject): Partial> +} + +/*----====----*/ + +// #region Effect Decorator +export type EffectFeatureOptions = { + effect: Computable; +} + +export type EffectFeature = Replace< + T & U, + { effect: GetComputableType; } +>; + +export type GenericEffectFeature = T & Replace< + EffectFeature, + { effect: ProcessedComputable; } +>; + +export const effectDecorator: Decorator = { + postConstruct(feature) { + processComputable(feature, "effect"); + } +} +// #endregion + +/*----====----*/ + +// #region Bonus Amount Decorator +export interface BonusFeatureOptions { + bonusAmount: Computable; +} + +export type BaseBonusFeature = BaseFeature & { + totalAmount: Ref; +} + +export type BonusAmountFeature = Replace< + T & U, + { + bonusAmount: GetComputableType; + } +>; + +export type GenericBonusFeature = Replace< + T & BonusAmountFeature, + { + bonusAmount: ProcessedComputable; + totalAmount: ProcessedComputable; + } +>; + +export const bonusAmountDecorator: Decorator}, GenericFeature & BaseBonusFeature & {amount: ProcessedComputable}> = { + postConstruct(feature) { + processComputable(feature, "bonusAmount"); + if (feature.totalAmount === undefined) { + feature.totalAmount = computed(() => Decimal.add( + unref(feature.amount ?? 0), + unref(feature.bonusAmount as ProcessedComputable) + )); + } + } +} + +export const bonusCompletionsDecorator: Decorator}, GenericFeature & BaseBonusFeature & {completions: ProcessedComputable}> = { + postConstruct(feature) { + processComputable(feature, "bonusAmount"); + if (feature.totalAmount === undefined) { + feature.totalAmount = computed(() => Decimal.add( + unref(feature.completions ?? 0), + unref(feature.bonusAmount as ProcessedComputable) + )); + } + } +} + +export const bonusEarnedDecorator: Decorator}, GenericFeature & BaseBonusFeature & {earned: ProcessedComputable}> = { + postConstruct(feature) { + processComputable(feature, "bonusAmount"); + if (feature.totalAmount === undefined) { + feature.totalAmount = computed(() => unref(feature.earned ?? false) + ? Decimal.add(unref(feature.bonusAmount as ProcessedComputable), 1) + : unref(feature.bonusAmount as ProcessedComputable) + ); + } + } +} +// #endregion + +/*----====----*/ + diff --git a/src/features/feature.ts b/src/features/feature.ts index afa251f..438689b 100644 --- a/src/features/feature.ts +++ b/src/features/feature.ts @@ -42,9 +42,9 @@ export type Replace = S & Omit; * with "this" bound to what the type will eventually be processed into. * Intended for making lazily evaluated objects. */ -export type OptionsFunc, S = R> = () => T & - Partial & - ThisType; +export type OptionsFunc, S = R> = () => OptionsObject; + +export type OptionsObject, S = R> = T & Partial & ThisType; let id = 0; /** From 691a68ecf2d44bb771fa3bcb968f68785100ee82 Mon Sep 17 00:00:00 2001 From: Seth Posner Date: Sat, 25 Feb 2023 16:48:36 -0800 Subject: [PATCH 002/134] Add decorators to decoratable features --- src/features/achievements/achievement.tsx | 18 +- src/features/action.tsx | 18 +- src/features/bars/bar.ts | 19 +- src/features/buyable.tsx | 269 ---------------------- src/features/challenges/challenge.tsx | 19 +- src/features/clickables/clickable.ts | 19 +- src/features/conversion.ts | 12 +- src/features/decorators.ts | 96 ++++---- src/features/milestones/milestone.tsx | 17 +- src/features/repeatable.tsx | 38 ++- src/features/trees/tree.ts | 19 +- src/features/upgrades/upgrade.ts | 19 +- 12 files changed, 213 insertions(+), 350 deletions(-) delete mode 100644 src/features/buyable.tsx diff --git a/src/features/achievements/achievement.tsx b/src/features/achievements/achievement.tsx index 500e93f..c28003c 100644 --- a/src/features/achievements/achievement.tsx +++ b/src/features/achievements/achievement.tsx @@ -1,4 +1,5 @@ import AchievementComponent from "features/achievements/Achievement.vue"; +import { Decorator } from "features/decorators"; import { CoercableComponent, Component, @@ -72,20 +73,28 @@ export type GenericAchievement = Replace< >; export function createAchievement( - optionsFunc?: OptionsFunc + optionsFunc?: OptionsFunc, + ...decorators: Decorator[] ): Achievement { const earned = persistent(false); + const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); return createLazyProxy(() => { const achievement = optionsFunc?.() ?? ({} as ReturnType>); achievement.id = getUniqueID("achievement-"); achievement.type = AchievementType; achievement[Component] = AchievementComponent; + for (const decorator of decorators) { + decorator.preConstruct?.(achievement); + } + achievement.earned = earned; achievement.complete = function () { earned.value = true; }; + Object.assign(achievement, decoratedData); + processComputable(achievement as T, "visibility"); setDefault(achievement, "visibility", Visibility.Visible); processComputable(achievement as T, "display"); @@ -94,9 +103,14 @@ export function createAchievement( processComputable(achievement as T, "style"); processComputable(achievement as T, "classes"); + for (const decorator of decorators) { + decorator.postConstruct?.(achievement); + } + + const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(achievement)), {}); achievement[GatherProps] = function (this: GenericAchievement) { const { visibility, display, earned, image, style, classes, mark, id } = this; - return { visibility, display, earned, image, style: unref(style), classes, mark, id }; + return { visibility, display, earned, image, style: unref(style), classes, mark, id, ...decoratedProps }; }; if (achievement.shouldEarn) { diff --git a/src/features/action.tsx b/src/features/action.tsx index 5d7e555..ed098bb 100644 --- a/src/features/action.tsx +++ b/src/features/action.tsx @@ -31,6 +31,7 @@ import { coerceComponent, isCoercableComponent, render } from "util/vue"; import { computed, Ref, ref, unref } from "vue"; import { BarOptions, createBar, GenericBar } from "./bars/bar"; import { ClickableOptions } from "./clickables/clickable"; +import { Decorator } from "./decorators"; export const ActionType = Symbol("Action"); @@ -77,9 +78,11 @@ export type GenericAction = Replace< >; export function createAction( - optionsFunc?: OptionsFunc + optionsFunc?: OptionsFunc, + ...decorators: Decorator[] ): Action { const progress = persistent(0); + const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); return createLazyProxy(() => { const action = optionsFunc?.() ?? ({} as ReturnType>); action.id = getUniqueID("action-"); @@ -89,8 +92,13 @@ export function createAction( // Required because of display changing types const genericAction = action as unknown as GenericAction; + for (const decorator of decorators) { + decorator.preConstruct?.(action); + } + action.isHolding = ref(false); action.progress = progress; + Object.assign(action, decoratedData); processComputable(action as T, "visibility"); setDefault(action, "visibility", Visibility.Visible); @@ -202,6 +210,11 @@ export function createAction( } }; + for (const decorator of decorators) { + decorator.postConstruct?.(action); + } + + const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(action))); action[GatherProps] = function (this: GenericAction) { const { display, @@ -225,7 +238,8 @@ export function createAction( canClick, small, mark, - id + id, + ...decoratedProps }; }; diff --git a/src/features/bars/bar.ts b/src/features/bars/bar.ts index f0436f4..107fe1f 100644 --- a/src/features/bars/bar.ts +++ b/src/features/bars/bar.ts @@ -1,4 +1,5 @@ import BarComponent from "features/bars/Bar.vue"; +import { Decorator } from "features/decorators"; import type { CoercableComponent, GenericComponent, @@ -71,14 +72,22 @@ export type GenericBar = Replace< >; export function createBar( - optionsFunc: OptionsFunc + optionsFunc: OptionsFunc, + ...decorators: Decorator[] ): Bar { + const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); return createLazyProxy(() => { const bar = optionsFunc(); bar.id = getUniqueID("bar-"); bar.type = BarType; bar[Component] = BarComponent; + for (const decorator of decorators) { + decorator.preConstruct?.(bar); + } + + Object.assign(bar, decoratedData); + processComputable(bar as T, "visibility"); setDefault(bar, "visibility", Visibility.Visible); processComputable(bar as T, "width"); @@ -94,6 +103,11 @@ export function createBar( processComputable(bar as T, "display"); processComputable(bar as T, "mark"); + for (const decorator of decorators) { + decorator.postConstruct?.(bar); + } + + const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(bar)), {}); bar[GatherProps] = function (this: GenericBar) { const { progress, @@ -125,7 +139,8 @@ export function createBar( baseStyle, fillStyle, mark, - id + id, + ...decoratedProps }; }; diff --git a/src/features/buyable.tsx b/src/features/buyable.tsx deleted file mode 100644 index 4457993..0000000 --- a/src/features/buyable.tsx +++ /dev/null @@ -1,269 +0,0 @@ -import ClickableComponent from "features/clickables/Clickable.vue"; -import type { - CoercableComponent, - GenericComponent, - OptionsFunc, - Replace, - StyleValue -} from "features/feature"; -import { Component, GatherProps, getUniqueID, jsx, setDefault, Visibility } from "features/feature"; -import type { Resource } from "features/resources/resource"; -import { DefaultValue, Persistent } from "game/persistence"; -import { persistent } from "game/persistence"; -import type { DecimalSource } from "util/bignum"; -import Decimal, { format, formatWhole } from "util/bignum"; -import type { - Computable, - GetComputableType, - GetComputableTypeWithDefault, - ProcessedComputable -} from "util/computed"; -import { processComputable } from "util/computed"; -import { createLazyProxy } from "util/proxies"; -import { coerceComponent, isCoercableComponent } from "util/vue"; -import type { Ref } from "vue"; -import { computed, unref } from "vue"; -import { Decorator } from "./decorators"; - -export const BuyableType = Symbol("Buyable"); - -export type BuyableDisplay = - | CoercableComponent - | { - title?: CoercableComponent; - description?: CoercableComponent; - effectDisplay?: CoercableComponent; - showAmount?: boolean; - }; - -export interface BuyableOptions { - visibility?: Computable; - cost?: Computable; - resource?: Resource; - canPurchase?: Computable; - purchaseLimit?: Computable; - initialValue?: DecimalSource; - classes?: Computable>; - style?: Computable; - mark?: Computable; - small?: Computable; - display?: Computable; - onPurchase?: (cost: DecimalSource | undefined) => void; -} - -export interface BaseBuyable { - id: string; - amount: Persistent; - maxed: Ref; - canAfford: Ref; - canClick: ProcessedComputable; - onClick: VoidFunction; - purchase: VoidFunction; - type: typeof BuyableType; - [Component]: typeof ClickableComponent; - [GatherProps]: () => Record; -} - -export type Buyable = Replace< - T & BaseBuyable, - { - visibility: GetComputableTypeWithDefault; - cost: GetComputableType; - resource: GetComputableType; - canPurchase: GetComputableTypeWithDefault>; - purchaseLimit: GetComputableTypeWithDefault; - classes: GetComputableType; - style: GetComputableType; - mark: GetComputableType; - small: GetComputableType; - display: Ref; - } ->; - -export type GenericBuyable = Replace< - Buyable, - { - visibility: ProcessedComputable; - canPurchase: ProcessedComputable; - purchaseLimit: ProcessedComputable; - } ->; - -export function createBuyable( - optionsFunc: OptionsFunc, - ...decorators: Decorator[] -): Buyable { - const amount = persistent(0); - - const persistents = decorators.reduce((current, next) => Object.assign(current, next.getPersistents?.()), {}); - - return createLazyProxy(() => { - const buyable = optionsFunc(); - - if (buyable.canPurchase == null && (buyable.resource == null || buyable.cost == null)) { - console.warn( - "Cannot create buyable without a canPurchase property or a resource and cost property", - buyable - ); - throw "Cannot create buyable without a canPurchase property or a resource and cost property"; - } - - buyable.id = getUniqueID("buyable-"); - buyable.type = BuyableType; - buyable[Component] = ClickableComponent; - - for (const decorator of decorators) { - decorator.preConstruct?.(buyable); - } - - buyable.amount = amount; - buyable.amount[DefaultValue] = buyable.initialValue ?? 0; - - Object.assign(buyable, persistents); - - buyable.canAfford = computed(() => { - const genericBuyable = buyable as GenericBuyable; - const cost = unref(genericBuyable.cost); - return ( - genericBuyable.resource != null && - cost != null && - Decimal.gte(genericBuyable.resource.value, cost) - ); - }); - if (buyable.canPurchase == null) { - buyable.canPurchase = computed( - () => - unref((buyable as GenericBuyable).visibility) === Visibility.Visible && - unref((buyable as GenericBuyable).canAfford) && - Decimal.lt( - (buyable as GenericBuyable).amount.value, - unref((buyable as GenericBuyable).purchaseLimit) - ) - ); - } - buyable.maxed = computed(() => - Decimal.gte( - (buyable as GenericBuyable).amount.value, - unref((buyable as GenericBuyable).purchaseLimit) - ) - ); - processComputable(buyable as T, "classes"); - const classes = buyable.classes as ProcessedComputable> | undefined; - buyable.classes = computed(() => { - const currClasses = unref(classes) || {}; - if ((buyable as GenericBuyable).maxed.value) { - currClasses.bought = true; - } - return currClasses; - }); - processComputable(buyable as T, "canPurchase"); - buyable.canClick = buyable.canPurchase as ProcessedComputable; - buyable.onClick = buyable.purchase = - buyable.onClick ?? - buyable.purchase ?? - function (this: GenericBuyable) { - const genericBuyable = buyable as GenericBuyable; - if (!unref(genericBuyable.canPurchase)) { - return; - } - const cost = unref(genericBuyable.cost); - if (genericBuyable.cost != null && genericBuyable.resource != null) { - genericBuyable.resource.value = Decimal.sub( - genericBuyable.resource.value, - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - cost! - ); - genericBuyable.amount.value = Decimal.add(genericBuyable.amount.value, 1); - } - genericBuyable.onPurchase?.(cost); - }; - processComputable(buyable as T, "display"); - const display = buyable.display; - buyable.display = jsx(() => { - // TODO once processComputable types correctly, remove this "as X" - const currDisplay = unref(display) as BuyableDisplay; - if (isCoercableComponent(currDisplay)) { - const CurrDisplay = coerceComponent(currDisplay); - return ; - } - if (currDisplay != null && buyable.cost != null && buyable.resource != null) { - const genericBuyable = buyable as GenericBuyable; - const Title = coerceComponent(currDisplay.title ?? "", "h3"); - const Description = coerceComponent(currDisplay.description ?? ""); - const EffectDisplay = coerceComponent(currDisplay.effectDisplay ?? ""); - - return ( - - {currDisplay.title == null ? null : ( -
- - </div> - )} - {currDisplay.description == null ? null : <Description />} - {currDisplay.showAmount === false ? null : ( - <div> - <br /> - {unref(genericBuyable.purchaseLimit) === Decimal.dInf ? ( - <>Amount: {formatWhole(genericBuyable.amount.value)}</> - ) : ( - <> - Amount: {formatWhole(genericBuyable.amount.value)} /{" "} - {formatWhole(unref(genericBuyable.purchaseLimit))} - </> - )} - </div> - )} - {currDisplay.effectDisplay == null ? null : ( - <div> - <br /> - Currently: <EffectDisplay /> - </div> - )} - {genericBuyable.cost != null && !genericBuyable.maxed.value ? ( - <div> - <br /> - Cost: {format(unref(genericBuyable.cost))}{" "} - {buyable.resource.displayName} - </div> - ) : null} - </span> - ); - } - return ""; - }); - - processComputable(buyable as T, "visibility"); - setDefault(buyable, "visibility", Visibility.Visible); - processComputable(buyable as T, "cost"); - processComputable(buyable as T, "resource"); - processComputable(buyable as T, "purchaseLimit"); - setDefault(buyable, "purchaseLimit", Decimal.dInf); - processComputable(buyable as T, "style"); - processComputable(buyable as T, "mark"); - processComputable(buyable as T, "small"); - - const gatheredProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(buyable)), {}); - buyable[GatherProps] = function (this: GenericBuyable) { - const { display, visibility, style, classes, onClick, canClick, small, mark, id } = - this; - return { - display, - visibility, - style: unref(style), - classes, - onClick, - canClick, - small, - mark, - id, - ...gatheredProps - }; - }; - - for (const decorator of decorators) { - decorator.postConstruct?.(buyable); - } - - return buyable as unknown as Buyable<T>; - }); -} diff --git a/src/features/challenges/challenge.tsx b/src/features/challenges/challenge.tsx index ef4c77d..d703014 100644 --- a/src/features/challenges/challenge.tsx +++ b/src/features/challenges/challenge.tsx @@ -1,6 +1,7 @@ import { isArray } from "@vue/shared"; import Toggle from "components/fields/Toggle.vue"; import ChallengeComponent from "features/challenges/Challenge.vue"; +import { Decorator } from "features/decorators"; import type { CoercableComponent, OptionsFunc, Replace, StyleValue } from "features/feature"; import { Component, @@ -98,10 +99,12 @@ export type GenericChallenge = Replace< >; export function createChallenge<T extends ChallengeOptions>( - optionsFunc: OptionsFunc<T, BaseChallenge, GenericChallenge> + optionsFunc: OptionsFunc<T, BaseChallenge, GenericChallenge>, + ...decorators: Decorator<T, BaseChallenge, GenericChallenge>[] ): Challenge<T> { const completions = persistent(0); const active = persistent(false); + const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); return createLazyProxy(() => { const challenge = optionsFunc(); @@ -120,8 +123,14 @@ export function createChallenge<T extends ChallengeOptions>( challenge.type = ChallengeType; challenge[Component] = ChallengeComponent; + for (const decorator of decorators) { + decorator.preConstruct?.(challenge); + } + challenge.completions = completions; challenge.active = active; + Object.assign(challenge, decoratedData); + challenge.completed = computed(() => Decimal.gt((challenge as GenericChallenge).completions.value, 0) ); @@ -234,6 +243,11 @@ export function createChallenge<T extends ChallengeOptions>( }); } + for (const decorator of decorators) { + decorator.postConstruct?.(challenge); + } + + const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(challenge)), {}); challenge[GatherProps] = function (this: GenericChallenge) { const { active, @@ -261,7 +275,8 @@ export function createChallenge<T extends ChallengeOptions>( canStart, mark, id, - toggle + toggle, + ...decoratedProps }; }; diff --git a/src/features/clickables/clickable.ts b/src/features/clickables/clickable.ts index c7c83e3..8df5285 100644 --- a/src/features/clickables/clickable.ts +++ b/src/features/clickables/clickable.ts @@ -1,4 +1,5 @@ import ClickableComponent from "features/clickables/Clickable.vue"; +import { Decorator } from "features/decorators"; import type { CoercableComponent, GenericComponent, @@ -67,14 +68,22 @@ export type GenericClickable = Replace< >; export function createClickable<T extends ClickableOptions>( - optionsFunc?: OptionsFunc<T, BaseClickable, GenericClickable> + optionsFunc?: OptionsFunc<T, BaseClickable, GenericClickable>, + ...decorators: Decorator<T, BaseClickable, GenericClickable>[] ): Clickable<T> { + const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); return createLazyProxy(() => { const clickable = optionsFunc?.() ?? ({} as ReturnType<NonNullable<typeof optionsFunc>>); clickable.id = getUniqueID("clickable-"); clickable.type = ClickableType; clickable[Component] = ClickableComponent; + for (const decorator of decorators) { + decorator.preConstruct?.(clickable); + } + + Object.assign(clickable, decoratedData); + processComputable(clickable as T, "visibility"); setDefault(clickable, "visibility", Visibility.Visible); processComputable(clickable as T, "canClick"); @@ -101,6 +110,11 @@ export function createClickable<T extends ClickableOptions>( }; } + for (const decorator of decorators) { + decorator.postConstruct?.(clickable); + } + + const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(clickable)), {}); clickable[GatherProps] = function (this: GenericClickable) { const { display, @@ -124,7 +138,8 @@ export function createClickable<T extends ClickableOptions>( canClick, small, mark, - id + id, + ...decoratedProps }; }; diff --git a/src/features/conversion.ts b/src/features/conversion.ts index 97637fa..baa1ce2 100644 --- a/src/features/conversion.ts +++ b/src/features/conversion.ts @@ -11,6 +11,7 @@ import { convertComputable, processComputable } from "util/computed"; import { createLazyProxy } from "util/proxies"; import type { Ref } from "vue"; import { computed, unref } from "vue"; +import { Decorator } from "./decorators"; /** An object that configures a {@link Conversion}. */ export interface ConversionOptions { @@ -135,11 +136,16 @@ export type GenericConversion = Replace< * @see {@link createIndependentConversion}. */ export function createConversion<T extends ConversionOptions>( - optionsFunc: OptionsFunc<T, BaseConversion, GenericConversion> + optionsFunc: OptionsFunc<T, BaseConversion, GenericConversion>, + ...decorators: Decorator<T, BaseConversion, GenericConversion>[] ): Conversion<T> { return createLazyProxy(() => { const conversion = optionsFunc(); + for (const decorator of decorators) { + decorator.preConstruct?.(conversion); + } + if (conversion.currentGain == null) { conversion.currentGain = computed(() => { let gain = conversion.gainModifier @@ -201,6 +207,10 @@ export function createConversion<T extends ConversionOptions>( processComputable(conversion as T, "roundUpCost"); setDefault(conversion, "roundUpCost", true); + for (const decorator of decorators) { + decorator.postConstruct?.(conversion); + } + return conversion as unknown as Conversion<T>; }); } diff --git a/src/features/decorators.ts b/src/features/decorators.ts index 774312c..4eeadb4 100644 --- a/src/features/decorators.ts +++ b/src/features/decorators.ts @@ -1,49 +1,35 @@ import { Replace, OptionsObject } from "./feature"; import Decimal, { DecimalSource } from "util/bignum"; import { Computable, GetComputableType, processComputable, ProcessedComputable } from "util/computed"; -import { AchievementOptions, BaseAchievement, GenericAchievement } from "./achievements/achievement"; -import { BarOptions, BaseBar, GenericBar } from "./bars/bar"; -import { BaseBuyable, BuyableOptions, GenericBuyable } from "./buyable"; -import { BaseChallenge, ChallengeOptions, GenericChallenge } from "./challenges/challenge"; -import { BaseClickable, ClickableOptions, GenericClickable } from "./clickables/clickable"; -import { BaseMilestone, GenericMilestone, MilestoneOptions } from "./milestones/milestone"; -import { BaseUpgrade, GenericUpgrade, UpgradeOptions } from "./upgrades/upgrade"; import { Persistent, State } from "game/persistence"; import { computed, Ref, unref } from "vue"; -type FeatureOptions = AchievementOptions | BarOptions | BuyableOptions | ChallengeOptions | ClickableOptions | MilestoneOptions | UpgradeOptions; - -type BaseFeature = BaseAchievement | BaseBar | BaseBuyable | BaseChallenge | BaseClickable | BaseMilestone | BaseUpgrade; - -type GenericFeature = GenericAchievement | GenericBar | GenericBuyable | GenericChallenge | GenericClickable | GenericMilestone | GenericUpgrade; - /*----====----*/ -export type Decorator<Options extends FeatureOptions, Base extends BaseFeature, Generic extends GenericFeature, S extends State = State> = { - getPersistents?(): Record<string, Persistent<S>>; - preConstruct?(feature: OptionsObject<Options,Base,Generic>): void; - postConstruct?(feature: OptionsObject<Options,Base,Generic>): void; - getGatheredProps?(feature: OptionsObject<Options,Base,Generic>): Partial<OptionsObject<Options,Base,Generic>> +export type Decorator<FeatureOptions, BaseFeature = {}, GenericFeature = {}, S extends State = State> = { + getPersistentData?(): Record<string, Persistent<S>>; + preConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): void; + postConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): void; + getGatheredProps?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): Partial<OptionsObject<FeatureOptions,BaseFeature,GenericFeature>> } /*----====----*/ // #region Effect Decorator -export type EffectFeatureOptions = { +export interface EffectFeatureOptions { effect: Computable<any>; } -export type EffectFeature<T extends EffectFeatureOptions, U extends BaseFeature> = Replace< - T & U, - { effect: GetComputableType<T["effect"]>; } +export type EffectFeature<T extends EffectFeatureOptions> = Replace< + T, { effect: GetComputableType<T["effect"]>; } >; -export type GenericEffectFeature<T extends GenericFeature> = T & Replace< - EffectFeature<EffectFeatureOptions, BaseFeature>, +export type GenericEffectFeature = Replace< + EffectFeature<EffectFeatureOptions>, { effect: ProcessedComputable<any>; } >; -export const effectDecorator: Decorator<FeatureOptions & EffectFeatureOptions, BaseFeature, GenericFeature & BaseFeature> = { +export const effectDecorator: Decorator<EffectFeatureOptions, {}, GenericEffectFeature> = { postConstruct(feature) { processComputable(feature, "effect"); } @@ -52,31 +38,46 @@ export const effectDecorator: Decorator<FeatureOptions & EffectFeatureOptions, B /*----====----*/ -// #region Bonus Amount Decorator -export interface BonusFeatureOptions { +// #region Bonus Amount/Completions Decorator +export interface BonusAmountFeatureOptions { bonusAmount: Computable<DecimalSource>; } - -export type BaseBonusFeature = BaseFeature & { - totalAmount: Ref<DecimalSource>; +export interface BonusCompletionsFeatureOptions { + bonusCompletions: Computable<DecimalSource>; } -export type BonusAmountFeature<T extends BonusFeatureOptions, U extends BaseBonusFeature> = Replace< - T & U, - { - bonusAmount: GetComputableType<T["bonusAmount"]>; - } +export interface BaseBonusAmountFeature { + amount: Ref<DecimalSource>; + totalAmount: Ref<DecimalSource>; +} +export interface BaseBonusCompletionsFeature { + completions: Ref<DecimalSource>; + totalCompletions: Ref<DecimalSource>; +} + +export type BonusAmountFeature<T extends BonusAmountFeatureOptions> = Replace< + T, { bonusAmount: GetComputableType<T["bonusAmount"]>; } +>; +export type BonusCompletionsFeature<T extends BonusCompletionsFeatureOptions> = Replace< + T, { bonusAmount: GetComputableType<T["bonusCompletions"]>; } >; -export type GenericBonusFeature<T extends GenericFeature> = Replace< - T & BonusAmountFeature<BonusFeatureOptions, BaseBonusFeature>, +export type GenericBonusAmountFeature = Replace< + BonusAmountFeature<BonusAmountFeatureOptions>, { bonusAmount: ProcessedComputable<DecimalSource>; totalAmount: ProcessedComputable<DecimalSource>; } >; +export type GenericBonusCompletionsFeature = Replace< + BonusCompletionsFeature<BonusCompletionsFeatureOptions>, + { + bonusCompletions: ProcessedComputable<DecimalSource>; + totalCompletions: ProcessedComputable<DecimalSource>; + } +>; -export const bonusAmountDecorator: Decorator<FeatureOptions & BonusFeatureOptions, BaseBonusFeature & {amount: ProcessedComputable<DecimalSource>}, GenericFeature & BaseBonusFeature & {amount: ProcessedComputable<DecimalSource>}> = { +export const bonusAmountDecorator: Decorator<BonusAmountFeatureOptions, BaseBonusAmountFeature, GenericBonusAmountFeature> = { postConstruct(feature) { processComputable(feature, "bonusAmount"); if (feature.totalAmount === undefined) { @@ -87,30 +88,17 @@ export const bonusAmountDecorator: Decorator<FeatureOptions & BonusFeatureOption } } } - -export const bonusCompletionsDecorator: Decorator<FeatureOptions & BonusFeatureOptions, BaseBonusFeature & {completions: ProcessedComputable<DecimalSource>}, GenericFeature & BaseBonusFeature & {completions: ProcessedComputable<DecimalSource>}> = { +export const bonusCompletionsDecorator: Decorator<BonusAmountFeatureOptions, BaseBonusCompletionsFeature, GenericBonusCompletionsFeature> = { postConstruct(feature) { processComputable(feature, "bonusAmount"); - if (feature.totalAmount === undefined) { - feature.totalAmount = computed(() => Decimal.add( + if (feature.totalCompletions === undefined) { + feature.totalCompletions = computed(() => Decimal.add( unref(feature.completions ?? 0), unref(feature.bonusAmount as ProcessedComputable<DecimalSource>) )); } } } - -export const bonusEarnedDecorator: Decorator<FeatureOptions & BonusFeatureOptions, BaseBonusFeature & {earned: ProcessedComputable<boolean>}, GenericFeature & BaseBonusFeature & {earned: ProcessedComputable<boolean>}> = { - postConstruct(feature) { - processComputable(feature, "bonusAmount"); - if (feature.totalAmount === undefined) { - feature.totalAmount = computed(() => unref(feature.earned ?? false) - ? Decimal.add(unref(feature.bonusAmount as ProcessedComputable<DecimalSource>), 1) - : unref(feature.bonusAmount as ProcessedComputable<DecimalSource>) - ); - } - } -} // #endregion /*----====----*/ diff --git a/src/features/milestones/milestone.tsx b/src/features/milestones/milestone.tsx index 6ea736b..d76925e 100644 --- a/src/features/milestones/milestone.tsx +++ b/src/features/milestones/milestone.tsx @@ -1,4 +1,5 @@ import Select from "components/fields/Select.vue"; +import { Decorator } from "features/decorators"; import type { CoercableComponent, GenericComponent, @@ -92,16 +93,23 @@ export type GenericMilestone = Replace< >; export function createMilestone<T extends MilestoneOptions>( - optionsFunc?: OptionsFunc<T, BaseMilestone, GenericMilestone> + optionsFunc?: OptionsFunc<T, BaseMilestone, GenericMilestone>, + ...decorators: Decorator<T, BaseMilestone, GenericMilestone>[] ): Milestone<T> { const earned = persistent<boolean>(false); + const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); return createLazyProxy(() => { const milestone = optionsFunc?.() ?? ({} as ReturnType<NonNullable<typeof optionsFunc>>); milestone.id = getUniqueID("milestone-"); milestone.type = MilestoneType; milestone[Component] = MilestoneComponent; + for (const decorator of decorators) { + decorator.preConstruct?.(milestone); + } + milestone.earned = earned; + Object.assign(milestone, decoratedData); milestone.complete = function () { const genericMilestone = milestone as GenericMilestone; earned.value = true; @@ -160,9 +168,14 @@ export function createMilestone<T extends MilestoneOptions>( processComputable(milestone as T, "display"); processComputable(milestone as T, "showPopups"); + for (const decorator of decorators) { + decorator.postConstruct?.(milestone); + } + + const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next?.getGatheredProps?.(milestone)), {}); milestone[GatherProps] = function (this: GenericMilestone) { const { visibility, display, style, classes, earned, id } = this; - return { visibility, display, style: unref(style), classes, earned, id }; + return { visibility, display, style: unref(style), classes, earned, id, ...decoratedProps }; }; if (milestone.shouldEarn) { diff --git a/src/features/repeatable.tsx b/src/features/repeatable.tsx index 96bea11..91e1052 100644 --- a/src/features/repeatable.tsx +++ b/src/features/repeatable.tsx @@ -24,6 +24,7 @@ import { createLazyProxy } from "util/proxies"; import { coerceComponent, isCoercableComponent } from "util/vue"; import type { Ref } from "vue"; import { computed, unref } from "vue"; +import { Decorator, GenericBonusAmountFeature } from "./decorators"; /** A symbol used to identify {@link Repeatable} features. */ export const RepeatableType = Symbol("Repeatable"); @@ -118,9 +119,11 @@ export type GenericRepeatable = Replace< * @param optionsFunc Repeatable options. */ export function createRepeatable<T extends RepeatableOptions>( - optionsFunc: OptionsFunc<T, BaseRepeatable, GenericRepeatable> + optionsFunc: OptionsFunc<T, BaseRepeatable, GenericRepeatable>, + ...decorators: Decorator<T, BaseRepeatable, GenericRepeatable>[] ): Repeatable<T> { const amount = persistent<DecimalSource>(0); + const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); return createLazyProxy(() => { const repeatable = optionsFunc(); @@ -128,9 +131,15 @@ export function createRepeatable<T extends RepeatableOptions>( repeatable.type = RepeatableType; repeatable[Component] = ClickableComponent; + for (const decorator of decorators) { + decorator.preConstruct?.(repeatable); + } + repeatable.amount = amount; repeatable.amount[DefaultValue] = repeatable.initialAmount ?? 0; + Object.assign(repeatable, decoratedData); + const limitRequirement = { requirementMet: computed(() => Decimal.sub( @@ -212,14 +221,17 @@ export function createRepeatable<T extends RepeatableOptions>( {currDisplay.showAmount === false ? null : ( <div> <br /> - {unref(genericRepeatable.limit) === Decimal.dInf ? ( - <>Amount: {formatWhole(genericRepeatable.amount.value)}</> - ) : ( - <> - Amount: {formatWhole(genericRepeatable.amount.value)} /{" "} - {formatWhole(unref(genericRepeatable.limit))} - </> - )} + joinJSX( + <>Amount: {formatWhole(genericRepeatable.amount.value)}</>, + {unref(genericRepeatable.limit) !== Decimal.dInf ? ( + <> / {formatWhole(unref(genericRepeatable.limit))}</> + ) : undefined}, + {(genericRepeatable as GenericRepeatable & GenericBonusAmountFeature).bonusAmount == null ? null : ( + Decimal.gt(unref((genericRepeatable as GenericRepeatable & GenericBonusAmountFeature).bonusAmount), 0) ? ( + <> + {formatWhole(unref((genericRepeatable as GenericRepeatable & GenericBonusAmountFeature).bonusAmount))}</> + ) : undefined) + } + ) </div> )} {currDisplay.effectDisplay == null ? null : ( @@ -254,6 +266,11 @@ export function createRepeatable<T extends RepeatableOptions>( processComputable(repeatable as T, "small"); processComputable(repeatable as T, "maximize"); + for (const decorator of decorators) { + decorator.postConstruct?.(repeatable); + } + + const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(repeatable)), {}); repeatable[GatherProps] = function (this: GenericRepeatable) { const { display, visibility, style, classes, onClick, canClick, small, mark, id } = this; @@ -266,7 +283,8 @@ export function createRepeatable<T extends RepeatableOptions>( canClick, small, mark, - id + id, + ...decoratedProps }; }; diff --git a/src/features/trees/tree.ts b/src/features/trees/tree.ts index bcbf333..caaeee3 100644 --- a/src/features/trees/tree.ts +++ b/src/features/trees/tree.ts @@ -1,3 +1,4 @@ +import { Decorator } from "features/decorators"; import type { CoercableComponent, OptionsFunc, Replace, StyleValue } from "features/feature"; import { Component, GatherProps, getUniqueID, setDefault, Visibility } from "features/feature"; import type { Link } from "features/links/links"; @@ -66,14 +67,22 @@ export type GenericTreeNode = Replace< >; export function createTreeNode<T extends TreeNodeOptions>( - optionsFunc?: OptionsFunc<T, BaseTreeNode, GenericTreeNode> + optionsFunc?: OptionsFunc<T, BaseTreeNode, GenericTreeNode>, + ...decorators: Decorator<T, BaseTreeNode, GenericTreeNode>[] ): TreeNode<T> { + const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); return createLazyProxy(() => { const treeNode = optionsFunc?.() ?? ({} as ReturnType<NonNullable<typeof optionsFunc>>); treeNode.id = getUniqueID("treeNode-"); treeNode.type = TreeNodeType; treeNode[Component] = TreeNodeComponent; + for (const decorator of decorators) { + decorator.preConstruct?.(treeNode); + } + + Object.assign(decoratedData); + processComputable(treeNode as T, "visibility"); setDefault(treeNode, "visibility", Visibility.Visible); processComputable(treeNode as T, "canClick"); @@ -85,6 +94,10 @@ export function createTreeNode<T extends TreeNodeOptions>( processComputable(treeNode as T, "style"); processComputable(treeNode as T, "mark"); + for (const decorator of decorators) { + decorator.postConstruct?.(treeNode); + } + if (treeNode.onClick) { const onClick = treeNode.onClick.bind(treeNode); treeNode.onClick = function (e) { @@ -102,6 +115,7 @@ export function createTreeNode<T extends TreeNodeOptions>( }; } + const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(treeNode)), {}); treeNode[GatherProps] = function (this: GenericTreeNode) { const { display, @@ -127,7 +141,8 @@ export function createTreeNode<T extends TreeNodeOptions>( glowColor, canClick, mark, - id + id, + ...decoratedProps }; }; diff --git a/src/features/upgrades/upgrade.ts b/src/features/upgrades/upgrade.ts index 5eda0e0..14ea1ec 100644 --- a/src/features/upgrades/upgrade.ts +++ b/src/features/upgrades/upgrade.ts @@ -1,4 +1,5 @@ import { isArray } from "@vue/shared"; +import { Decorator } from "features/decorators"; import type { CoercableComponent, GenericComponent, @@ -85,16 +86,24 @@ export type GenericUpgrade = Replace< >; export function createUpgrade<T extends UpgradeOptions>( - optionsFunc: OptionsFunc<T, BaseUpgrade, GenericUpgrade> + optionsFunc: OptionsFunc<T, BaseUpgrade, GenericUpgrade>, + ...decorators: Decorator<T, BaseUpgrade, GenericUpgrade>[] ): Upgrade<T> { const bought = persistent<boolean>(false); + const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); return createLazyProxy(() => { const upgrade = optionsFunc(); upgrade.id = getUniqueID("upgrade-"); upgrade.type = UpgradeType; upgrade[Component] = UpgradeComponent; + for (const decorator of decorators) { + decorator.preConstruct?.(upgrade); + } + upgrade.bought = bought; + Object.assign(upgrade, decoratedData); + upgrade.canPurchase = computed(() => requirementsMet(upgrade.requirements)); upgrade.purchase = function () { const genericUpgrade = upgrade as GenericUpgrade; @@ -120,6 +129,11 @@ export function createUpgrade<T extends UpgradeOptions>( processComputable(upgrade as T, "display"); processComputable(upgrade as T, "mark"); + for (const decorator of decorators) { + decorator.preConstruct?.(upgrade); + } + + const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(upgrade)), {}); upgrade[GatherProps] = function (this: GenericUpgrade) { const { display, @@ -143,7 +157,8 @@ export function createUpgrade<T extends UpgradeOptions>( bought, mark, id, - purchase + purchase, + ...decoratedProps }; }; From 4b2fa80d4cf19a4235aa7d11b814aeee04570cc0 Mon Sep 17 00:00:00 2001 From: Seth Posner <smartseth@hotmail.com> Date: Thu, 2 Mar 2023 15:04:18 -0800 Subject: [PATCH 003/134] Remove decorated data from generic repeatable display --- src/features/repeatable.tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/features/repeatable.tsx b/src/features/repeatable.tsx index 91e1052..ae3ecf4 100644 --- a/src/features/repeatable.tsx +++ b/src/features/repeatable.tsx @@ -225,12 +225,7 @@ export function createRepeatable<T extends RepeatableOptions>( <>Amount: {formatWhole(genericRepeatable.amount.value)}</>, {unref(genericRepeatable.limit) !== Decimal.dInf ? ( <> / {formatWhole(unref(genericRepeatable.limit))}</> - ) : undefined}, - {(genericRepeatable as GenericRepeatable & GenericBonusAmountFeature).bonusAmount == null ? null : ( - Decimal.gt(unref((genericRepeatable as GenericRepeatable & GenericBonusAmountFeature).bonusAmount), 0) ? ( - <> + {formatWhole(unref((genericRepeatable as GenericRepeatable & GenericBonusAmountFeature).bonusAmount))}</> - ) : undefined) - } + ) : undefined} ) </div> )} From 2f847c3fd931a90706e20e49034d842ee17f6e00 Mon Sep 17 00:00:00 2001 From: Seth Posner <smartseth@hotmail.com> Date: Thu, 2 Mar 2023 15:05:24 -0800 Subject: [PATCH 004/134] Split decorators into multiple files, add typedocs --- src/features/achievements/achievement.tsx | 2 +- src/features/action.tsx | 2 +- src/features/bars/bar.ts | 2 +- src/features/challenges/challenge.tsx | 2 +- src/features/clickables/clickable.ts | 2 +- src/features/conversion.ts | 2 +- .../bonusDecorator.ts} | 76 +++++++------------ src/features/decorators/common.ts | 49 ++++++++++++ src/features/milestones/milestone.tsx | 2 +- src/features/repeatable.tsx | 2 +- src/features/trees/tree.ts | 2 +- src/features/upgrades/upgrade.ts | 4 +- 12 files changed, 90 insertions(+), 57 deletions(-) rename src/features/{decorators.ts => decorators/bonusDecorator.ts} (50%) create mode 100644 src/features/decorators/common.ts diff --git a/src/features/achievements/achievement.tsx b/src/features/achievements/achievement.tsx index 87af9e2..64f60ee 100644 --- a/src/features/achievements/achievement.tsx +++ b/src/features/achievements/achievement.tsx @@ -1,5 +1,5 @@ import AchievementComponent from "features/achievements/Achievement.vue"; -import { Decorator } from "features/decorators"; +import { Decorator } from "features/decorators/common"; import { CoercableComponent, Component, diff --git a/src/features/action.tsx b/src/features/action.tsx index ed098bb..ab4b3e4 100644 --- a/src/features/action.tsx +++ b/src/features/action.tsx @@ -31,7 +31,7 @@ import { coerceComponent, isCoercableComponent, render } from "util/vue"; import { computed, Ref, ref, unref } from "vue"; import { BarOptions, createBar, GenericBar } from "./bars/bar"; import { ClickableOptions } from "./clickables/clickable"; -import { Decorator } from "./decorators"; +import { Decorator } from "./decorators/common"; export const ActionType = Symbol("Action"); diff --git a/src/features/bars/bar.ts b/src/features/bars/bar.ts index 107fe1f..72d9a60 100644 --- a/src/features/bars/bar.ts +++ b/src/features/bars/bar.ts @@ -1,5 +1,5 @@ import BarComponent from "features/bars/Bar.vue"; -import { Decorator } from "features/decorators"; +import { Decorator } from "features/decorators/common"; import type { CoercableComponent, GenericComponent, diff --git a/src/features/challenges/challenge.tsx b/src/features/challenges/challenge.tsx index f735191..1bbbee6 100644 --- a/src/features/challenges/challenge.tsx +++ b/src/features/challenges/challenge.tsx @@ -1,7 +1,7 @@ import { isArray } from "@vue/shared"; import Toggle from "components/fields/Toggle.vue"; import ChallengeComponent from "features/challenges/Challenge.vue"; -import { Decorator } from "features/decorators"; +import { Decorator } from "features/decorators/common"; import type { CoercableComponent, OptionsFunc, Replace, StyleValue } from "features/feature"; import { Component, diff --git a/src/features/clickables/clickable.ts b/src/features/clickables/clickable.ts index 8df5285..b9e383b 100644 --- a/src/features/clickables/clickable.ts +++ b/src/features/clickables/clickable.ts @@ -1,5 +1,5 @@ import ClickableComponent from "features/clickables/Clickable.vue"; -import { Decorator } from "features/decorators"; +import { Decorator } from "features/decorators/common"; import type { CoercableComponent, GenericComponent, diff --git a/src/features/conversion.ts b/src/features/conversion.ts index baa1ce2..b0ee578 100644 --- a/src/features/conversion.ts +++ b/src/features/conversion.ts @@ -11,7 +11,7 @@ import { convertComputable, processComputable } from "util/computed"; import { createLazyProxy } from "util/proxies"; import type { Ref } from "vue"; import { computed, unref } from "vue"; -import { Decorator } from "./decorators"; +import { Decorator } from "./decorators/common"; /** An object that configures a {@link Conversion}. */ export interface ConversionOptions { diff --git a/src/features/decorators.ts b/src/features/decorators/bonusDecorator.ts similarity index 50% rename from src/features/decorators.ts rename to src/features/decorators/bonusDecorator.ts index 4eeadb4..d41d2d5 100644 --- a/src/features/decorators.ts +++ b/src/features/decorators/bonusDecorator.ts @@ -1,44 +1,9 @@ -import { Replace, OptionsObject } from "./feature"; -import Decimal, { DecimalSource } from "util/bignum"; -import { Computable, GetComputableType, processComputable, ProcessedComputable } from "util/computed"; -import { Persistent, State } from "game/persistence"; -import { computed, Ref, unref } from "vue"; +import { Replace } from "features/feature"; +import Decimal, { DecimalSource } from "lib/break_eternity"; +import { Computable, GetComputableType, ProcessedComputable, processComputable } from "util/computed"; +import { Ref, computed, unref } from "vue"; +import { Decorator } from "./common"; -/*----====----*/ - -export type Decorator<FeatureOptions, BaseFeature = {}, GenericFeature = {}, S extends State = State> = { - getPersistentData?(): Record<string, Persistent<S>>; - preConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): void; - postConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): void; - getGatheredProps?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): Partial<OptionsObject<FeatureOptions,BaseFeature,GenericFeature>> -} - -/*----====----*/ - -// #region Effect Decorator -export interface EffectFeatureOptions { - effect: Computable<any>; -} - -export type EffectFeature<T extends EffectFeatureOptions> = Replace< - T, { effect: GetComputableType<T["effect"]>; } ->; - -export type GenericEffectFeature = Replace< - EffectFeature<EffectFeatureOptions>, - { effect: ProcessedComputable<any>; } ->; - -export const effectDecorator: Decorator<EffectFeatureOptions, {}, GenericEffectFeature> = { - postConstruct(feature) { - processComputable(feature, "effect"); - } -} -// #endregion - -/*----====----*/ - -// #region Bonus Amount/Completions Decorator export interface BonusAmountFeatureOptions { bonusAmount: Computable<DecimalSource>; } @@ -77,6 +42,16 @@ export type GenericBonusCompletionsFeature = Replace< } >; +/** + * Allows the addition of "bonus levels" to the decorated feature, with an accompanying "total amount". + * To function properly, the `createFeature()` function must have its generic type extended by {@linkcode BonusAmountFeatureOptions}. + * To allow access to the decorated values outside the `createFeature()` function, the output type must be extended by {@linkcode GenericBonusAmountFeature}. + * @example ```ts + * createRepeatable<RepeatableOptions & BonusAmountFeatureOptions>(() => ({ + * bonusAmount: noPersist(otherRepeatable.amount), + * ... + * }), bonusAmountDecorator) as GenericRepeatable & GenericBonusAmountFeature + */ export const bonusAmountDecorator: Decorator<BonusAmountFeatureOptions, BaseBonusAmountFeature, GenericBonusAmountFeature> = { postConstruct(feature) { processComputable(feature, "bonusAmount"); @@ -88,18 +63,25 @@ export const bonusAmountDecorator: Decorator<BonusAmountFeatureOptions, BaseBonu } } } -export const bonusCompletionsDecorator: Decorator<BonusAmountFeatureOptions, BaseBonusCompletionsFeature, GenericBonusCompletionsFeature> = { + +/** + * Allows the addition of "bonus levels" to the decorated feature, with an accompanying "total amount". + * To function properly, the `createFeature()` function must have its generic type extended by {@linkcode BonusCompletionFeatureOptions}. + * To allow access to the decorated values outside the `createFeature()` function, the output type must be extended by {@linkcode GenericBonusCompletionFeature}. + * @example ```ts + * createChallenge<ChallengeOptions & BonusCompletionFeatureOptions>(() => ({ + * bonusCompletions: noPersist(otherChallenge.completions), + * ... + * }), bonusCompletionDecorator) as GenericChallenge & GenericBonusCompletionFeature + */ +export const bonusCompletionsDecorator: Decorator<BonusCompletionsFeatureOptions, BaseBonusCompletionsFeature, GenericBonusCompletionsFeature> = { postConstruct(feature) { - processComputable(feature, "bonusAmount"); + processComputable(feature, "bonusCompletions"); if (feature.totalCompletions === undefined) { feature.totalCompletions = computed(() => Decimal.add( unref(feature.completions ?? 0), - unref(feature.bonusAmount as ProcessedComputable<DecimalSource>) + unref(feature.bonusCompletions as ProcessedComputable<DecimalSource>) )); } } } -// #endregion - -/*----====----*/ - diff --git a/src/features/decorators/common.ts b/src/features/decorators/common.ts new file mode 100644 index 0000000..d308390 --- /dev/null +++ b/src/features/decorators/common.ts @@ -0,0 +1,49 @@ +import { Replace, OptionsObject } from "../feature"; +import { Computable, GetComputableType, processComputable, ProcessedComputable } from "util/computed"; +import { Persistent, State } from "game/persistence"; + +/*----====----*/ + +export type Decorator<FeatureOptions, BaseFeature = {}, GenericFeature = {}, S extends State = State> = { + getPersistentData?(): Record<string, Persistent<S>>; + preConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): void; + postConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): void; + getGatheredProps?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): Partial<OptionsObject<FeatureOptions,BaseFeature,GenericFeature>> +} + +/*----====----*/ + +// #region Effect Decorator +export interface EffectFeatureOptions { + effect: Computable<any>; +} + +export type EffectFeature<T extends EffectFeatureOptions> = Replace< + T, { effect: GetComputableType<T["effect"]>; } +>; + +export type GenericEffectFeature = Replace< + EffectFeature<EffectFeatureOptions>, + { effect: ProcessedComputable<any>; } +>; + +/** + * Allows the usage of an `effect` field in the decorated feature. + * To function properly, the `createFeature()` function must have its generic type extended by {@linkcode EffectFeatureOptions}. + * To allow access to the decorated values outside the `createFeature()` function, the output type must be extended by {@linkcode GenericEffectFeature}. + * @example ```ts + * createRepeatable<RepeatableOptions & EffectFeatureOptions>(() => ({ + * effect() { return Decimal.pow(2, this.amount); }, + * ... + * }), effectDecorator) as GenericUpgrade & GenericEffectFeature; + * ``` + */ +export const effectDecorator: Decorator<EffectFeatureOptions, {}, GenericEffectFeature> = { + postConstruct(feature) { + processComputable(feature, "effect"); + } +} +// #endregion + +/*----====----*/ + diff --git a/src/features/milestones/milestone.tsx b/src/features/milestones/milestone.tsx index 9908089..2796f57 100644 --- a/src/features/milestones/milestone.tsx +++ b/src/features/milestones/milestone.tsx @@ -1,5 +1,5 @@ import Select from "components/fields/Select.vue"; -import { Decorator } from "features/decorators"; +import { Decorator } from "features/decorators/common"; import type { CoercableComponent, GenericComponent, diff --git a/src/features/repeatable.tsx b/src/features/repeatable.tsx index ae3ecf4..dd6d717 100644 --- a/src/features/repeatable.tsx +++ b/src/features/repeatable.tsx @@ -24,7 +24,7 @@ import { createLazyProxy } from "util/proxies"; import { coerceComponent, isCoercableComponent } from "util/vue"; import type { Ref } from "vue"; import { computed, unref } from "vue"; -import { Decorator, GenericBonusAmountFeature } from "./decorators"; +import { Decorator } from "./decorators/common"; /** A symbol used to identify {@link Repeatable} features. */ export const RepeatableType = Symbol("Repeatable"); diff --git a/src/features/trees/tree.ts b/src/features/trees/tree.ts index caaeee3..0784f3e 100644 --- a/src/features/trees/tree.ts +++ b/src/features/trees/tree.ts @@ -1,4 +1,4 @@ -import { Decorator } from "features/decorators"; +import { Decorator } from "features/decorators/common"; import type { CoercableComponent, OptionsFunc, Replace, StyleValue } from "features/feature"; import { Component, GatherProps, getUniqueID, setDefault, Visibility } from "features/feature"; import type { Link } from "features/links/links"; diff --git a/src/features/upgrades/upgrade.ts b/src/features/upgrades/upgrade.ts index 7c90aa5..72914a8 100644 --- a/src/features/upgrades/upgrade.ts +++ b/src/features/upgrades/upgrade.ts @@ -1,5 +1,5 @@ import { isArray } from "@vue/shared"; -import { Decorator } from "features/decorators"; +import { Decorator } from "features/decorators/common"; import type { CoercableComponent, GenericComponent, @@ -15,11 +15,13 @@ import { setDefault, Visibility } from "features/feature"; +import { createResource } from "features/resources/resource"; import UpgradeComponent from "features/upgrades/Upgrade.vue"; import type { GenericLayer } from "game/layers"; import type { Persistent } from "game/persistence"; import { persistent } from "game/persistence"; import { +createCostRequirement, createVisibilityRequirement, payRequirements, Requirements, From 06817dbbfbdb743aef892f7a5b64d055012dd288 Mon Sep 17 00:00:00 2001 From: Seth Posner <smartseth@hotmail.com> Date: Thu, 2 Mar 2023 15:40:45 -0800 Subject: [PATCH 005/134] Swap back to util/bignum --- src/features/decorators/bonusDecorator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/decorators/bonusDecorator.ts b/src/features/decorators/bonusDecorator.ts index d41d2d5..875fe3f 100644 --- a/src/features/decorators/bonusDecorator.ts +++ b/src/features/decorators/bonusDecorator.ts @@ -1,5 +1,5 @@ import { Replace } from "features/feature"; -import Decimal, { DecimalSource } from "lib/break_eternity"; +import Decimal, { DecimalSource } from "util/bignum"; import { Computable, GetComputableType, ProcessedComputable, processComputable } from "util/computed"; import { Ref, computed, unref } from "vue"; import { Decorator } from "./common"; From a0833d202953e0ec203ae6e4c945629fc1efefcd Mon Sep 17 00:00:00 2001 From: Seth Posner <smartseth@hotmail.com> Date: Thu, 2 Mar 2023 15:42:32 -0800 Subject: [PATCH 006/134] Remove region and separator comments --- src/features/decorators/common.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/features/decorators/common.ts b/src/features/decorators/common.ts index d308390..e23b9f0 100644 --- a/src/features/decorators/common.ts +++ b/src/features/decorators/common.ts @@ -2,8 +2,6 @@ import { Replace, OptionsObject } from "../feature"; import { Computable, GetComputableType, processComputable, ProcessedComputable } from "util/computed"; import { Persistent, State } from "game/persistence"; -/*----====----*/ - export type Decorator<FeatureOptions, BaseFeature = {}, GenericFeature = {}, S extends State = State> = { getPersistentData?(): Record<string, Persistent<S>>; preConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): void; @@ -11,9 +9,6 @@ export type Decorator<FeatureOptions, BaseFeature = {}, GenericFeature = {}, S e getGatheredProps?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): Partial<OptionsObject<FeatureOptions,BaseFeature,GenericFeature>> } -/*----====----*/ - -// #region Effect Decorator export interface EffectFeatureOptions { effect: Computable<any>; } @@ -43,7 +38,4 @@ export const effectDecorator: Decorator<EffectFeatureOptions, {}, GenericEffectF processComputable(feature, "effect"); } } -// #endregion - -/*----====----*/ From 2b1250fb3816492ba7d0e7bb018e2e31b3df35af Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Mon, 3 Apr 2023 00:39:19 -0500 Subject: [PATCH 007/134] Fix build issue --- src/features/achievements/Achievement.vue | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/features/achievements/Achievement.vue b/src/features/achievements/Achievement.vue index e0ffe6d..e615244 100644 --- a/src/features/achievements/Achievement.vue +++ b/src/features/achievements/Achievement.vue @@ -27,12 +27,10 @@ import "components/common/features.css"; import MarkNode from "components/MarkNode.vue"; import Node from "components/Node.vue"; -import { CoercableComponent, jsx } from "features/feature"; -import { Visibility, isHidden, isVisible } from "features/feature"; +import { isHidden, isVisible, jsx, Visibility } from "features/feature"; import { displayRequirements, Requirements } from "game/requirements"; -import { coerceComponent, computeOptionalComponent, isCoercableComponent, processedPropType, unwrapRef } from "util/vue"; -import { Component, shallowRef, StyleValue, UnwrapRef, watchEffect } from "vue"; -import { defineComponent, toRefs, unref } from "vue"; +import { coerceComponent, isCoercableComponent, processedPropType, unwrapRef } from "util/vue"; +import { Component, defineComponent, shallowRef, StyleValue, toRefs, unref, UnwrapRef, watchEffect } from "vue"; import { GenericAchievement } from "./achievement"; export default defineComponent({ @@ -76,7 +74,7 @@ export default defineComponent({ comp.value = coerceComponent(currDisplay); return; } - const Requirement = currDisplay.requirement ? coerceComponent(currDisplay.requirement, "h3") : displayRequirements(unwrapRef(requirements) ?? []); + const Requirement = coerceComponent(currDisplay.requirement ? currDisplay.requirement : jsx(() => displayRequirements(unwrapRef(requirements) ?? [])), "h3"); const EffectDisplay = coerceComponent(currDisplay.effectDisplay || "", "b"); const OptionsDisplay = coerceComponent(currDisplay.optionsDisplay || "", "span"); comp.value = coerceComponent( From 61bc53f9545db92aebb3f29021b5c28c3c61af43 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Mon, 3 Apr 2023 08:15:16 -0500 Subject: [PATCH 008/134] Large achievement styling changes --- src/features/achievements/Achievement.vue | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/features/achievements/Achievement.vue b/src/features/achievements/Achievement.vue index e615244..5bc1103 100644 --- a/src/features/achievements/Achievement.vue +++ b/src/features/achievements/Achievement.vue @@ -12,7 +12,7 @@ feature: true, achievement: true, locked: !unref(earned), - bought: unref(earned), + done: unref(earned), small: unref(small), ...unref(classes) }" @@ -60,7 +60,7 @@ export default defineComponent({ MarkNode }, setup(props) { - const { display, requirements } = toRefs(props); + const { display, requirements, earned } = toRefs(props); const comp = shallowRef<Component | string>(""); @@ -76,7 +76,9 @@ export default defineComponent({ } const Requirement = coerceComponent(currDisplay.requirement ? currDisplay.requirement : jsx(() => displayRequirements(unwrapRef(requirements) ?? [])), "h3"); const EffectDisplay = coerceComponent(currDisplay.effectDisplay || "", "b"); - const OptionsDisplay = coerceComponent(currDisplay.optionsDisplay || "", "span"); + const OptionsDisplay = unwrapRef(earned) ? + coerceComponent(currDisplay.optionsDisplay || "", "span") : + ""; comp.value = coerceComponent( jsx(() => ( <span> @@ -117,6 +119,7 @@ export default defineComponent({ } .achievement:not(.small) { + height: unset; width: calc(100% - 10px); min-width: 120px; padding-left: 5px; From 44a5b336d665401fd45f6f1aca35a1bab2adfb2c Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Mon, 3 Apr 2023 08:19:58 -0500 Subject: [PATCH 009/134] Make challenges display requirements --- src/features/challenges/Challenge.vue | 16 ++++++++-------- src/features/challenges/challenge.tsx | 8 +++++--- src/features/repeatable.tsx | 2 +- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/features/challenges/Challenge.vue b/src/features/challenges/Challenge.vue index f64f203..194173c 100644 --- a/src/features/challenges/Challenge.vue +++ b/src/features/challenges/Challenge.vue @@ -38,6 +38,7 @@ import type { GenericChallenge } from "features/challenges/challenge"; import type { StyleValue } from "features/feature"; import { isHidden, isVisible, jsx, Visibility } from "features/feature"; import { getHighNotifyStyle, getNotifyStyle } from "game/notifications"; +import { displayRequirements, Requirements } from "game/requirements"; import { coerceComponent, isCoercableComponent, processedPropType, unwrapRef } from "util/vue"; import type { Component, PropType, UnwrapRef } from "vue"; import { computed, defineComponent, shallowRef, toRefs, unref, watchEffect } from "vue"; @@ -61,6 +62,7 @@ export default defineComponent({ Object, Function ), + requirements: processedPropType<Requirements>(Object, Array), visibility: { type: processedPropType<Visibility | boolean>(Number, Boolean), required: true @@ -90,7 +92,7 @@ export default defineComponent({ Node }, setup(props) { - const { active, maxed, canComplete, display } = toRefs(props); + const { active, maxed, canComplete, display, requirements } = toRefs(props); const buttonText = computed(() => { if (active.value) { @@ -128,7 +130,7 @@ export default defineComponent({ } const Title = coerceComponent(currDisplay.title || "", "h3"); const Description = coerceComponent(currDisplay.description, "div"); - const Goal = coerceComponent(currDisplay.goal || ""); + const Goal = coerceComponent(currDisplay.goal != null ? currDisplay.goal : jsx(() => displayRequirements(unwrapRef(requirements) ?? [])), "h3"); const Reward = coerceComponent(currDisplay.reward || ""); const EffectDisplay = coerceComponent(currDisplay.effectDisplay || ""); comp.value = coerceComponent( @@ -140,12 +142,10 @@ export default defineComponent({ </div> ) : null} <Description /> - {currDisplay.goal != null ? ( - <div> - <br /> - Goal: <Goal /> - </div> - ) : null} + <div> + <br /> + Goal: <Goal /> + </div> {currDisplay.reward != null ? ( <div> <br /> diff --git a/src/features/challenges/challenge.tsx b/src/features/challenges/challenge.tsx index 3a1ba48..c1685db 100644 --- a/src/features/challenges/challenge.tsx +++ b/src/features/challenges/challenge.tsx @@ -69,7 +69,7 @@ export interface ChallengeOptions { title?: CoercableComponent; /** The main text that appears in the display. */ description: CoercableComponent; - /** A description of the current goal for this challenge. */ + /** A description of the current goal for this challenge. If unspecified then the requirements will be displayed automatically based on {@link requirements}. */ goal?: CoercableComponent; /** A description of what will change upon completing this challenge. */ reward?: CoercableComponent; @@ -271,7 +271,8 @@ export function createChallenge<T extends ChallengeOptions>( canStart, mark, id, - toggle + toggle, + requirements } = this; return { active, @@ -285,7 +286,8 @@ export function createChallenge<T extends ChallengeOptions>( canStart, mark, id, - toggle + toggle, + requirements }; }; diff --git a/src/features/repeatable.tsx b/src/features/repeatable.tsx index ec338eb..df5d0be 100644 --- a/src/features/repeatable.tsx +++ b/src/features/repeatable.tsx @@ -42,7 +42,7 @@ export type RepeatableDisplay = title?: CoercableComponent; /** The main text that appears in the display. */ description?: CoercableComponent; - /** A description of the current effect of this repeatable, bsed off its amount. */ + /** A description of the current effect of this repeatable, based off its amount. */ effectDisplay?: CoercableComponent; /** Whether or not to show the current amount of this repeatable at the bottom of the display. */ showAmount?: boolean; From 3ad0d6459005ec634f7ede00b588c6a5010597fc Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Tue, 4 Apr 2023 00:02:23 -0500 Subject: [PATCH 010/134] Documented the rest of the features Not the vue components though --- src/features/achievements/achievement.tsx | 6 +- src/features/action.tsx | 25 +++++++ src/features/bars/bar.ts | 30 ++++++++ src/features/boards/board.ts | 89 +++++++++++++++++++++++ src/features/challenges/challenge.tsx | 2 +- src/features/clickables/clickable.ts | 34 +++++++++ src/features/grids/grid.ts | 62 ++++++++++++++++ src/features/hotkey.tsx | 19 +++++ src/features/infoboxes/infobox.ts | 26 +++++++ src/features/links/links.ts | 16 ++++ src/features/particles/particles.tsx | 30 ++++++++ src/features/repeatable.tsx | 2 +- src/features/reset.ts | 23 ++++++ src/features/resources/resource.ts | 16 ++++ src/features/tabs/tab.ts | 23 ++++++ src/features/tabs/tabFamily.ts | 48 ++++++++++++ src/features/tooltips/tooltip.ts | 20 +++++ src/features/trees/tree.ts | 62 ++++++++++++++++ src/features/upgrades/upgrade.ts | 38 +++++++++- 19 files changed, 565 insertions(+), 6 deletions(-) diff --git a/src/features/achievements/achievement.tsx b/src/features/achievements/achievement.tsx index cafaafa..3f2a7f3 100644 --- a/src/features/achievements/achievement.tsx +++ b/src/features/achievements/achievement.tsx @@ -95,7 +95,7 @@ export interface AchievementOptions { * The properties that are added onto a processed {@link AchievementOptions} to create an {@link Achievement}. */ export interface BaseAchievement { - /** An auto-generated ID for identifying achievements that appear in the DOM. Will not persist between refreshes or updates. */ + /** An auto-generated ID for identifying features that appear in the DOM. Will not persist between refreshes or updates. */ id: string; /** Whether or not this achievement has been earned. */ earned: Persistent<boolean>; @@ -109,7 +109,7 @@ export interface BaseAchievement { [GatherProps]: () => Record<string, unknown>; } -/** An object that represents a feature with that is passively earned upon meeting certain requirements. */ +/** An object that represents a feature with requirements that is passively earned upon meeting certain requirements. */ export type Achievement<T extends AchievementOptions> = Replace< T & BaseAchievement, { @@ -133,7 +133,7 @@ export type GenericAchievement = Replace< >; /** - * Lazily creates a achievement with the given options. + * Lazily creates an achievement with the given options. * @param optionsFunc Achievement options. */ export function createAchievement<T extends AchievementOptions>( diff --git a/src/features/action.tsx b/src/features/action.tsx index 5d7e555..afd8021 100644 --- a/src/features/action.tsx +++ b/src/features/action.tsx @@ -32,26 +32,46 @@ import { computed, Ref, ref, unref } from "vue"; import { BarOptions, createBar, GenericBar } from "./bars/bar"; import { ClickableOptions } from "./clickables/clickable"; +/** A symbol used to identify {@link Action} features. */ export const ActionType = Symbol("Action"); +/** + * An object that configures a {@link Action}. + */ export interface ActionOptions extends Omit<ClickableOptions, "onClick" | "onHold"> { + /** The cooldown during which the action cannot be performed again, in seconds. */ duration: Computable<DecimalSource>; + /** Whether or not the action should perform automatically when the cooldown is finished. */ autoStart?: Computable<boolean>; + /** A function that is called when the action is clicked. */ onClick: (amount: DecimalSource) => void; + /** A pass-through to the {@link Bar} used to display the cooldown progress for the action. */ barOptions?: Partial<BarOptions>; } +/** + * The properties that are added onto a processed {@link ActionOptions} to create an {@link Action}. + */ export interface BaseAction { + /** An auto-generated ID for identifying features that appear in the DOM. Will not persist between refreshes or updates. */ id: string; + /** A symbol that helps identify features of the same type. */ type: typeof ActionType; + /** Whether or not the player is holding down the action. Actions will be considered clicked as soon as the cooldown completes when being held down. */ isHolding: Ref<boolean>; + /** The current amount of progress through the cooldown. */ progress: Ref<DecimalSource>; + /** The bar used to display the current cooldown progress. */ progressBar: GenericBar; + /** Update the cooldown the specified number of seconds */ update: (diff: number) => void; + /** The Vue component used to render this feature. */ [Component]: GenericComponent; + /** A function to gather the props the vue component requires for this feature. */ [GatherProps]: () => Record<string, unknown>; } +/** An object that represens a feature that can be clicked upon, and then have a cooldown before they can be clicked again. */ export type Action<T extends ActionOptions> = Replace< T & BaseAction, { @@ -67,6 +87,7 @@ export type Action<T extends ActionOptions> = Replace< } >; +/** A type that matches any valid {@link Action} object. */ export type GenericAction = Replace< Action<ActionOptions>, { @@ -76,6 +97,10 @@ export type GenericAction = Replace< } >; +/** + * Lazily creates an action with the given options. + * @param optionsFunc Action options. + */ export function createAction<T extends ActionOptions>( optionsFunc?: OptionsFunc<T, BaseAction, GenericAction> ): Action<T> { diff --git a/src/features/bars/bar.ts b/src/features/bars/bar.ts index bab5887..0a6433c 100644 --- a/src/features/bars/bar.ts +++ b/src/features/bars/bar.ts @@ -19,31 +19,56 @@ import { processComputable } from "util/computed"; import { createLazyProxy } from "util/proxies"; import { unref } from "vue"; +/** A symbol used to identify {@link Bar} features. */ export const BarType = Symbol("Bar"); +/** + * An object that configures a {@link Bar}. + */ export interface BarOptions { + /** Whether this bar should be visible. */ visibility?: Computable<Visibility | boolean>; + /** The width of the bar. */ width: Computable<number>; + /** The height of the bar. */ height: Computable<number>; + /** The direction in which the bar progresses. */ direction: Computable<Direction>; + /** CSS to apply to this feature. */ style?: Computable<StyleValue>; + /** Dictionary of CSS classes to apply to this feature. */ classes?: Computable<Record<string, boolean>>; + /** CSS to apply to the bar's border. */ borderStyle?: Computable<StyleValue>; + /** CSS to apply to the bar's base. */ baseStyle?: Computable<StyleValue>; + /** CSS to apply to the bar's text. */ textStyle?: Computable<StyleValue>; + /** CSS to apply to the bar's fill. */ fillStyle?: Computable<StyleValue>; + /** The progress value of the bar, from 0 to 1. */ progress: Computable<DecimalSource>; + /** The display to use for this bar. */ display?: Computable<CoercableComponent>; + /** Shows a marker on the corner of the feature. */ mark?: Computable<boolean | string>; } +/** + * The properties that are added onto a processed {@link BarOptions} to create a {@link Bar}. + */ export interface BaseBar { + /** An auto-generated ID for identifying features that appear in the DOM. Will not persist between refreshes or updates. */ id: string; + /** A symbol that helps identify features of the same type. */ type: typeof BarType; + /** The Vue component used to render this feature. */ [Component]: GenericComponent; + /** A function to gather the props the vue component requires for this feature. */ [GatherProps]: () => Record<string, unknown>; } +/** An object that represents a feature that displays some sort of progress or completion or resource with a cap. */ export type Bar<T extends BarOptions> = Replace< T & BaseBar, { @@ -63,6 +88,7 @@ export type Bar<T extends BarOptions> = Replace< } >; +/** A type that matches any valid {@link Bar} object. */ export type GenericBar = Replace< Bar<BarOptions>, { @@ -70,6 +96,10 @@ export type GenericBar = Replace< } >; +/** + * Lazily creates a bar with the given options. + * @param optionsFunc Bar options. + */ export function createBar<T extends BarOptions>( optionsFunc: OptionsFunc<T, BaseBar, GenericBar> ): Bar<T> { diff --git a/src/features/boards/board.ts b/src/features/boards/board.ts index 528bc26..b8f66b4 100644 --- a/src/features/boards/board.ts +++ b/src/features/boards/board.ts @@ -27,20 +27,27 @@ import type { Link } from "../links/links"; globalBus.on("setupVue", app => panZoom.install(app)); +/** A symbol used to identify {@link Board} features. */ export const BoardType = Symbol("Board"); +/** + * A type representing a computable value for a node on the board. Used for node types to return different values based on the given node and the state of the board. + */ export type NodeComputable<T> = Computable<T> | ((node: BoardNode) => T); +/** Ways to display progress of an action with a duration. */ export enum ProgressDisplay { Outline = "Outline", Fill = "Fill" } +/** Node shapes. */ export enum Shape { Circle = "Circle", Diamond = "Triangle" } +/** An object representing a node on the board. */ export interface BoardNode { id: number; position: { @@ -52,48 +59,76 @@ export interface BoardNode { pinned?: boolean; } +/** An object representing a link between two nodes on the board. */ export interface BoardNodeLink extends Omit<Link, "startNode" | "endNode"> { startNode: BoardNode; endNode: BoardNode; pulsing?: boolean; } +/** An object representing a label for a node. */ export interface NodeLabel { text: string; color?: string; pulsing?: boolean; } +/** The persistent data for a board. */ export type BoardData = { nodes: BoardNode[]; selectedNode: number | null; selectedAction: string | null; }; +/** + * An object that configures a {@link NodeType}. + */ export interface NodeTypeOptions { + /** The title to display for the node. */ title: NodeComputable<string>; + /** An optional label for the node. */ label?: NodeComputable<NodeLabel | null>; + /** The size of the node - diameter for circles, width and height for squares. */ size: NodeComputable<number>; + /** Whether the node is draggable or not. */ draggable?: NodeComputable<boolean>; + /** The shape of the node. */ shape: NodeComputable<Shape>; + /** Whether the node can accept another node being dropped upon it. */ canAccept?: boolean | Ref<boolean> | ((node: BoardNode, otherNode: BoardNode) => boolean); + /** The progress value of the node. */ progress?: NodeComputable<number>; + /** How the progress should be displayed on the node. */ progressDisplay?: NodeComputable<ProgressDisplay>; + /** The color of the progress indicator. */ progressColor?: NodeComputable<string>; + /** The fill color of the node. */ fillColor?: NodeComputable<string>; + /** The outline color of the node. */ outlineColor?: NodeComputable<string>; + /** The color of the title text. */ titleColor?: NodeComputable<string>; + /** The list of action options for the node. */ actions?: BoardNodeActionOptions[]; + /** The distance between the center of the node and its actions. */ actionDistance?: NodeComputable<number>; + /** A function that is called when the node is clicked. */ onClick?: (node: BoardNode) => void; + /** A function that is called when a node is dropped onto this node. */ onDrop?: (node: BoardNode, otherNode: BoardNode) => void; + /** A function that is called for each node of this type every tick. */ update?: (node: BoardNode, diff: number) => void; } +/** + * The properties that are added onto a processed {@link NodeTypeOptions} to create a {@link NodeType}. + */ export interface BaseNodeType { + /** The nodes currently on the board of this type. */ nodes: Ref<BoardNode[]>; } +/** An object that represents a type of node that can appear on a board. It will handle getting properties and callbacks for every node of that type. */ export type NodeType<T extends NodeTypeOptions> = Replace< T & BaseNodeType, { @@ -114,6 +149,7 @@ export type NodeType<T extends NodeTypeOptions> = Replace< } >; +/** A type that matches any valid {@link NodeType} object. */ export type GenericNodeType = Replace< NodeType<NodeTypeOptions>, { @@ -127,20 +163,34 @@ export type GenericNodeType = Replace< } >; +/** + * An object that configures a {@link BoardNodeAction}. + */ export interface BoardNodeActionOptions { + /** A unique identifier for the action. */ id: string; + /** Whether this action should be visible. */ visibility?: NodeComputable<Visibility | boolean>; + /** The icon to display for the action. */ icon: NodeComputable<string>; + /** The fill color of the action. */ fillColor?: NodeComputable<string>; + /** The tooltip text to display for the action. */ tooltip: NodeComputable<string>; + /** An array of board node links associated with the action. They appear when the action is focused. */ links?: NodeComputable<BoardNodeLink[]>; + /** A function that is called when the action is clicked. */ onClick: (node: BoardNode) => boolean | undefined; } +/** + * The properties that are added onto a processed {@link BoardNodeActionOptions} to create an {@link BoardNodeAction}. + */ export interface BaseBoardNodeAction { links?: Ref<BoardNodeLink[]>; } +/** An object that represents an action that can be taken upon a node. */ export type BoardNodeAction<T extends BoardNodeActionOptions> = Replace< T & BaseBoardNodeAction, { @@ -152,6 +202,7 @@ export type BoardNodeAction<T extends BoardNodeActionOptions> = Replace< } >; +/** A type that matches any valid {@link BoardNodeAction} object. */ export type GenericBoardNodeAction = Replace< BoardNodeAction<BoardNodeActionOptions>, { @@ -159,29 +210,53 @@ export type GenericBoardNodeAction = Replace< } >; +/** + * An object that configures a {@link Board}. + */ export interface BoardOptions { + /** Whether this board should be visible. */ visibility?: Computable<Visibility | boolean>; + /** The height of the board. Defaults to 100% */ height?: Computable<string>; + /** The width of the board. Defaults to 100% */ width?: Computable<string>; + /** Dictionary of CSS classes to apply to this feature. */ classes?: Computable<Record<string, boolean>>; + /** CSS to apply to this feature. */ style?: Computable<StyleValue>; + /** A function that returns an array of initial board nodes, without IDs. */ startNodes: () => Omit<BoardNode, "id">[]; + /** A dictionary of node types that can appear on the board. */ types: Record<string, NodeTypeOptions>; + /** The persistent state of the board. */ state?: Computable<BoardData>; + /** An array of board node links to display. */ links?: Computable<BoardNodeLink[] | null>; } +/** + * The properties that are added onto a processed {@link BoardOptions} to create a {@link Board}. + */ export interface BaseBoard { + /** An auto-generated ID for identifying features that appear in the DOM. Will not persist between refreshes or updates. */ id: string; + /** All the nodes currently on the board. */ nodes: Ref<BoardNode[]>; + /** The currently selected node, if any. */ selectedNode: Ref<BoardNode | null>; + /** The currently selected action, if any. */ selectedAction: Ref<GenericBoardNodeAction | null>; + /** The current mouse position, if over the board. */ mousePosition: Ref<{ x: number; y: number } | null>; + /** A symbol that helps identify features of the same type. */ type: typeof BoardType; + /** The Vue component used to render this feature. */ [Component]: GenericComponent; + /** A function to gather the props the vue component requires for this feature. */ [GatherProps]: () => Record<string, unknown>; } +/** An object that represents a feature that is a zoomable, pannable board with various nodes upon it. */ export type Board<T extends BoardOptions> = Replace< T & BaseBoard, { @@ -196,6 +271,7 @@ export type Board<T extends BoardOptions> = Replace< } >; +/** A type that matches any valid {@link Board} object. */ export type GenericBoard = Replace< Board<BoardOptions>, { @@ -205,6 +281,10 @@ export type GenericBoard = Replace< } >; +/** + * Lazily creates a board with the given options. + * @param optionsFunc Board options. + */ export function createBoard<T extends BoardOptions>( optionsFunc: OptionsFunc<T, BaseBoard, GenericBoard> ): Board<T> { @@ -368,10 +448,19 @@ export function createBoard<T extends BoardOptions>( }); } +/** + * Gets the value of a property for a specified node. + * @param property The property to find the value of + * @param node The node to get the property of + */ export function getNodeProperty<T>(property: NodeComputable<T>, node: BoardNode): T { return isFunction<T, [BoardNode], Computable<T>>(property) ? property(node) : unref(property); } +/** + * Utility to get an ID for a node that is guaranteed unique. + * @param board The board feature to generate an ID for + */ export function getUniqueNodeID(board: GenericBoard): number { let id = 0; board.nodes.value.forEach(node => { diff --git a/src/features/challenges/challenge.tsx b/src/features/challenges/challenge.tsx index c1685db..5b6231d 100644 --- a/src/features/challenges/challenge.tsx +++ b/src/features/challenges/challenge.tsx @@ -89,7 +89,7 @@ export interface ChallengeOptions { * The properties that are added onto a processed {@link ChallengeOptions} to create a {@link Challenge}. */ export interface BaseChallenge { - /** An auto-generated ID for identifying challenges that appear in the DOM. Will not persist between refreshes or updates. */ + /** An auto-generated ID for identifying features that appear in the DOM. Will not persist between refreshes or updates. */ id: string; /** The current amount of times this challenge can be completed. */ canComplete: Ref<DecimalSource>; diff --git a/src/features/clickables/clickable.ts b/src/features/clickables/clickable.ts index b44854b..d369603 100644 --- a/src/features/clickables/clickable.ts +++ b/src/features/clickables/clickable.ts @@ -19,33 +19,56 @@ import { processComputable } from "util/computed"; import { createLazyProxy } from "util/proxies"; import { computed, unref } from "vue"; +/** A symbol used to identify {@link Clickable} features. */ export const ClickableType = Symbol("Clickable"); +/** + * An object that configures a {@link Clickable}. + */ export interface ClickableOptions { + /** Whether this clickable should be visible. */ visibility?: Computable<Visibility | boolean>; + /** Whether or not the clickable may be clicked. */ canClick?: Computable<boolean>; + /** Dictionary of CSS classes to apply to this feature. */ classes?: Computable<Record<string, boolean>>; + /** CSS to apply to this feature. */ style?: Computable<StyleValue>; + /** Shows a marker on the corner of the feature. */ mark?: Computable<boolean | string>; + /** The display to use for this clickable. */ display?: Computable< | CoercableComponent | { + /** A header to appear at the top of the display. */ title?: CoercableComponent; + /** The main text that appears in the display. */ description: CoercableComponent; } >; + /** Toggles a smaller design for the feature. */ small?: boolean; + /** A function that is called when the clickable is clicked. */ onClick?: (e?: MouseEvent | TouchEvent) => void; + /** A function that is called when the clickable is held down. */ onHold?: VoidFunction; } +/** + * The properties that are added onto a processed {@link ClickableOptions} to create an {@link Clickable}. + */ export interface BaseClickable { + /** An auto-generated ID for identifying features that appear in the DOM. Will not persist between refreshes or updates. */ id: string; + /** A symbol that helps identify features of the same type. */ type: typeof ClickableType; + /** The Vue component used to render this feature. */ [Component]: GenericComponent; + /** A function to gather the props the vue component requires for this feature. */ [GatherProps]: () => Record<string, unknown>; } +/** An object that represents a feature that can be clicked or held down. */ export type Clickable<T extends ClickableOptions> = Replace< T & BaseClickable, { @@ -58,6 +81,7 @@ export type Clickable<T extends ClickableOptions> = Replace< } >; +/** A type that matches any valid {@link Clickable} object. */ export type GenericClickable = Replace< Clickable<ClickableOptions>, { @@ -66,6 +90,10 @@ export type GenericClickable = Replace< } >; +/** + * Lazily creates a clickable with the given options. + * @param optionsFunc Clickable options. + */ export function createClickable<T extends ClickableOptions>( optionsFunc?: OptionsFunc<T, BaseClickable, GenericClickable> ): Clickable<T> { @@ -132,6 +160,12 @@ export function createClickable<T extends ClickableOptions>( }); } +/** + * Utility to auto click a clickable whenever it can be. + * @param layer The layer the clickable is apart of + * @param clickable The clicker to click automatically + * @param autoActive Whether or not the clickable should currently be auto-clicking + */ export function setupAutoClick( layer: BaseLayer, clickable: GenericClickable, diff --git a/src/features/grids/grid.ts b/src/features/grids/grid.ts index b7899ae..57eb399 100644 --- a/src/features/grids/grid.ts +++ b/src/features/grids/grid.ts @@ -21,14 +21,22 @@ import { createLazyProxy } from "util/proxies"; import type { Ref } from "vue"; import { computed, unref } from "vue"; +/** A symbol used to identify {@link Grid} features. */ export const GridType = Symbol("Grid"); +/** A type representing a computable value for a cell in the grid. */ export type CellComputable<T> = Computable<T> | ((id: string | number, state: State) => T); +/** Create proxy to more easily get the properties of cells on a grid. */ function createGridProxy(grid: GenericGrid): Record<string | number, GridCell> { return new Proxy({}, getGridHandler(grid)) as Record<string | number, GridCell>; } +/** + * Returns traps for a proxy that will give cell proxies when accessing any numerical key. + * @param grid The grid to get the cells from. + * @see {@link createGridProxy} + */ // eslint-disable-next-line @typescript-eslint/no-explicit-any function getGridHandler(grid: GenericGrid): ProxyHandler<Record<string | number, GridCell>> { const keys = computed(() => { @@ -86,6 +94,12 @@ function getGridHandler(grid: GenericGrid): ProxyHandler<Record<string | number, }; } +/** + * Returns traps for a proxy that will get the properties for the specified cell + * @param id The grid cell ID to get properties from. + * @see {@link getGridHandler} + * @see {@link createGridProxy} + */ function getCellHandler(id: string): ProxyHandler<GenericGrid> { const keys = [ "id", @@ -175,47 +189,90 @@ function getCellHandler(id: string): ProxyHandler<GenericGrid> { }; } +/** + * Represents a cell within a grid. These properties will typically be accessed via a cell proxy that calls functions on the grid to get the properties for a specific cell. + * @see {@link createGridProxy} + */ export interface GridCell { + /** A unique identifier for the grid cell. */ id: string; + /** Whether this cell should be visible. */ visibility: Visibility | boolean; + /** Whether this cell can be clicked. */ canClick: boolean; + /** The initial persistent state of this cell. */ startState: State; + /** The persistent state of this cell. */ state: State; + /** CSS to apply to this feature. */ style?: StyleValue; + /** Dictionary of CSS classes to apply to this feature. */ classes?: Record<string, boolean>; + /** A header to appear at the top of the display. */ title?: CoercableComponent; + /** The main text that appears in the display. */ display: CoercableComponent; + /** A function that is called when the cell is clicked. */ onClick?: (e?: MouseEvent | TouchEvent) => void; + /** A function that is called when the cell is held down. */ onHold?: VoidFunction; } +/** + * An object that configures a {@link Grid}. + */ export interface GridOptions { + /** Whether this grid should be visible. */ visibility?: Computable<Visibility | boolean>; + /** The number of rows in the grid. */ rows: Computable<number>; + /** The number of columns in the grid. */ cols: Computable<number>; + /** A computable to determine the visibility of a cell. */ getVisibility?: CellComputable<Visibility | boolean>; + /** A computable to determine if a cell can be clicked. */ getCanClick?: CellComputable<boolean>; + /** A computable to get the initial persistent state of a cell. */ getStartState: Computable<State> | ((id: string | number) => State); + /** A computable to get the CSS styles for a cell. */ getStyle?: CellComputable<StyleValue>; + /** A computable to get the CSS classes for a cell. */ getClasses?: CellComputable<Record<string, boolean>>; + /** A computable to get the title component for a cell. */ getTitle?: CellComputable<CoercableComponent>; + /** A computable to get the display component for a cell. */ getDisplay: CellComputable<CoercableComponent>; + /** A function that is called when a cell is clicked. */ onClick?: (id: string | number, state: State, e?: MouseEvent | TouchEvent) => void; + /** A function that is called when a cell is held down. */ onHold?: (id: string | number, state: State) => void; } +/** + * The properties that are added onto a processed {@link BoardOptions} to create a {@link Board}. + */ export interface BaseGrid { + /** An auto-generated ID for identifying features that appear in the DOM. Will not persist between refreshes or updates. */ id: string; + /** Get the auto-generated ID for identifying a specific cell of this grid that appears in the DOM. Will not persist between refreshes or updates. */ getID: (id: string | number, state: State) => string; + /** Get the persistent state of the given cell. */ getState: (id: string | number) => State; + /** Set the persistent state of the given cell. */ setState: (id: string | number, state: State) => void; + /** A dictionary of cells within this grid. */ cells: Record<string | number, GridCell>; + /** The persistent state of this grid, which is a dictionary of cell states. */ cellState: Persistent<Record<string | number, State>>; + /** A symbol that helps identify features of the same type. */ type: typeof GridType; + /** The Vue component used to render this feature. */ [Component]: GenericComponent; + /** A function to gather the props the vue component requires for this feature. */ [GatherProps]: () => Record<string, unknown>; } +/** An object that represents a feature that is a grid of cells that all behave according to the same rules. */ export type Grid<T extends GridOptions> = Replace< T & BaseGrid, { @@ -232,6 +289,7 @@ export type Grid<T extends GridOptions> = Replace< } >; +/** A type that matches any valid {@link Grid} object. */ export type GenericGrid = Replace< Grid<GridOptions>, { @@ -241,6 +299,10 @@ export type GenericGrid = Replace< } >; +/** + * Lazily creates a grid with the given options. + * @param optionsFunc Grid options. + */ export function createGrid<T extends GridOptions>( optionsFunc: OptionsFunc<T, BaseGrid, GenericGrid> ): Grid<T> { diff --git a/src/features/hotkey.tsx b/src/features/hotkey.tsx index 595344d..dcfdade 100644 --- a/src/features/hotkey.tsx +++ b/src/features/hotkey.tsx @@ -15,20 +15,34 @@ import { createLazyProxy } from "util/proxies"; import { shallowReactive, unref } from "vue"; import Hotkey from "components/Hotkey.vue"; +/** A dictionary of all hotkeys. */ export const hotkeys: Record<string, GenericHotkey | undefined> = shallowReactive({}); +/** A symbol used to identify {@link Hotkey} features. */ export const HotkeyType = Symbol("Hotkey"); +/** + * An object that configures a {@link Hotkey}. + */ export interface HotkeyOptions { + /** Whether or not this hotkey is currently enabled. */ enabled?: Computable<boolean>; + /** The key tied to this hotkey */ key: string; + /** The description of this hotkey, to display in the settings. */ description: Computable<string>; + /** What to do upon pressing the key. */ onPress: VoidFunction; } +/** + * The properties that are added onto a processed {@link HotkeyOptions} to create an {@link Hotkey}. + */ export interface BaseHotkey { + /** A symbol that helps identify features of the same type. */ type: typeof HotkeyType; } +/** An object that represents a hotkey shortcut that performs an action upon a key sequence being pressed. */ export type Hotkey<T extends HotkeyOptions> = Replace< T & BaseHotkey, { @@ -37,6 +51,7 @@ export type Hotkey<T extends HotkeyOptions> = Replace< } >; +/** A type that matches any valid {@link Hotkey} object. */ export type GenericHotkey = Replace< Hotkey<HotkeyOptions>, { @@ -46,6 +61,10 @@ export type GenericHotkey = Replace< const uppercaseNumbers = [")", "!", "@", "#", "$", "%", "^", "&", "*", "("]; +/** + * Lazily creates a hotkey with the given options. + * @param optionsFunc Hotkey options. + */ export function createHotkey<T extends HotkeyOptions>( optionsFunc: OptionsFunc<T, BaseHotkey, GenericHotkey> ): Hotkey<T> { diff --git a/src/features/infoboxes/infobox.ts b/src/features/infoboxes/infobox.ts index ccd2bd3..f5c7a2f 100644 --- a/src/features/infoboxes/infobox.ts +++ b/src/features/infoboxes/infobox.ts @@ -19,27 +19,48 @@ import { processComputable } from "util/computed"; import { createLazyProxy } from "util/proxies"; import { unref } from "vue"; +/** A symbol used to identify {@link Infobox} features. */ export const InfoboxType = Symbol("Infobox"); +/** + * An object that configures an {@link Infobox}. + */ export interface InfoboxOptions { + /** Whether this clickable should be visible. */ visibility?: Computable<Visibility | boolean>; + /** The background color of the Infobox. */ color?: Computable<string>; + /** CSS to apply to this feature. */ style?: Computable<StyleValue>; + /** CSS to apply to the title of the infobox. */ titleStyle?: Computable<StyleValue>; + /** CSS to apply to the body of the infobox. */ bodyStyle?: Computable<StyleValue>; + /** Dictionary of CSS classes to apply to this feature. */ classes?: Computable<Record<string, boolean>>; + /** A header to appear at the top of the display. */ title: Computable<CoercableComponent>; + /** The main text that appears in the display. */ display: Computable<CoercableComponent>; } +/** + * The properties that are added onto a processed {@link InfoboxOptions} to create an {@link Infobox}. + */ export interface BaseInfobox { + /** An auto-generated ID for identifying features that appear in the DOM. Will not persist between refreshes or updates. */ id: string; + /** Whether or not this infobox is collapsed. */ collapsed: Persistent<boolean>; + /** A symbol that helps identify features of the same type. */ type: typeof InfoboxType; + /** The Vue component used to render this feature. */ [Component]: GenericComponent; + /** A function to gather the props the vue component requires for this feature. */ [GatherProps]: () => Record<string, unknown>; } +/** An object that represents a feature that displays information in a collapsible way. */ export type Infobox<T extends InfoboxOptions> = Replace< T & BaseInfobox, { @@ -54,6 +75,7 @@ export type Infobox<T extends InfoboxOptions> = Replace< } >; +/** A type that matches any valid {@link Infobox} object. */ export type GenericInfobox = Replace< Infobox<InfoboxOptions>, { @@ -61,6 +83,10 @@ export type GenericInfobox = Replace< } >; +/** + * Lazily creates an infobox with the given options. + * @param optionsFunc Infobox options. + */ export function createInfobox<T extends InfoboxOptions>( optionsFunc: OptionsFunc<T, BaseInfobox, GenericInfobox> ): Infobox<T> { diff --git a/src/features/links/links.ts b/src/features/links/links.ts index 77ea0ba..5b28c46 100644 --- a/src/features/links/links.ts +++ b/src/features/links/links.ts @@ -7,8 +7,10 @@ import { createLazyProxy } from "util/proxies"; import type { SVGAttributes } from "vue"; import LinksComponent from "./Links.vue"; +/** A symbol used to identify {@link Links} features. */ export const LinksType = Symbol("Links"); +/** Represents a link between two nodes. It will be displayed as an SVG line, and can take any appropriate properties for an SVG line element. */ export interface Link extends SVGAttributes { startNode: { id: string }; endNode: { id: string }; @@ -16,16 +18,25 @@ export interface Link extends SVGAttributes { offsetEnd?: Position; } +/** An object that configures a {@link Links}. */ export interface LinksOptions { + /** The list of links to display. */ links: Computable<Link[]>; } +/** + * The properties that are added onto a processed {@link LinksOptions} to create an {@link Links}. + */ export interface BaseLinks { + /** A symbol that helps identify features of the same type. */ type: typeof LinksType; + /** The Vue component used to render this feature. */ [Component]: GenericComponent; + /** A function to gather the props the vue component requires for this feature. */ [GatherProps]: () => Record<string, unknown>; } +/** An object that represents a list of links between nodes, which are the elements in the DOM for any renderable feature. */ export type Links<T extends LinksOptions> = Replace< T & BaseLinks, { @@ -33,6 +44,7 @@ export type Links<T extends LinksOptions> = Replace< } >; +/** A type that matches any valid {@link Links} object. */ export type GenericLinks = Replace< Links<LinksOptions>, { @@ -40,6 +52,10 @@ export type GenericLinks = Replace< } >; +/** + * Lazily creates links with the given options. + * @param optionsFunc Links options. + */ export function createLinks<T extends LinksOptions>( optionsFunc: OptionsFunc<T, BaseLinks, GenericLinks> ): Links<T> { diff --git a/src/features/particles/particles.tsx b/src/features/particles/particles.tsx index 0b5b23f..549ccee 100644 --- a/src/features/particles/particles.tsx +++ b/src/features/particles/particles.tsx @@ -8,24 +8,49 @@ import type { Computable, GetComputableType } from "util/computed"; import { createLazyProxy } from "util/proxies"; import { Ref, shallowRef, unref } from "vue"; +/** A symbol used to identify {@link Particles} features. */ export const ParticlesType = Symbol("Particles"); +/** + * An object that configures {@link Particles}. + */ export interface ParticlesOptions { + /** Dictionary of CSS classes to apply to this feature. */ classes?: Computable<Record<string, boolean>>; + /** CSS to apply to this feature. */ style?: Computable<StyleValue>; + /** A function that is called when the particles canvas is resized. */ onContainerResized?: (boundingRect: DOMRect) => void; + /** A function that is called whenever the particles element is reloaded during development. For restarting particle effects. */ onHotReload?: VoidFunction; } +/** + * The properties that are added onto a processed {@link ParticlesOptions} to create an {@link Particles}. + */ export interface BaseParticles { + /** An auto-generated ID for identifying features that appear in the DOM. Will not persist between refreshes or updates. */ id: string; + /** The Pixi.JS Application powering this particles canvas. */ app: Ref<null | Application>; + /** + * A function to asynchronously add an emitter to the canvas. + * The returned emitter can then be positioned as appropriate and started. + * @see {@link Particles} + */ addEmitter: (config: EmitterConfigV3) => Promise<Emitter>; + /** A symbol that helps identify features of the same type. */ type: typeof ParticlesType; + /** The Vue component used to render this feature. */ [Component]: GenericComponent; + /** A function to gather the props the vue component requires for this feature. */ [GatherProps]: () => Record<string, unknown>; } +/** + * An object that represents a feature that display particle effects on the screen. + * The config should typically be gotten by designing the effect using the [online particle effect editor](https://pixijs.io/pixi-particles-editor/) and passing it into the {@link upgradeConfig} from @pixi/particle-emitter. + */ export type Particles<T extends ParticlesOptions> = Replace< T & BaseParticles, { @@ -34,8 +59,13 @@ export type Particles<T extends ParticlesOptions> = Replace< } >; +/** A type that matches any valid {@link Particles} object. */ export type GenericParticles = Particles<ParticlesOptions>; +/** + * Lazily creates particles with the given options. + * @param optionsFunc Particles options. + */ export function createParticles<T extends ParticlesOptions>( optionsFunc?: OptionsFunc<T, BaseParticles, GenericParticles> ): Particles<T> { diff --git a/src/features/repeatable.tsx b/src/features/repeatable.tsx index df5d0be..2598c19 100644 --- a/src/features/repeatable.tsx +++ b/src/features/repeatable.tsx @@ -76,7 +76,7 @@ export interface RepeatableOptions { * The properties that are added onto a processed {@link RepeatableOptions} to create a {@link Repeatable}. */ export interface BaseRepeatable { - /** An auto-generated ID for identifying features that appear in the DOM. Will not persistent between refreshes or updates. */ + /** An auto-generated ID for identifying features that appear in the DOM. Will not persist between refreshes or updates. */ id: string; /** The current amount this repeatable has. */ amount: Persistent<DecimalSource>; diff --git a/src/features/reset.ts b/src/features/reset.ts index 487238c..0bba943 100644 --- a/src/features/reset.ts +++ b/src/features/reset.ts @@ -11,19 +11,32 @@ import { processComputable } from "util/computed"; import { createLazyProxy } from "util/proxies"; import { isRef, unref } from "vue"; +/** A symbol used to identify {@link Reset} features. */ export const ResetType = Symbol("Reset"); +/** + * An object that configures a {@link Clickable}. + */ export interface ResetOptions { + /** List of things to reset. Can include objects which will be recursed over for persistent values. */ thingsToReset: Computable<Record<string, unknown>[]>; + /** A function that is called when the reset is performed. */ onReset?: VoidFunction; } +/** + * The properties that are added onto a processed {@link ResetOptions} to create an {@link Reset}. + */ export interface BaseReset { + /** An auto-generated ID for identifying which reset is being performed. Will not persist between refreshes or updates. */ id: string; + /** Trigger the reset. */ reset: VoidFunction; + /** A symbol that helps identify features of the same type. */ type: typeof ResetType; } +/** An object that represents a reset mechanic, which resets progress back to its initial state. */ export type Reset<T extends ResetOptions> = Replace< T & BaseReset, { @@ -31,8 +44,13 @@ export type Reset<T extends ResetOptions> = Replace< } >; +/** A type that matches any valid {@link Reset} object. */ export type GenericReset = Reset<ResetOptions>; +/** + * Lazily creates a reset with the given options. + * @param optionsFunc Reset options. + */ export function createReset<T extends ResetOptions>( optionsFunc: OptionsFunc<T, BaseReset, GenericReset> ): Reset<T> { @@ -66,6 +84,11 @@ export function createReset<T extends ResetOptions>( } const listeners: Record<string, Unsubscribe | undefined> = {}; +/** + * Track the time since the specified reset last occured. + * @param layer The layer the reset is attached to + * @param reset The reset mechanic to track the time since + */ export function trackResetTime(layer: BaseLayer, reset: GenericReset): Persistent<Decimal> { const resetTime = persistent<Decimal>(new Decimal(0)); globalBus.on("addLayer", layerBeingAdded => { diff --git a/src/features/resources/resource.ts b/src/features/resources/resource.ts index 8e203d3..0247a67 100644 --- a/src/features/resources/resource.ts +++ b/src/features/resources/resource.ts @@ -8,12 +8,23 @@ import { loadingSave } from "util/save"; import type { ComputedRef, Ref } from "vue"; import { computed, isRef, ref, unref, watch } from "vue"; +/** An object that represents a named and quantifiable resource in the game. */ export interface Resource<T = DecimalSource> extends Ref<T> { + /** The name of this resource. */ displayName: string; + /** When displaying the value of this resource, how many significant digits to display. */ precision: number; + /** Whether or not to display very small values using scientific notation, or rounding to 0. */ small?: boolean; } +/** + * Creates a resource. + * @param defaultValue The initial value of the resource + * @param displayName The human readable name of this resource + * @param precision The number of significant digits to display by default + * @param small Whether or not to display very small values or round to 0, by default + */ export function createResource<T extends State>( defaultValue: T, displayName?: string, @@ -49,6 +60,7 @@ export function createResource<T extends State>( return resource as Resource<T>; } +/** Returns a reference to the highest amount of the resource ever owned, which is updated automatically. */ export function trackBest(resource: Resource): Ref<DecimalSource> { const best = persistent(resource.value); watch(resource, amount => { @@ -62,6 +74,7 @@ export function trackBest(resource: Resource): Ref<DecimalSource> { return best; } +/** Returns a reference to the total amount of the resource gained, updated automatically. "Refunds" count as gain. */ export function trackTotal(resource: Resource): Ref<DecimalSource> { const total = persistent(resource.value); watch(resource, (amount, prevAmount) => { @@ -77,6 +90,7 @@ export function trackTotal(resource: Resource): Ref<DecimalSource> { const tetra8 = new Decimal("10^^8"); const e100 = new Decimal("1e100"); +/** Returns a reference to the amount of resource being gained in terms of orders of magnitude per second, calcualted over the last tick. Useful for situations where the gain rate is increasing very rapidly. */ export function trackOOMPS( resource: Resource, pointGain?: ComputedRef<DecimalSource> @@ -135,6 +149,7 @@ export function trackOOMPS( return oompsString; } +/** Utility for displaying a resource with the correct precision. */ export function displayResource(resource: Resource, overrideAmount?: DecimalSource): string { const amount = overrideAmount ?? resource.value; if (Decimal.eq(resource.precision, 0)) { @@ -143,6 +158,7 @@ export function displayResource(resource: Resource, overrideAmount?: DecimalSour return format(amount, resource.precision, resource.small); } +/** Utility for unwrapping a resource that may or may not be inside a ref. */ export function unwrapResource(resource: ProcessedComputable<Resource>): Resource { if ("displayName" in resource) { return resource; diff --git a/src/features/tabs/tab.ts b/src/features/tabs/tab.ts index 6917009..d19dfdd 100644 --- a/src/features/tabs/tab.ts +++ b/src/features/tabs/tab.ts @@ -10,21 +10,39 @@ import TabComponent from "features/tabs/Tab.vue"; import type { Computable, GetComputableType } from "util/computed"; import { createLazyProxy } from "util/proxies"; +/** A symbol used to identify {@link Tab} features. */ export const TabType = Symbol("Tab"); +/** + * An object that configures a {@link Tab}. + */ export interface TabOptions { + /** Dictionary of CSS classes to apply to this feature. */ classes?: Computable<Record<string, boolean>>; + /** CSS to apply to this feature. */ style?: Computable<StyleValue>; + /** The display to use for this tab. */ display: Computable<CoercableComponent>; } +/** + * The properties that are added onto a processed {@link TabOptions} to create an {@link Tab}. + */ export interface BaseTab { + /** An auto-generated ID for identifying features that appear in the DOM. Will not persist between refreshes or updates. */ id: string; + /** A symbol that helps identify features of the same type. */ type: typeof TabType; + /** The Vue component used to render this feature. */ [Component]: GenericComponent; + /** A function to gather the props the vue component requires for this feature. */ [GatherProps]: () => Record<string, unknown>; } +/** + * An object representing a tab of content in a tabbed interface. + * @see {@link TabFamily} + */ export type Tab<T extends TabOptions> = Replace< T & BaseTab, { @@ -34,8 +52,13 @@ export type Tab<T extends TabOptions> = Replace< } >; +/** A type that matches any valid {@link Tab} object. */ export type GenericTab = Tab<TabOptions>; +/** + * Lazily creates a tab with the given options. + * @param optionsFunc Tab options. + */ export function createTab<T extends TabOptions>( optionsFunc: OptionsFunc<T, BaseTab, GenericTab> ): Tab<T> { diff --git a/src/features/tabs/tabFamily.ts b/src/features/tabs/tabFamily.ts index 32df1e7..316b309 100644 --- a/src/features/tabs/tabFamily.ts +++ b/src/features/tabs/tabFamily.ts @@ -29,23 +29,43 @@ import type { Ref } from "vue"; import { computed, unref } from "vue"; import type { GenericTab } from "./tab"; +/** A symbol used to identify {@link TabButton} features. */ export const TabButtonType = Symbol("TabButton"); +/** A symbol used to identify {@link TabFamily} features. */ export const TabFamilyType = Symbol("TabFamily"); +/** + * An object that configures a {@link TabButton}. + */ export interface TabButtonOptions { + /** Whether this tab button should be visible. */ visibility?: Computable<Visibility | boolean>; + /** The tab to display when this button is clicked. */ tab: Computable<GenericTab | CoercableComponent>; + /** The label on this button. */ display: Computable<CoercableComponent>; + /** Dictionary of CSS classes to apply to this feature. */ classes?: Computable<Record<string, boolean>>; + /** CSS to apply to this feature. */ style?: Computable<StyleValue>; + /** The color of the glow effect to display when this button is active. */ glowColor?: Computable<string>; } +/** + * The properties that are added onto a processed {@link TabButtonOptions} to create an {@link TabButton}. + */ export interface BaseTabButton { + /** A symbol that helps identify features of the same type. */ type: typeof TabButtonType; + /** The Vue component used to render this feature. */ [Component]: GenericComponent; } +/** + * An object that represents a button that can be clicked to change tabs in a tabbed interface. + * @see {@link TabFamily} + */ export type TabButton<T extends TabButtonOptions> = Replace< T & BaseTabButton, { @@ -58,6 +78,7 @@ export type TabButton<T extends TabButtonOptions> = Replace< } >; +/** A type that matches any valid {@link TabButton} object. */ export type GenericTabButton = Replace< TabButton<TabButtonOptions>, { @@ -65,24 +86,46 @@ export type GenericTabButton = Replace< } >; +/** + * An object that configures a {@link TabFamily}. + */ export interface TabFamilyOptions { + /** Whether this tab button should be visible. */ visibility?: Computable<Visibility | boolean>; + /** Dictionary of CSS classes to apply to this feature. */ classes?: Computable<Record<string, boolean>>; + /** CSS to apply to this feature. */ style?: Computable<StyleValue>; + /** A dictionary of CSS classes to apply to the list of buttons for changing tabs. */ buttonContainerClasses?: Computable<Record<string, boolean>>; + /** CSS to apply to the list of buttons for changing tabs. */ buttonContainerStyle?: Computable<StyleValue>; } +/** + * The properties that are added onto a processed {@link TabFamilyOptions} to create an {@link TabFamily}. + */ export interface BaseTabFamily { + /** An auto-generated ID for identifying features that appear in the DOM. Will not persist between refreshes or updates. */ id: string; + /** All the tabs within this family. */ tabs: Record<string, TabButtonOptions>; + /** The currently active tab, if any. */ activeTab: Ref<GenericTab | CoercableComponent | null>; + /** The name of the tab that is currently active. */ selected: Persistent<string>; + /** A symbol that helps identify features of the same type. */ type: typeof TabFamilyType; + /** The Vue component used to render this feature. */ [Component]: GenericComponent; + /** A function to gather the props the vue component requires for this feature. */ [GatherProps]: () => Record<string, unknown>; } +/** + * An object that represents a tabbed interface. + * @see {@link TabFamily} + */ export type TabFamily<T extends TabFamilyOptions> = Replace< T & BaseTabFamily, { @@ -91,6 +134,7 @@ export type TabFamily<T extends TabFamilyOptions> = Replace< } >; +/** A type that matches any valid {@link TabFamily} object. */ export type GenericTabFamily = Replace< TabFamily<TabFamilyOptions>, { @@ -98,6 +142,10 @@ export type GenericTabFamily = Replace< } >; +/** + * Lazily creates a tab family with the given options. + * @param optionsFunc Tab family options. + */ export function createTabFamily<T extends TabFamilyOptions>( tabs: Record<string, () => TabButtonOptions>, optionsFunc?: OptionsFunc<T, BaseTabFamily, GenericTabFamily> diff --git a/src/features/tooltips/tooltip.ts b/src/features/tooltips/tooltip.ts index 2cb977d..55985f4 100644 --- a/src/features/tooltips/tooltip.ts +++ b/src/features/tooltips/tooltip.ts @@ -21,20 +21,34 @@ declare module "@vue/runtime-dom" { } } +/** + * An object that configures a {@link Tooltip}. + */ export interface TooltipOptions { + /** Whether or not this tooltip can be pinned, meaning it'll stay visible even when not hovered. */ pinnable?: boolean; + /** The text to display inside the tooltip. */ display: Computable<CoercableComponent>; + /** Dictionary of CSS classes to apply to this feature. */ classes?: Computable<Record<string, boolean>>; + /** CSS to apply to this feature. */ style?: Computable<StyleValue>; + /** The direction in which to display the tooltip */ direction?: Computable<Direction>; + /** The x offset of the tooltip, in px. */ xoffset?: Computable<string>; + /** The y offset of the tooltip, in px. */ yoffset?: Computable<string>; } +/** + * The properties that are added onto a processed {@link TooltipOptions} to create an {@link Tooltip}. + */ export interface BaseTooltip { pinned?: Ref<boolean>; } +/** An object that represents a tooltip that appears when hovering over an element. */ export type Tooltip<T extends TooltipOptions> = Replace< T & BaseTooltip, { @@ -49,6 +63,7 @@ export type Tooltip<T extends TooltipOptions> = Replace< } >; +/** A type that matches any valid {@link Tooltip} object. */ export type GenericTooltip = Replace< Tooltip<TooltipOptions>, { @@ -58,6 +73,11 @@ export type GenericTooltip = Replace< } >; +/** + * Creates a tooltip on the given element with the given options. + * @param element The renderable feature to display the tooltip on. + * @param optionsFunc Clickable options. + */ export function addTooltip<T extends TooltipOptions>( element: VueFeature, options: T & ThisType<Tooltip<T>> & Partial<BaseTooltip> diff --git a/src/features/trees/tree.ts b/src/features/trees/tree.ts index a3efba7..8bd1f7a 100644 --- a/src/features/trees/tree.ts +++ b/src/features/trees/tree.ts @@ -25,30 +25,54 @@ import { createLazyProxy } from "util/proxies"; import type { Ref } from "vue"; import { computed, ref, shallowRef, unref } from "vue"; +/** A symbol used to identify {@link TreeNode} features. */ export const TreeNodeType = Symbol("TreeNode"); +/** A symbol used to identify {@link Tree} features. */ export const TreeType = Symbol("Tree"); +/** + * An object that configures a {@link TreeNode}. + */ export interface TreeNodeOptions { + /** Whether this tree node should be visible. */ visibility?: Computable<Visibility | boolean>; + /** Whether or not this tree node can be clicked. */ canClick?: Computable<boolean>; + /** The background color for this node. */ color?: Computable<string>; + /** The label to display on this tree node. */ display?: Computable<CoercableComponent>; + /** The color of the glow effect shown to notify the user there's something to do with this node. */ glowColor?: Computable<string>; + /** Dictionary of CSS classes to apply to this feature. */ classes?: Computable<Record<string, boolean>>; + /** CSS to apply to this feature. */ style?: Computable<StyleValue>; + /** Shows a marker on the corner of the feature. */ mark?: Computable<boolean | string>; + /** A reset object attached to this node, used for propagating resets through the tree. */ reset?: GenericReset; + /** A function that is called when the tree node is clicked. */ onClick?: (e?: MouseEvent | TouchEvent) => void; + /** A function that is called when the tree node is held down. */ onHold?: VoidFunction; } +/** + * The properties that are added onto a processed {@link TreeNodeOptions} to create an {@link TreeNode}. + */ export interface BaseTreeNode { + /** An auto-generated ID for identifying features that appear in the DOM. Will not persist between refreshes or updates. */ id: string; + /** A symbol that helps identify features of the same type. */ type: typeof TreeNodeType; + /** The Vue component used to render this feature. */ [Component]: GenericComponent; + /** A function to gather the props the vue component requires for this feature. */ [GatherProps]: () => Record<string, unknown>; } +/** An object that represents a node on a tree. */ export type TreeNode<T extends TreeNodeOptions> = Replace< T & BaseTreeNode, { @@ -63,6 +87,7 @@ export type TreeNode<T extends TreeNodeOptions> = Replace< } >; +/** A type that matches any valid {@link TreeNode} object. */ export type GenericTreeNode = Replace< TreeNode<TreeNodeOptions>, { @@ -71,6 +96,10 @@ export type GenericTreeNode = Replace< } >; +/** + * Lazily creates a tree node with the given options. + * @param optionsFunc Tree Node options. + */ export function createTreeNode<T extends TreeNodeOptions>( optionsFunc?: OptionsFunc<T, BaseTreeNode, GenericTreeNode> ): TreeNode<T> { @@ -141,32 +170,52 @@ export function createTreeNode<T extends TreeNodeOptions>( }); } +/** Represents a branch between two nodes in a tree. */ export interface TreeBranch extends Omit<Link, "startNode" | "endNode"> { startNode: GenericTreeNode; endNode: GenericTreeNode; } +/** + * An object that configures a {@link Tree}. + */ export interface TreeOptions { + /** Whether this clickable should be visible. */ visibility?: Computable<Visibility | boolean>; + /** The nodes within the tree, in a 2D array. */ nodes: Computable<GenericTreeNode[][]>; + /** Nodes to show on the left side of the tree. */ leftSideNodes?: Computable<GenericTreeNode[]>; + /** Nodes to show on the right side of the tree. */ rightSideNodes?: Computable<GenericTreeNode[]>; + /** The branches between nodes within this tree. */ branches?: Computable<TreeBranch[]>; + /** How to propagate resets through the tree. */ resetPropagation?: ResetPropagation; + /** A function that is called when a node within the tree is reset. */ onReset?: (node: GenericTreeNode) => void; } export interface BaseTree { + /** An auto-generated ID for identifying features that appear in the DOM. Will not persist between refreshes or updates. */ id: string; + /** The link objects for each of the branches of the tree. */ links: Ref<Link[]>; + /** Cause a reset on this node and propagate it through the tree according to {@link resetPropagation}. */ reset: (node: GenericTreeNode) => void; + /** A flag that is true while the reset is still propagating through the tree. */ isResetting: Ref<boolean>; + /** A reference to the node that caused the currently propagating reset. */ resettingNode: Ref<GenericTreeNode | null>; + /** A symbol that helps identify features of the same type. */ type: typeof TreeType; + /** The Vue component used to render this feature. */ [Component]: GenericComponent; + /** A function to gather the props the vue component requires for this feature. */ [GatherProps]: () => Record<string, unknown>; } +/** An object that represents a feature that is a tree of nodes with branches between them. Contains support for reset mechanics that can propagate through the tree. */ export type Tree<T extends TreeOptions> = Replace< T & BaseTree, { @@ -178,6 +227,7 @@ export type Tree<T extends TreeOptions> = Replace< } >; +/** A type that matches any valid {@link Tree} object. */ export type GenericTree = Replace< Tree<TreeOptions>, { @@ -185,6 +235,10 @@ export type GenericTree = Replace< } >; +/** + * Lazily creates a tree with the given options. + * @param optionsFunc Tree options. + */ export function createTree<T extends TreeOptions>( optionsFunc: OptionsFunc<T, BaseTree, GenericTree> ): Tree<T> { @@ -227,10 +281,12 @@ export function createTree<T extends TreeOptions>( }); } +/** A function that is used to propagate resets through a tree. */ export type ResetPropagation = { (tree: GenericTree, resettingNode: GenericTreeNode): void; }; +/** Propagate resets down the tree by resetting every node in a lower row. */ export const defaultResetPropagation = function ( tree: GenericTree, resettingNode: GenericTreeNode @@ -242,6 +298,7 @@ export const defaultResetPropagation = function ( } }; +/** Propagate resets down the tree by resetting every node in a lower row. */ export const invertedResetPropagation = function ( tree: GenericTree, resettingNode: GenericTreeNode @@ -253,6 +310,7 @@ export const invertedResetPropagation = function ( } }; +/** Propagate resets down the branches of the tree. */ export const branchedResetPropagation = function ( tree: GenericTree, resettingNode: GenericTreeNode @@ -288,6 +346,10 @@ export const branchedResetPropagation = function ( } }; +/** + * Utility for creating a tooltip for a tree node that displays a resource-based unlock requirement, and after unlock shows the amount of another resource. + * It sounds oddly specific, but comes up a lot. + */ export function createResourceTooltip( resource: Resource, requiredResource: Resource | null = null, diff --git a/src/features/upgrades/upgrade.ts b/src/features/upgrades/upgrade.ts index 5bcf5df..14a64e7 100644 --- a/src/features/upgrades/upgrade.ts +++ b/src/features/upgrades/upgrade.ts @@ -36,35 +36,60 @@ import { createLazyProxy } from "util/proxies"; import type { Ref } from "vue"; import { computed, unref } from "vue"; +/** A symbol used to identify {@link Upgrade} features. */ export const UpgradeType = Symbol("Upgrade"); +/** + * An object that configures a {@link Upgrade}. + */ export interface UpgradeOptions { + /** Whether this clickable should be visible. */ visibility?: Computable<Visibility | boolean>; + /** Dictionary of CSS classes to apply to this feature. */ classes?: Computable<Record<string, boolean>>; + /** CSS to apply to this feature. */ style?: Computable<StyleValue>; + /** Shows a marker on the corner of the feature. */ + mark?: Computable<boolean | string>; + /** The display to use for this clickable. */ display?: Computable< | CoercableComponent | { + /** A header to appear at the top of the display. */ title?: CoercableComponent; + /** The main text that appears in the display. */ description: CoercableComponent; + /** A description of the current effect of the achievement. Useful when the effect changes dynamically. */ effectDisplay?: CoercableComponent; } >; + /** The requirements to purchase this upgrade. */ requirements: Requirements; - mark?: Computable<boolean | string>; + /** A function that is called when the upgrade is purchased. */ onPurchase?: VoidFunction; } +/** + * The properties that are added onto a processed {@link UpgradeOptions} to create an {@link Upgrade}. + */ export interface BaseUpgrade { + /** An auto-generated ID for identifying features that appear in the DOM. Will not persist between refreshes or updates. */ id: string; + /** Whether or not this upgrade has been purchased. */ bought: Persistent<boolean>; + /** Whether or not the upgrade can currently be purchased. */ canPurchase: Ref<boolean>; + /** Purchase the upgrade */ purchase: VoidFunction; + /** A symbol that helps identify features of the same type. */ type: typeof UpgradeType; + /** The Vue component used to render this feature. */ [Component]: GenericComponent; + /** A function to gather the props the vue component requires for this feature. */ [GatherProps]: () => Record<string, unknown>; } +/** An object that represents a feature that can be purchased a single time. */ export type Upgrade<T extends UpgradeOptions> = Replace< T & BaseUpgrade, { @@ -77,6 +102,7 @@ export type Upgrade<T extends UpgradeOptions> = Replace< } >; +/** A type that matches any valid {@link Upgrade} object. */ export type GenericUpgrade = Replace< Upgrade<UpgradeOptions>, { @@ -84,6 +110,10 @@ export type GenericUpgrade = Replace< } >; +/** + * Lazily creates an upgrade with the given options. + * @param optionsFunc Upgrade options. + */ export function createUpgrade<T extends UpgradeOptions>( optionsFunc: OptionsFunc<T, BaseUpgrade, GenericUpgrade> ): Upgrade<T> { @@ -151,6 +181,12 @@ export function createUpgrade<T extends UpgradeOptions>( }); } +/** + * Utility to auto purchase a list of upgrades whenever they're affordable. + * @param layer The layer the upgrades are apart of + * @param autoActive Whether or not the upgrades should currently be auto-purchasing + * @param upgrades The specific upgrades to upgrade. If unspecified, uses all upgrades on the layer. + */ export function setupAutoPurchase( layer: GenericLayer, autoActive: Computable<boolean>, From 0614f14ad6cd97bbab4cab118c36a2d46d86bc51 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Tue, 4 Apr 2023 22:10:35 -0500 Subject: [PATCH 011/134] Added tests for conversions --- src/features/conversion.ts | 29 +- tests/features/conversions.test.ts | 502 +++++++++++++++++++++++++++++ 2 files changed, 518 insertions(+), 13 deletions(-) create mode 100644 tests/features/conversions.test.ts diff --git a/src/features/conversion.ts b/src/features/conversion.ts index 1ccf26b..a184de0 100644 --- a/src/features/conversion.ts +++ b/src/features/conversion.ts @@ -133,11 +133,11 @@ export function createConversion<T extends ConversionOptions>( ); if (conversion.currentGain == null) { conversion.currentGain = computed(() => { - let gain = (conversion as GenericConversion).formula.evaluate( - conversion.baseResource.value - ); - gain = Decimal.floor(gain).max(0); - + let gain = Decimal.floor( + (conversion as GenericConversion).formula.evaluate( + conversion.baseResource.value + ) + ).max(0); if (unref(conversion.buyMax) === false) { gain = gain.min(1); } @@ -218,10 +218,11 @@ export function createIndependentConversion<S extends ConversionOptions>( if (conversion.currentGain == null) { conversion.currentGain = computed(() => { - let gain = (conversion as unknown as GenericConversion).formula.evaluate( - conversion.baseResource.value - ); - gain = Decimal.floor(gain).max(conversion.gainResource.value); + let gain = Decimal.floor( + (conversion as unknown as GenericConversion).formula.evaluate( + conversion.baseResource.value + ) + ).max(conversion.gainResource.value); if (unref(conversion.buyMax) === false) { gain = gain.min(Decimal.add(conversion.gainResource.value, 1)); } @@ -235,7 +236,9 @@ export function createIndependentConversion<S extends ConversionOptions>( conversion.baseResource.value ), conversion.gainResource.value - ).max(0); + ) + .floor() + .max(0); if (unref(conversion.buyMax) === false) { gain = gain.min(1); @@ -263,13 +266,13 @@ export function createIndependentConversion<S extends ConversionOptions>( * @param layer The layer this passive generation will be associated with. Typically `this` when calling this function from inside a layer's options function. * @param conversion The conversion that will determine how much generation there is. * @param rate A multiplier to multiply against the conversion's currentGain. - * @param cap A value that should not be passed via passive generation. If null, no cap is applied. + * @param cap A value that should not be passed via passive generation. */ export function setupPassiveGeneration( layer: BaseLayer, conversion: GenericConversion, rate: Computable<DecimalSource> = 1, - cap: Computable<DecimalSource | null> = null + cap: Computable<DecimalSource> = Decimal.dInf ): void { const processedRate = convertComputable(rate); const processedCap = convertComputable(cap); @@ -280,7 +283,7 @@ export function setupPassiveGeneration( conversion.gainResource.value, Decimal.times(currRate, diff).times(Decimal.ceil(unref(conversion.actualGain))) ) - .min(unref(processedCap) ?? Decimal.dInf) + .min(unref(processedCap)) .max(conversion.gainResource.value); } }); diff --git a/tests/features/conversions.test.ts b/tests/features/conversions.test.ts new file mode 100644 index 0000000..fc1d68d --- /dev/null +++ b/tests/features/conversions.test.ts @@ -0,0 +1,502 @@ +import { + createCumulativeConversion, + createIndependentConversion, + GenericConversion, + setupPassiveGeneration +} from "features/conversion"; +import { createResource, Resource } from "features/resources/resource"; +import { GenericFormula } from "game/formulas/types"; +import { createLayer } from "game/layers"; +import Decimal from "util/bignum"; +import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; +import { ref, unref } from "vue"; +import "../utils"; + +describe("Creating conversion", () => { + let baseResource: Resource; + let gainResource: Resource; + let formula: (x: GenericFormula) => GenericFormula; + beforeEach(() => { + baseResource = createResource(ref(40)); + gainResource = createResource(ref(1)); + formula = x => x.div(10).sqrt(); + }); + afterEach(() => { + vi.restoreAllMocks(); + }); + + describe("Cumulative conversion", () => { + describe("Calculates currentGain correctly", () => { + let conversion: GenericConversion; + beforeEach(() => { + conversion = createCumulativeConversion(() => ({ + baseResource, + gainResource, + formula + })); + }); + test("Exactly enough", () => { + baseResource.value = Decimal.pow(100, 2).times(10); + expect(unref(conversion.currentGain)).compare_tolerance(100); + }); + test("Just under", () => { + baseResource.value = Decimal.pow(100, 2).times(10).sub(1); + expect(unref(conversion.currentGain)).compare_tolerance(99); + }); + test("Just over", () => { + baseResource.value = Decimal.pow(100, 2).times(10).add(1); + expect(unref(conversion.currentGain)).compare_tolerance(100); + }); + }); + describe("Calculates actualGain correctly", () => { + let conversion: GenericConversion; + beforeEach(() => { + conversion = createCumulativeConversion(() => ({ + baseResource, + gainResource, + formula + })); + }); + test("Exactly enough", () => { + baseResource.value = Decimal.pow(100, 2).times(10); + expect(unref(conversion.actualGain)).compare_tolerance(100); + }); + test("Just under", () => { + baseResource.value = Decimal.pow(100, 2).times(10).sub(1); + expect(unref(conversion.actualGain)).compare_tolerance(99); + }); + test("Just over", () => { + baseResource.value = Decimal.pow(100, 2).times(10).add(1); + expect(unref(conversion.actualGain)).compare_tolerance(100); + }); + }); + describe("Calculates currentAt correctly", () => { + let conversion: GenericConversion; + beforeEach(() => { + conversion = createCumulativeConversion(() => ({ + baseResource, + gainResource, + formula + })); + }); + test("Exactly enough", () => { + baseResource.value = Decimal.pow(100, 2).times(10); + expect(unref(conversion.currentAt)).compare_tolerance( + Decimal.pow(100, 2).times(10) + ); + }); + test("Just under", () => { + baseResource.value = Decimal.pow(100, 2).times(10).sub(1); + expect(unref(conversion.currentAt)).compare_tolerance(Decimal.pow(99, 2).times(10)); + }); + test("Just over", () => { + baseResource.value = Decimal.pow(100, 2).times(10).add(1); + expect(unref(conversion.currentAt)).compare_tolerance( + Decimal.pow(100, 2).times(10) + ); + }); + }); + describe("Calculates nextAt correctly", () => { + let conversion: GenericConversion; + beforeEach(() => { + conversion = createCumulativeConversion(() => ({ + baseResource, + gainResource, + formula + })); + }); + test("Exactly enough", () => { + baseResource.value = Decimal.pow(100, 2).times(10); + expect(unref(conversion.nextAt)).compare_tolerance(Decimal.pow(101, 2).times(10)); + }); + test("Just under", () => { + baseResource.value = Decimal.pow(100, 2).times(10).sub(1); + expect(unref(conversion.nextAt)).compare_tolerance(Decimal.pow(100, 2).times(10)); + }); + test("Just over", () => { + baseResource.value = Decimal.pow(100, 2).times(10).add(1); + expect(unref(conversion.nextAt)).compare_tolerance(Decimal.pow(101, 2).times(10)); + }); + }); + test("Converts correctly", () => { + const conversion = createCumulativeConversion(() => ({ + baseResource, + gainResource, + formula + })); + conversion.convert(); + expect(baseResource.value).compare_tolerance(0); + expect(gainResource.value).compare_tolerance(3); + }); + describe("Obeys buy max", () => { + test("buyMax = false", () => { + const conversion = createCumulativeConversion(() => ({ + baseResource, + gainResource, + formula, + buyMax: false + })); + expect(unref(conversion.actualGain)).compare_tolerance(1); + }); + test("buyMax = true", () => { + const conversion = createCumulativeConversion(() => ({ + baseResource, + gainResource, + formula, + buyMax: true + })); + expect(unref(conversion.actualGain)).compare_tolerance(2); + }); + }); + test("Spends correctly", () => { + const conversion = createCumulativeConversion(() => ({ + baseResource, + gainResource, + formula + })); + conversion.convert(); + expect(baseResource.value).compare_tolerance(0); + }); + test("Calls onConvert", () => { + const onConvert = vi.fn(); + const conversion = createCumulativeConversion(() => ({ + baseResource, + gainResource, + formula, + onConvert + })); + conversion.convert(); + expect(onConvert).toHaveBeenCalled(); + }); + }); + + describe("Independent conversion", () => { + describe("Calculates currentGain correctly", () => { + let conversion: GenericConversion; + beforeEach(() => { + conversion = createIndependentConversion(() => ({ + baseResource, + gainResource, + formula, + buyMax: true + })); + }); + test("Exactly enough", () => { + baseResource.value = Decimal.pow(100, 2).times(10); + expect(unref(conversion.currentGain)).compare_tolerance(100); + }); + test("Just under", () => { + baseResource.value = Decimal.pow(100, 2).times(10).sub(1); + expect(unref(conversion.currentGain)).compare_tolerance(99); + }); + test("Just over", () => { + baseResource.value = Decimal.pow(100, 2).times(10).add(1); + expect(unref(conversion.currentGain)).compare_tolerance(100); + }); + }); + describe("Calculates actualGain correctly", () => { + let conversion: GenericConversion; + beforeEach(() => { + conversion = createIndependentConversion(() => ({ + baseResource, + gainResource, + formula, + buyMax: true + })); + }); + test("Exactly enough", () => { + baseResource.value = Decimal.pow(100, 2).times(10); + expect(unref(conversion.actualGain)).compare_tolerance(99); + }); + test("Just under", () => { + baseResource.value = Decimal.pow(100, 2).times(10).sub(1); + expect(unref(conversion.actualGain)).compare_tolerance(98); + }); + test("Just over", () => { + baseResource.value = Decimal.pow(100, 2).times(10).add(1); + expect(unref(conversion.actualGain)).compare_tolerance(99); + }); + }); + describe("Calculates currentAt correctly", () => { + let conversion: GenericConversion; + beforeEach(() => { + conversion = createIndependentConversion(() => ({ + baseResource, + gainResource, + formula, + buyMax: true + })); + }); + test("Exactly enough", () => { + baseResource.value = Decimal.pow(100, 2).times(10); + expect(unref(conversion.currentAt)).compare_tolerance( + Decimal.pow(100, 2).times(10) + ); + }); + test("Just under", () => { + baseResource.value = Decimal.pow(100, 2).times(10).sub(1); + expect(unref(conversion.currentAt)).compare_tolerance(Decimal.pow(99, 2).times(10)); + }); + test("Just over", () => { + baseResource.value = Decimal.pow(100, 2).times(10).add(1); + expect(unref(conversion.currentAt)).compare_tolerance( + Decimal.pow(100, 2).times(10) + ); + }); + }); + describe("Calculates nextAt correctly", () => { + let conversion: GenericConversion; + beforeEach(() => { + conversion = createIndependentConversion(() => ({ + baseResource, + gainResource, + formula, + buyMax: true + })); + }); + test("Exactly enough", () => { + baseResource.value = Decimal.pow(100, 2).times(10); + expect(unref(conversion.nextAt)).compare_tolerance(Decimal.pow(101, 2).times(10)); + }); + test("Just under", () => { + baseResource.value = Decimal.pow(100, 2).times(10).sub(1); + expect(unref(conversion.nextAt)).compare_tolerance(Decimal.pow(100, 2).times(10)); + }); + test("Just over", () => { + baseResource.value = Decimal.pow(100, 2).times(10).add(1); + expect(unref(conversion.nextAt)).compare_tolerance(Decimal.pow(101, 2).times(10)); + }); + }); + test("Converts correctly", () => { + const conversion = createIndependentConversion(() => ({ + baseResource, + gainResource, + formula + })); + conversion.convert(); + expect(baseResource.value).compare_tolerance(0); + expect(gainResource.value).compare_tolerance(2); + }); + describe("Obeys buy max", () => { + test("buyMax = false", () => { + const conversion = createIndependentConversion(() => ({ + baseResource, + gainResource, + formula, + buyMax: false + })); + baseResource.value = 90; + expect(unref(conversion.actualGain)).compare_tolerance(1); + }); + test("buyMax = true", () => { + const conversion = createIndependentConversion(() => ({ + baseResource, + gainResource, + formula, + buyMax: true + })); + baseResource.value = 90; + expect(unref(conversion.actualGain)).compare_tolerance(2); + }); + }); + test("Spends correctly", () => { + const conversion = createIndependentConversion(() => ({ + baseResource, + gainResource, + formula + })); + conversion.convert(); + expect(baseResource.value).compare_tolerance(0); + }); + test("Calls onConvert", () => { + const onConvert = vi.fn(); + const conversion = createIndependentConversion(() => ({ + baseResource, + gainResource, + formula, + onConvert + })); + conversion.convert(); + expect(onConvert).toHaveBeenCalled(); + }); + }); + describe("Custom conversion", () => { + describe("Custom cumulative", () => { + let conversion: GenericConversion; + const convert = vi.fn(); + const spend = vi.fn(); + const onConvert = vi.fn(); + beforeAll(() => { + conversion = createCumulativeConversion(() => ({ + baseResource, + gainResource, + formula, + currentGain() { + return 10; + }, + actualGain() { + return 5; + }, + currentAt() { + return 100; + }, + nextAt() { + return 1000; + }, + convert, + spend, + onConvert + })); + }); + afterEach(() => { + vi.resetAllMocks(); + }); + test("Calculates currentGain correctly", () => { + expect(unref(conversion.currentGain)).compare_tolerance(10); + }); + test("Calculates actualGain correctly", () => { + expect(unref(conversion.actualGain)).compare_tolerance(5); + }); + test("Calculates currentAt correctly", () => { + expect(unref(conversion.currentAt)).compare_tolerance(100); + }); + test("Calculates nextAt correctly", () => { + expect(unref(conversion.nextAt)).compare_tolerance(1000); + }); + test("Calls convert", () => { + conversion.convert(); + expect(convert).toHaveBeenCalled(); + }); + test("Calls spend and onConvert", () => { + conversion = createCumulativeConversion(() => ({ + baseResource, + gainResource, + formula, + spend, + onConvert + })); + conversion.convert(); + expect(spend).toHaveBeenCalled(); + expect(spend).toHaveBeenCalledWith(expect.compare_tolerance(2)); + expect(onConvert).toHaveBeenCalled(); + expect(onConvert).toHaveBeenCalledWith(expect.compare_tolerance(2)); + }); + }); + describe("Custom independent", () => { + let conversion: GenericConversion; + const convert = vi.fn(); + const spend = vi.fn(); + const onConvert = vi.fn(); + beforeAll(() => { + conversion = createIndependentConversion(() => ({ + baseResource, + gainResource, + formula, + currentGain() { + return 10; + }, + actualGain() { + return 5; + }, + currentAt() { + return 100; + }, + nextAt() { + return 1000; + }, + convert, + spend, + onConvert + })); + }); + afterEach(() => { + vi.resetAllMocks(); + }); + test("Calculates currentGain correctly", () => { + expect(unref(conversion.currentGain)).compare_tolerance(10); + }); + test("Calculates actualGain correctly", () => { + expect(unref(conversion.actualGain)).compare_tolerance(5); + }); + test("Calculates currentAt correctly", () => { + expect(unref(conversion.currentAt)).compare_tolerance(100); + }); + test("Calculates nextAt correctly", () => { + expect(unref(conversion.nextAt)).compare_tolerance(1000); + }); + test("Calls convert", () => { + conversion.convert(); + expect(convert).toHaveBeenCalled(); + }); + test("Calls spend and onConvert", () => { + conversion = createIndependentConversion(() => ({ + baseResource, + gainResource, + formula, + spend, + onConvert + })); + conversion.convert(); + expect(spend).toHaveBeenCalled(); + expect(spend).toHaveBeenCalledWith(expect.compare_tolerance(1)); + expect(onConvert).toHaveBeenCalled(); + expect(onConvert).toHaveBeenCalledWith(expect.compare_tolerance(1)); + }); + }); + }); +}); + +describe("Passive generation", () => { + let baseResource: Resource; + let gainResource: Resource; + let formula: (x: GenericFormula) => GenericFormula; + beforeEach(() => { + baseResource = createResource(ref(40)); + gainResource = createResource(ref(1)); + formula = x => x.div(10).sqrt(); + }); + test("Rate is 0", () => { + const conversion = createCumulativeConversion(() => ({ + baseResource, + gainResource, + formula + })); + const layer = createLayer("dummy", () => ({ display: "" })); + setupPassiveGeneration(layer, conversion, 0); + layer.emit("preUpdate", 100); + expect(gainResource.value).compare_tolerance(1); + }); + test("Rate is 1", () => { + const conversion = createCumulativeConversion(() => ({ + baseResource, + gainResource, + formula + })); + const layer = createLayer("dummy", () => ({ display: "" })); + setupPassiveGeneration(layer, conversion); + layer.emit("preUpdate", 100); + expect(gainResource.value).compare_tolerance(201); + }) + test("Rate is 100", () => { + const conversion = createCumulativeConversion(() => ({ + baseResource, + gainResource, + formula + })); + const layer = createLayer("dummy", () => ({ display: "" })); + setupPassiveGeneration(layer, conversion, () => 100); + layer.emit("preUpdate", 100); + expect(gainResource.value).compare_tolerance(20001); + }) + test("Obeys cap", () => { + const conversion = createCumulativeConversion(() => ({ + baseResource, + gainResource, + formula + })); + const layer = createLayer("dummy", () => ({ display: "" })); + setupPassiveGeneration(layer, conversion, 100, () => 100); + layer.emit("preUpdate", 100); + expect(gainResource.value).compare_tolerance(100); + }) +}); From 7693aae4bfbc2c0dc7b6c3bc13cdc646ffcd8647 Mon Sep 17 00:00:00 2001 From: Anthony Lawn <thepaperpilot@gmail.com> Date: Tue, 4 Apr 2023 23:20:31 -0500 Subject: [PATCH 012/134] Minor cleanup of tests --- tests/features/conversions.test.ts | 44 ++++++++++-------------------- 1 file changed, 14 insertions(+), 30 deletions(-) diff --git a/tests/features/conversions.test.ts b/tests/features/conversions.test.ts index fc1d68d..c94df0a 100644 --- a/tests/features/conversions.test.ts +++ b/tests/features/conversions.test.ts @@ -6,7 +6,7 @@ import { } from "features/conversion"; import { createResource, Resource } from "features/resources/resource"; import { GenericFormula } from "game/formulas/types"; -import { createLayer } from "game/layers"; +import { createLayer, GenericLayer } from "game/layers"; import Decimal from "util/bignum"; import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import { ref, unref } from "vue"; @@ -450,53 +450,37 @@ describe("Passive generation", () => { let baseResource: Resource; let gainResource: Resource; let formula: (x: GenericFormula) => GenericFormula; + let conversion: GenericConversion; + let layer: GenericLayer; beforeEach(() => { - baseResource = createResource(ref(40)); + baseResource = createResource(ref(10)); gainResource = createResource(ref(1)); formula = x => x.div(10).sqrt(); - }); - test("Rate is 0", () => { - const conversion = createCumulativeConversion(() => ({ + conversion = createCumulativeConversion(() => ({ baseResource, gainResource, formula })); - const layer = createLayer("dummy", () => ({ display: "" })); + layer = createLayer("dummy", () => ({ display: "" })); + }); + test("Rate is 0", () => { setupPassiveGeneration(layer, conversion, 0); - layer.emit("preUpdate", 100); + layer.emit("preUpdate", 1); expect(gainResource.value).compare_tolerance(1); }); test("Rate is 1", () => { - const conversion = createCumulativeConversion(() => ({ - baseResource, - gainResource, - formula - })); - const layer = createLayer("dummy", () => ({ display: "" })); setupPassiveGeneration(layer, conversion); - layer.emit("preUpdate", 100); - expect(gainResource.value).compare_tolerance(201); + layer.emit("preUpdate", 1); + expect(gainResource.value).compare_tolerance(2); }) test("Rate is 100", () => { - const conversion = createCumulativeConversion(() => ({ - baseResource, - gainResource, - formula - })); - const layer = createLayer("dummy", () => ({ display: "" })); setupPassiveGeneration(layer, conversion, () => 100); - layer.emit("preUpdate", 100); - expect(gainResource.value).compare_tolerance(20001); + layer.emit("preUpdate", 1); + expect(gainResource.value).compare_tolerance(101); }) test("Obeys cap", () => { - const conversion = createCumulativeConversion(() => ({ - baseResource, - gainResource, - formula - })); - const layer = createLayer("dummy", () => ({ display: "" })); setupPassiveGeneration(layer, conversion, 100, () => 100); - layer.emit("preUpdate", 100); + layer.emit("preUpdate", 1); expect(gainResource.value).compare_tolerance(100); }) }); From 08a489d99735edc7cceb9f6b2f01fc61bb0997fb Mon Sep 17 00:00:00 2001 From: Anthony Lawn <thepaperpilot@gmail.com> Date: Tue, 4 Apr 2023 23:45:56 -0500 Subject: [PATCH 013/134] Updated changelog --- CHANGELOG.md | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b2afda6..b6e4c8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,9 +9,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - **BREAKING** New requirements system - Replaces many features' existing requirements with new generic form -- Formulas, which can be used to calculate buy max for you -- Action feature -- ETA util +- **BREAKING** Formulas, which can be used to calculate buy max for you + - Requirements can use them so repeatables and challenges can be "buy max" without any extra effort + - Conversions now use formulas instead of the old scaling functions system, allowing for arbitrary functions that are much easier to follow + - There's a utility for converting modifiers to formulas, thus replacing things like the gain modifier on conversions +- Action feature, which is a clickable with a cooldown +- ETA util (calculates time until a specific amount of a resource, based on its current gain rate) - createCollapsibleMilestones util - deleteLowerSaves util - Minimized layers can now display a component @@ -35,6 +38,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Tweaked modifier displays, incl showing negative modifiers in red - Hotkeys now appear on key graphic - Mofifier sections now accept computable strings for title and subtitle +- Every VueFeature's `[Component]` property is now typed as GenericComponent +- Make errors throw objects instead of strings - Updated b_e ### Fixed - NaN detection stopped working @@ -54,15 +59,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Tabs could sometimes not update correctly - offlineTime not capping properly - Tooltips being user-selectable +- Pinnable tooltips causing stack overflow - Workflows not working with submodules - Various minor typing issues +### Removed +- **BREAKING** Removed milestones (achievements now have small and large displays) ### Documented -- requirements.tsx -- formulas.tsx -- repeatables.tsx -### Tests -- requirements +- every single feature - formulas +- requirements +### Tests +- conversions +- formulas +- requirements Contributors: thepaperpilot, escapee, adsaf, ducdat From 73d060aeaf818246ec71b10d8f0930b4589f0086 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 5 Apr 2023 00:49:17 -0500 Subject: [PATCH 014/134] Fix some incorrect tags --- src/game/formulas/formulas.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index 9806580..d0a0f81 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -317,8 +317,8 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { // TODO add integration support to step-wise functions /** - * Creates a step-wise formula. After {@ref start} the formula will have an additional modifier. - * This function assumes the incoming {@ref value} will be continuous and monotonically increasing. + * Creates a step-wise formula. After {@link start} the formula will have an additional modifier. + * This function assumes the incoming {@link value} will be continuous and monotonically increasing. * @param value The value before applying the step * @param start The value at which to start applying the step * @param formulaModifier How this step should modify the formula. The incoming value will be the unmodified formula value _minus the start value_. So for example if an incoming formula evaluates to 200 and has a step that starts at 150, the formulaModifier would be given 50 as the parameter @@ -1356,7 +1356,7 @@ export function printFormula(formula: FormulaSource): string { } /** - * Utility for calculating the maximum amount of purchases possible with a given formula and resource. If {@ref spendResources} is changed to false, the calculation will be much faster with higher numbers. + * Utility for calculating the maximum amount of purchases possible with a given formula and resource. If {@link spendResources} is changed to false, the calculation will be much faster with higher numbers. * @param formula The formula to use for calculating buy max from * @param resource The resource used when purchasing (is only read from) * @param spendResources Whether or not to count spent resources on each purchase or not. If true, costs will be approximated for performance, skewing towards fewer purchases @@ -1424,7 +1424,7 @@ export function calculateMaxAffordable( } /** - * Utility for calculating the cost of a formula for a given amount of purchases. If {@ref spendResources} is changed to false, the calculation will be much faster with higher numbers. + * Utility for calculating the cost of a formula for a given amount of purchases. If {@link spendResources} is changed to false, the calculation will be much faster with higher numbers. * @param formula The formula to use for calculating buy max from * @param amountToBuy The amount of purchases to calculate the cost for * @param spendResources Whether or not to count spent resources on each purchase or not. If true, costs will be approximated for performance, skewing towards higher cost From d0281e64bf02cf4bd4f21f73ba654157e44a3a21 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 5 Apr 2023 07:43:48 -0500 Subject: [PATCH 015/134] Documented modifierToFormula --- src/data/common.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/data/common.tsx b/src/data/common.tsx index d163f72..3246135 100644 --- a/src/data/common.tsx +++ b/src/data/common.tsx @@ -492,6 +492,11 @@ export function createFormulaPreview( }); } +/** + * Utility for converting a modifier into a formula. Takes the input for this formula as the base parameter. + * @param modifier The modifier to convert to the formula + * @param base An existing formula or processed DecimalSource that will be the input to the formula + */ export function modifierToFormula<T extends GenericFormula>( modifier: WithRequired<Modifier, "revert">, base: T From 736fa57c9f53ab43cfa65edd5023112920be47b3 Mon Sep 17 00:00:00 2001 From: Seth Posner <smartseth@hotmail.com> Date: Wed, 5 Apr 2023 09:51:43 -0700 Subject: [PATCH 016/134] Add line about decorators to changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6e4c8d..664367e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Requirements can use them so repeatables and challenges can be "buy max" without any extra effort - Conversions now use formulas instead of the old scaling functions system, allowing for arbitrary functions that are much easier to follow - There's a utility for converting modifiers to formulas, thus replacing things like the gain modifier on conversions +- Feature decorators, which simplify the process of adding extra values to features - Action feature, which is a clickable with a cooldown - ETA util (calculates time until a specific amount of a resource, based on its current gain rate) - createCollapsibleMilestones util From 70cda5fa8ad3d55f1d9376911bd76fbc9c740f87 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 5 Apr 2023 19:42:02 -0500 Subject: [PATCH 017/134] Fix some typing --- src/features/particles/particles.tsx | 2 +- src/features/tooltips/tooltip.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/features/particles/particles.tsx b/src/features/particles/particles.tsx index 549ccee..8edaab1 100644 --- a/src/features/particles/particles.tsx +++ b/src/features/particles/particles.tsx @@ -73,7 +73,7 @@ export function createParticles<T extends ParticlesOptions>( const particles = optionsFunc?.() ?? ({} as ReturnType<NonNullable<typeof optionsFunc>>); particles.id = getUniqueID("particles-"); particles.type = ParticlesType; - particles[Component] = ParticlesComponent; + particles[Component] = ParticlesComponent as GenericComponent; particles.app = shallowRef(null); particles.addEmitter = (config: EmitterConfigV3): Promise<Emitter> => { diff --git a/src/features/tooltips/tooltip.ts b/src/features/tooltips/tooltip.ts index 55985f4..129bd16 100644 --- a/src/features/tooltips/tooltip.ts +++ b/src/features/tooltips/tooltip.ts @@ -1,4 +1,4 @@ -import type { CoercableComponent, Replace, StyleValue } from "features/feature"; +import type { CoercableComponent, GenericComponent, Replace, StyleValue } from "features/feature"; import { Component, GatherProps, setDefault } from "features/feature"; import { deletePersistent, Persistent, persistent } from "game/persistence"; import { Direction } from "util/common"; @@ -76,7 +76,7 @@ export type GenericTooltip = Replace< /** * Creates a tooltip on the given element with the given options. * @param element The renderable feature to display the tooltip on. - * @param optionsFunc Clickable options. + * @param options Tooltip options. */ export function addTooltip<T extends TooltipOptions>( element: VueFeature, @@ -108,7 +108,7 @@ export function addTooltip<T extends TooltipOptions>( } } const elementComponent = element[Component]; - element[Component] = TooltipComponent; + element[Component] = TooltipComponent as GenericComponent; const elementGatherProps = element[GatherProps].bind(element); element[GatherProps] = function gatherTooltipProps(this: GenericTooltip) { const { display, classes, style, direction, xoffset, yoffset, pinned } = this; From 77592ea0db46d7b5eff4dcdda58713f332212499 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Tue, 11 Apr 2023 07:46:47 -0500 Subject: [PATCH 018/134] Fixed some renames not being reflected in changelog --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6e4c8d..f01665b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,11 +15,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - There's a utility for converting modifiers to formulas, thus replacing things like the gain modifier on conversions - Action feature, which is a clickable with a cooldown - ETA util (calculates time until a specific amount of a resource, based on its current gain rate) -- createCollapsibleMilestones util +- createCollapsibleAchievements util - deleteLowerSaves util - Minimized layers can now display a component - submitOnBlur property to Text fields -- showPopups property to Milestones +- showPopups property to achievements - Mouse/touch events to more onClick listeners - Example hotkey to starting layer - Schema for projInfo.json From 8c0a0c4410d15a4153ffc35f5dcb8c5bd1c1d787 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Tue, 11 Apr 2023 07:52:18 -0500 Subject: [PATCH 019/134] Made board nodes support booleans for visibility --- src/features/boards/BoardNode.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/features/boards/BoardNode.vue b/src/features/boards/BoardNode.vue index a153afd..931c6ee 100644 --- a/src/features/boards/BoardNode.vue +++ b/src/features/boards/BoardNode.vue @@ -170,7 +170,7 @@ import themes from "data/themes"; import type { BoardNode, GenericBoardNodeAction, GenericNodeType } from "features/boards/board"; import { ProgressDisplay, getNodeProperty, Shape } from "features/boards/board"; -import { Visibility } from "features/feature"; +import { isVisible } from "features/feature"; import settings from "game/settings"; import { computed, ref, toRefs, unref, watch } from "vue"; @@ -210,8 +210,8 @@ watch(isDraggable, value => { const actions = computed(() => { const node = unref(props.node); - return getNodeProperty(props.nodeType.value.actions, node)?.filter( - action => getNodeProperty(action.visibility, node) !== Visibility.None + return getNodeProperty(props.nodeType.value.actions, node)?.filter(action => + isVisible(getNodeProperty(action.visibility, node)) ); }); From c65dc777ccc7e651a93355111184f146342ac70f Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 15 Apr 2023 09:39:16 -0500 Subject: [PATCH 020/134] Reworked flow for converting modifiers to formulas, and renamed revert to invert --- CHANGELOG.md | 2 +- src/data/common.tsx | 26 ------------------------- src/features/action.tsx | 4 ++-- src/game/modifiers.tsx | 43 ++++++++++++++++++++++++++++------------- 4 files changed, 33 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f01665b..03f3cf5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **BREAKING** Formulas, which can be used to calculate buy max for you - Requirements can use them so repeatables and challenges can be "buy max" without any extra effort - Conversions now use formulas instead of the old scaling functions system, allowing for arbitrary functions that are much easier to follow - - There's a utility for converting modifiers to formulas, thus replacing things like the gain modifier on conversions + - Modifiers have a new getFormula property - Action feature, which is a clickable with a cooldown - ETA util (calculates time until a specific amount of a resource, based on its current gain rate) - createCollapsibleAchievements util diff --git a/src/data/common.tsx b/src/data/common.tsx index 3246135..8050818 100644 --- a/src/data/common.tsx +++ b/src/data/common.tsx @@ -491,29 +491,3 @@ export function createFormulaPreview( return formatSmall(formula.evaluate()); }); } - -/** - * Utility for converting a modifier into a formula. Takes the input for this formula as the base parameter. - * @param modifier The modifier to convert to the formula - * @param base An existing formula or processed DecimalSource that will be the input to the formula - */ -export function modifierToFormula<T extends GenericFormula>( - modifier: WithRequired<Modifier, "revert">, - base: T -): T; -export function modifierToFormula(modifier: Modifier, base: FormulaSource): GenericFormula; -export function modifierToFormula(modifier: Modifier, base: FormulaSource) { - return new Formula({ - inputs: [base], - evaluate: val => modifier.apply(val), - invert: - "revert" in modifier && modifier.revert != null - ? (val, lhs) => { - if (lhs instanceof Formula && lhs.hasVariable()) { - return lhs.invert(modifier.revert!(val)); - } - throw new Error("Could not invert due to no input being a variable"); - } - : undefined - }); -} diff --git a/src/features/action.tsx b/src/features/action.tsx index afd8021..46f0e72 100644 --- a/src/features/action.tsx +++ b/src/features/action.tsx @@ -36,7 +36,7 @@ import { ClickableOptions } from "./clickables/clickable"; export const ActionType = Symbol("Action"); /** - * An object that configures a {@link Action}. + * An object that configures an {@link Action}. */ export interface ActionOptions extends Omit<ClickableOptions, "onClick" | "onHold"> { /** The cooldown during which the action cannot be performed again, in seconds. */ @@ -71,7 +71,7 @@ export interface BaseAction { [GatherProps]: () => Record<string, unknown>; } -/** An object that represens a feature that can be clicked upon, and then have a cooldown before they can be clicked again. */ +/** An object that represents a feature that can be clicked upon, and then has a cooldown before it can be clicked again. */ export type Action<T extends ActionOptions> = Replace< T & BaseAction, { diff --git a/src/game/modifiers.tsx b/src/game/modifiers.tsx index fd96c77..c17422b 100644 --- a/src/game/modifiers.tsx +++ b/src/game/modifiers.tsx @@ -10,6 +10,8 @@ import { convertComputable } from "util/computed"; import { createLazyProxy } from "util/proxies"; import { renderJSX } from "util/vue"; import { computed, unref } from "vue"; +import Formula from "./formulas/formulas"; +import { FormulaSource, GenericFormula } from "./formulas/types"; /** * An object that can be used to apply or unapply some modification to a number. @@ -21,7 +23,9 @@ export interface Modifier { /** Applies some operation on the input and returns the result. */ apply: (gain: DecimalSource) => DecimalSource; /** Reverses the operation applied by the apply property. Required by some features. */ - revert?: (gain: DecimalSource) => DecimalSource; + invert?: (gain: DecimalSource) => DecimalSource; + /** Get a formula for this modifier. Required by some features. */ + getFormula?: (gain: FormulaSource) => GenericFormula; /** * Whether or not this modifier should be considered enabled. * Typically for use with modifiers passed into {@link createSequentialModifier}. @@ -39,11 +43,11 @@ export interface Modifier { */ export type ModifierFromOptionalParams<T, S> = T extends undefined ? S extends undefined - ? Omit<WithRequired<Modifier, "revert">, "description" | "enabled"> - : Omit<WithRequired<Modifier, "revert" | "enabled">, "description"> + ? Omit<WithRequired<Modifier, "invert">, "description" | "enabled"> + : Omit<WithRequired<Modifier, "invert" | "enabled">, "description"> : S extends undefined - ? Omit<WithRequired<Modifier, "revert" | "description">, "enabled"> - : WithRequired<Modifier, "revert" | "enabled" | "description">; + ? Omit<WithRequired<Modifier, "invert" | "description">, "enabled"> + : WithRequired<Modifier, "invert" | "enabled" | "description">; /** An object that configures an additive modifier via {@link createAdditiveModifier}. */ export interface AdditiveModifierOptions { @@ -72,7 +76,8 @@ export function createAdditiveModifier<T extends AdditiveModifierOptions>( const processedEnabled = enabled == null ? undefined : convertComputable(enabled); return { apply: (gain: DecimalSource) => Decimal.add(gain, unref(processedAddend)), - revert: (gain: DecimalSource) => Decimal.sub(gain, unref(processedAddend)), + invert: (gain: DecimalSource) => Decimal.sub(gain, unref(processedAddend)), + getFormula: (gain: FormulaSource) => Formula.add(gain, processedAddend), enabled: processedEnabled, description: description == null @@ -133,7 +138,8 @@ export function createMultiplicativeModifier<T extends MultiplicativeModifierOpt const processedEnabled = enabled == null ? undefined : convertComputable(enabled); return { apply: (gain: DecimalSource) => Decimal.times(gain, unref(processedMultiplier)), - revert: (gain: DecimalSource) => Decimal.div(gain, unref(processedMultiplier)), + invert: (gain: DecimalSource) => Decimal.div(gain, unref(processedMultiplier)), + getFormula: (gain: FormulaSource) => Formula.times(gain, processedMultiplier), enabled: processedEnabled, description: description == null @@ -206,7 +212,7 @@ export function createExponentialModifier<T extends ExponentialModifierOptions>( } return result; }, - revert: (gain: DecimalSource) => { + invert: (gain: DecimalSource) => { let result = gain; if (supportLowNumbers) { result = Decimal.add(result, 1); @@ -217,6 +223,10 @@ export function createExponentialModifier<T extends ExponentialModifierOptions>( } return result; }, + getFormula: (gain: FormulaSource) => + supportLowNumbers + ? Formula.add(gain, 1).pow(processedExponent).sub(1) + : Formula.pow(gain, processedExponent), enabled: processedEnabled, description: description == null @@ -259,9 +269,9 @@ export function createExponentialModifier<T extends ExponentialModifierOptions>( */ export function createSequentialModifier< T extends Modifier[], - S = T extends WithRequired<Modifier, "revert">[] - ? WithRequired<Modifier, "description" | "revert"> - : Omit<WithRequired<Modifier, "description">, "revert"> + S = T extends WithRequired<Modifier, "invert">[] + ? WithRequired<Modifier, "description" | "invert"> + : Omit<WithRequired<Modifier, "description">, "invert"> >(modifiersFunc: () => T): S { return createLazyProxy(() => { const modifiers = modifiersFunc(); @@ -271,12 +281,19 @@ export function createSequentialModifier< modifiers .filter(m => unref(m.enabled) !== false) .reduce((gain, modifier) => modifier.apply(gain), gain), - revert: modifiers.every(m => m.revert != null) + invert: modifiers.every(m => m.invert != null) ? (gain: DecimalSource) => modifiers .filter(m => unref(m.enabled) !== false) // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - .reduceRight((gain, modifier) => modifier.revert!(gain), gain) + .reduceRight((gain, modifier) => modifier.invert!(gain), gain) + : undefined, + getFormula: modifiers.every(m => m.getFormula != null) + ? (gain: FormulaSource) => + modifiers + .filter(m => unref(m.enabled) !== false) + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + .reduce((acc, curr) => curr.getFormula!(acc), gain) : undefined, enabled: computed(() => modifiers.filter(m => unref(m.enabled) !== false).length > 0), description: jsx(() => ( From 1928be236d87e14e58e8cf65b7705a5cbd0e0d9d Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 15 Apr 2023 22:43:42 -0500 Subject: [PATCH 021/134] Add tests for modifiers --- CHANGELOG.md | 1 + src/game/modifiers.tsx | 38 +- .../game/__snapshots__/modifiers.test.ts.snap | 14089 ++++++++++++++++ tests/game/modifiers.test.ts | 411 + 4 files changed, 14522 insertions(+), 17 deletions(-) create mode 100644 tests/game/__snapshots__/modifiers.test.ts.snap create mode 100644 tests/game/modifiers.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 03f3cf5..951929d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -71,6 +71,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Tests - conversions - formulas +- modifiers - requirements Contributors: thepaperpilot, escapee, adsaf, ducdat diff --git a/src/game/modifiers.tsx b/src/game/modifiers.tsx index c17422b..74692b0 100644 --- a/src/game/modifiers.tsx +++ b/src/game/modifiers.tsx @@ -43,20 +43,20 @@ export interface Modifier { */ export type ModifierFromOptionalParams<T, S> = T extends undefined ? S extends undefined - ? Omit<WithRequired<Modifier, "invert">, "description" | "enabled"> - : Omit<WithRequired<Modifier, "invert" | "enabled">, "description"> + ? Omit<WithRequired<Modifier, "invert" | "getFormula">, "description" | "enabled"> + : Omit<WithRequired<Modifier, "invert" | "enabled" | "getFormula">, "description"> : S extends undefined - ? Omit<WithRequired<Modifier, "invert" | "description">, "enabled"> - : WithRequired<Modifier, "invert" | "enabled" | "description">; + ? Omit<WithRequired<Modifier, "invert" | "description" | "getFormula">, "enabled"> + : WithRequired<Modifier, "invert" | "enabled" | "description" | "getFormula">; /** An object that configures an additive modifier via {@link createAdditiveModifier}. */ export interface AdditiveModifierOptions { /** The amount to add to the input value. */ addend: Computable<DecimalSource>; /** Description of what this modifier is doing. */ - description?: Computable<CoercableComponent> | undefined; + description?: Computable<CoercableComponent>; /** A computable that will be processed and passed directly into the returned modifier. */ - enabled?: Computable<boolean> | undefined; + enabled?: Computable<boolean>; /** Determines if numbers larger or smaller than 0 should be displayed as red. */ smallerIsBetter?: boolean; } @@ -295,17 +295,21 @@ export function createSequentialModifier< // eslint-disable-next-line @typescript-eslint/no-non-null-assertion .reduce((acc, curr) => curr.getFormula!(acc), gain) : undefined, - enabled: computed(() => modifiers.filter(m => unref(m.enabled) !== false).length > 0), - description: jsx(() => ( - <> - {( - modifiers - .filter(m => unref(m.enabled) !== false) - .map(m => unref(m.description)) - .filter(d => d) as CoercableComponent[] - ).map(renderJSX)} - </> - )) + enabled: modifiers.some(m => m.enabled != null) + ? computed(() => modifiers.filter(m => unref(m.enabled) !== false).length > 0) + : undefined, + description: modifiers.some(m => m.description != null) + ? jsx(() => ( + <> + {( + modifiers + .filter(m => unref(m.enabled) !== false) + .map(m => unref(m.description)) + .filter(d => d) as CoercableComponent[] + ).map(renderJSX)} + </> + )) + : undefined }; }) as unknown as S; } diff --git a/tests/game/__snapshots__/modifiers.test.ts.snap b/tests/game/__snapshots__/modifiers.test.ts.snap new file mode 100644 index 0000000..2875004 --- /dev/null +++ b/tests/game/__snapshots__/modifiers.test.ts.snap @@ -0,0 +1,14089 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Additive Modifiers > applies description correctly > with description 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Additive Modifiers > applies smallerIsBetter correctly > with smallerIsBetter true > negative value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "", + "-5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Additive Modifiers > applies smallerIsBetter correctly > with smallerIsBetter true > positive value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Additive Modifiers > applies smallerIsBetter correctly > with smallerIsBetter true > zero value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Additive Modifiers > applies smallerIsBetter correctly > without smallerIsBetter false > negative value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "", + "-5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Additive Modifiers > applies smallerIsBetter correctly > without smallerIsBetter false > positive value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Additive Modifiers > applies smallerIsBetter correctly > without smallerIsBetter false > zero value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Create modifier sections > No optional values 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test", + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "h3", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "br", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Base", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "1.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test Desc", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "hr", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "Total", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "6.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "style": { + "--unit": "", + }, + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Create modifier sections > With base 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test", + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "h3", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "br", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Base", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "10.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test Desc", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "hr", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "Total", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "15.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "style": { + "--unit": "", + }, + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Create modifier sections > With base 2`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test", + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "h3", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "br", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Based on", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "1.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test Desc", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "hr", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "Total", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "6.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "style": { + "--unit": "", + }, + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Create modifier sections > With base 3`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test", + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "h3", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "br", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Based on", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "1.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test Desc", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "hr", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "Total", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "6.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "style": { + "--unit": "", + }, + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Create modifier sections > With baseText 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test", + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "h3", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "br", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Based on", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "1.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test Desc", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "hr", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "Total", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "6.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "style": { + "--unit": "", + }, + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Create modifier sections > With everything 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test", + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": " (", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "Subtitle", + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": ")", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "subtitle", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "h3", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "br", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Based on", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "10.00", + "/s", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test Desc", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "hr", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "Total", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "15.00", + "/s", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "style": { + "--unit": "", + }, + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = false 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test", + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "h3", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "br", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Base", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "1.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test Desc", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "", + "-5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "hr", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "Total", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "-4.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "style": { + "--unit": "", + }, + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = false 2`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test", + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "h3", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "br", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Base", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "1.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test Desc", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "hr", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "Total", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "1.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "style": { + "--unit": "", + }, + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = false 3`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test", + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "h3", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "br", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Base", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "1.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test Desc", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "hr", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "Total", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "6.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "style": { + "--unit": "", + }, + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = true 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test", + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "h3", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "br", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Base", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "1.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test Desc", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "", + "-5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "hr", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "Total", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "-4.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "style": { + "--unit": "", + }, + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = true 2`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test", + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "h3", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "br", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Base", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "1.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test Desc", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "hr", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "Total", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "1.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "style": { + "--unit": "", + }, + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = true 3`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test", + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "h3", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "br", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Base", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "1.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test Desc", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "hr", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "Total", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "6.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "style": { + "--unit": "", + }, + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Create modifier sections > With subtitle 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test", + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": " (", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "Subtitle", + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": ")", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "subtitle", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "h3", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "br", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Base", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "1.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test Desc", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "hr", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "Total", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "6.00", + undefined, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "style": { + "--unit": "", + }, + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Create modifier sections > With unit 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test", + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "h3", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "br", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Base", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "1.00", + "/s", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "Test Desc", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": null, + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 1, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "hr", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "Total", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "6.00", + "/s", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "style": { + "--unit": "", + }, + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Exponential Modifiers > applies description correctly > with description 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "^", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smallerIsBetter true > negative value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "^", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "-5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smallerIsBetter true > positive value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "^", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smallerIsBetter true > zero value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "^", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Exponential Modifiers > applies smallerIsBetter correctly > without smallerIsBetter false > negative value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "^", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "-5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Exponential Modifiers > applies smallerIsBetter correctly > without smallerIsBetter false > positive value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "^", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Exponential Modifiers > applies smallerIsBetter correctly > without smallerIsBetter false > zero value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "^", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Multiplicative Modifiers > applies description correctly > with description 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "×", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with smallerIsBetter true > negative value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "×", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "-5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with smallerIsBetter true > positive value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "×", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with smallerIsBetter true > zero value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "×", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without smallerIsBetter false > negative value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "×", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "-5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without smallerIsBetter false > positive value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "×", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without smallerIsBetter false > zero value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "×", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", +} +`; + +exports[`Sequential Modifiers > applies description correctly > with both 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "×", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), +} +`; + +exports[`Sequential Modifiers > applies description correctly > with description 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "×", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "^", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), +} +`; + +exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > negative value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "", + "-5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "", + "-5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), +} +`; + +exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > positive value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), +} +`; + +exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > zero value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), +} +`; + +exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smallerIsBetter true > negative value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "", + "-5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "×", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "-5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "^", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "-5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), +} +`; + +exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smallerIsBetter true > positive value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "×", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "^", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), +} +`; + +exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smallerIsBetter true > zero value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "×", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "^", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), +} +`; + +exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smallerIsBetter false > negative value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "", + "-5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "×", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "-5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "^", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "-5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), +} +`; + +exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smallerIsBetter false > positive value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "×", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "^", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "5.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), +} +`; + +exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smallerIsBetter false > zero value 1`] = ` +{ + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "+", + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "×", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + "test", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), + }, + null, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-description", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": [ + { + "__v_isVNode": true, + "__v_skip": true, + "anchor": null, + "appContext": null, + "children": "^", + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 8, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Text), + }, + "0.00", + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-amount", + "style": "color: var(--danger)", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "span", + }, + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": { + "class": "modifier-container", + }, + "ref": null, + "scopeId": null, + "shapeFlag": 17, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": "div", + }, + ], + ], + "component": null, + "dirs": null, + "dynamicChildren": null, + "dynamicProps": null, + "el": null, + "key": null, + "patchFlag": 0, + "props": null, + "ref": null, + "scopeId": null, + "shapeFlag": 16, + "slotScopeIds": null, + "ssContent": null, + "ssFallback": null, + "staticCount": 0, + "suspense": null, + "target": null, + "targetAnchor": null, + "transition": null, + "type": Symbol(Fragment), +} +`; diff --git a/tests/game/modifiers.test.ts b/tests/game/modifiers.test.ts new file mode 100644 index 0000000..d5e186d --- /dev/null +++ b/tests/game/modifiers.test.ts @@ -0,0 +1,411 @@ +import { CoercableComponent, JSXFunction } from "features/feature"; +import Formula, { printFormula } from "game/formulas/formulas"; +import { + createAdditiveModifier, + createExponentialModifier, + createModifierSection, + createMultiplicativeModifier, + createSequentialModifier, + Modifier +} from "game/modifiers"; +import Decimal, { DecimalSource } from "util/bignum"; +import { WithRequired } from "util/common"; +import { Computable } from "util/computed"; +import { beforeAll, describe, expect, test } from "vitest"; +import { Ref, ref, unref } from "vue"; +import "../utils"; + +export type ModifierConstructorOptions = { + [S in "addend" | "multiplier" | "exponent"]: Computable<DecimalSource>; +} & { + description?: Computable<CoercableComponent>; + enabled?: Computable<boolean>; + smallerIsBetter?: boolean; +}; + +function testModifiers< + T extends "addend" | "multiplier" | "exponent", + S extends ModifierConstructorOptions +>( + modifierConstructor: (optionsFunc: () => S) => WithRequired<Modifier, "invert" | "getFormula">, + property: T, + operation: (lhs: DecimalSource, rhs: DecimalSource) => DecimalSource +) { + // Util because adding [property] messes up typing + function createModifier( + value: Computable<DecimalSource>, + options: Partial<ModifierConstructorOptions> = {} + ): WithRequired<Modifier, "invert" | "getFormula"> { + options[property] = value; + return modifierConstructor(() => options as S); + } + + describe("operations", () => { + let modifier: WithRequired<Modifier, "invert" | "getFormula">; + beforeAll(() => { + modifier = createModifier(ref(5)); + }); + + test("Applies correctly", () => + expect(modifier.apply(10)).compare_tolerance(operation(10, 5))); + test("Inverts correctly", () => + expect(modifier.invert(operation(10, 5))).compare_tolerance(10)); + test("getFormula returns the right formula", () => { + const value = ref(10); + expect(printFormula(modifier.getFormula(Formula.variable(value)))).toBe( + `${operation.name}(x, 5.00)` + ); + }); + }); + + describe("applies description correctly", () => { + test("without description", () => expect(createModifier(0).description).toBeUndefined()); + test("with description", () => { + const desc = createModifier(0, { description: "test" }).description; + expect(desc).not.toBeUndefined(); + expect((desc as JSXFunction)()).toMatchSnapshot(); + }); + }); + + describe("applies enabled correctly", () => { + test("without enabled", () => expect(createModifier(0).enabled).toBeUndefined()); + test("with enabled", () => { + const enabled = ref(false); + const modifier = createModifier(5, { enabled }); + expect(modifier.enabled).toBe(enabled); + }); + }); + + describe("applies smallerIsBetter correctly", () => { + describe("without smallerIsBetter false", () => { + test("negative value", () => + expect( + ( + createModifier(-5, { description: "test", smallerIsBetter: false }) + .description as JSXFunction + )() + ).toMatchSnapshot()); + test("zero value", () => + expect( + ( + createModifier(0, { description: "test", smallerIsBetter: false }) + .description as JSXFunction + )() + ).toMatchSnapshot()); + test("positive value", () => + expect( + ( + createModifier(5, { description: "test", smallerIsBetter: false }) + .description as JSXFunction + )() + ).toMatchSnapshot()); + }); + describe("with smallerIsBetter true", () => { + test("negative value", () => + expect( + ( + createModifier(-5, { description: "test", smallerIsBetter: true }) + .description as JSXFunction + )() + ).toMatchSnapshot()); + test("zero value", () => + expect( + ( + createModifier(0, { description: "test", smallerIsBetter: true }) + .description as JSXFunction + )() + ).toMatchSnapshot()); + test("positive value", () => + expect( + ( + createModifier(5, { description: "test", smallerIsBetter: true }) + .description as JSXFunction + )() + ).toMatchSnapshot()); + }); + }); +} + +describe("Additive Modifiers", () => testModifiers(createAdditiveModifier, "addend", Decimal.add)); +describe("Multiplicative Modifiers", () => + testModifiers(createMultiplicativeModifier, "multiplier", Decimal.mul)); +describe("Exponential Modifiers", () => + testModifiers(createExponentialModifier, "exponent", Decimal.pow)); + +describe("Sequential Modifiers", () => { + function createModifier( + value: Computable<DecimalSource>, + options: Partial<ModifierConstructorOptions> = {} + ): WithRequired<Modifier, "invert" | "getFormula"> { + return createSequentialModifier(() => [ + createAdditiveModifier(() => ({ ...options, addend: value })), + createMultiplicativeModifier(() => ({ ...options, multiplier: value })), + createExponentialModifier(() => ({ ...options, exponent: value })) + ]); + } + + describe("operations", () => { + let modifier: WithRequired<Modifier, "invert" | "getFormula">; + beforeAll(() => { + modifier = createModifier(5); + }); + + test("Applies correctly", () => + expect(modifier.apply(10)).compare_tolerance(Decimal.add(10, 5).times(5).pow(5))); + test("Inverts correctly", () => + expect(modifier.invert(Decimal.add(10, 5).times(5).pow(5))).compare_tolerance(10)); + test("getFormula returns the right formula", () => { + const value = ref(10); + expect(printFormula(modifier.getFormula(Formula.variable(value)))).toBe( + `pow(mul(add(x, 5.00), 5.00), 5.00)` + ); + }); + }); + + describe("applies description correctly", () => { + test("without description", () => expect(createModifier(0).description).toBeUndefined()); + test("with description", () => { + const desc = createModifier(0, { description: "test" }).description; + expect(desc).not.toBeUndefined(); + expect((desc as JSXFunction)()).toMatchSnapshot(); + }); + test("with both", () => { + const desc = createSequentialModifier(() => [ + createAdditiveModifier(() => ({ addend: 0 })), + createMultiplicativeModifier(() => ({ multiplier: 0, description: "test" })) + ]).description; + expect(desc).not.toBeUndefined(); + expect((desc as JSXFunction)()).toMatchSnapshot(); + }); + }); + + describe("applies enabled correctly", () => { + test("without enabled", () => expect(createModifier(0).enabled).toBeUndefined()); + test("with enabled", () => { + const enabled = ref(false); + const modifier = createModifier(5, { enabled }); + expect(modifier.enabled).not.toBeUndefined(); + expect(unref(modifier.enabled)).toBe(false); + enabled.value = true; + expect(unref(modifier.enabled)).toBe(true); + }); + test("with both", () => { + const enabled = ref(false); + const modifier = createSequentialModifier(() => [ + createAdditiveModifier(() => ({ addend: 0 })), + createMultiplicativeModifier(() => ({ multiplier: 0, enabled })) + ]); + expect(modifier.enabled).not.toBeUndefined(); + // So long as one is true or undefined, enable should be true + expect(unref(modifier.enabled)).toBe(true); + }); + }); + + describe("applies smallerIsBetter correctly", () => { + describe("without smallerIsBetter false", () => { + test("negative value", () => + expect( + ( + createModifier(-5, { description: "test", smallerIsBetter: false }) + .description as JSXFunction + )() + ).toMatchSnapshot()); + test("zero value", () => + expect( + ( + createModifier(0, { description: "test", smallerIsBetter: false }) + .description as JSXFunction + )() + ).toMatchSnapshot()); + test("positive value", () => + expect( + ( + createModifier(5, { description: "test", smallerIsBetter: false }) + .description as JSXFunction + )() + ).toMatchSnapshot()); + }); + describe("with smallerIsBetter true", () => { + test("negative value", () => + expect( + ( + createModifier(-5, { description: "test", smallerIsBetter: true }) + .description as JSXFunction + )() + ).toMatchSnapshot()); + test("zero value", () => + expect( + ( + createModifier(0, { description: "test", smallerIsBetter: true }) + .description as JSXFunction + )() + ).toMatchSnapshot()); + test("positive value", () => + expect( + ( + createModifier(5, { description: "test", smallerIsBetter: true }) + .description as JSXFunction + )() + ).toMatchSnapshot()); + }); + describe("with both", () => { + let value: Ref<DecimalSource>; + let modifier: Modifier; + beforeAll(() => { + value = ref(0); + modifier = createSequentialModifier(() => [ + createAdditiveModifier(() => ({ + addend: value, + description: "test", + smallerIsBetter: true + })), + createAdditiveModifier(() => ({ + addend: value, + description: "test", + smallerIsBetter: false + })) + ]); + }); + test("negative value", () => { + value.value = -5; + expect((modifier.description as JSXFunction)()).toMatchSnapshot(); + }); + test("zero value", () => { + value.value = 0; + expect((modifier.description as JSXFunction)()).toMatchSnapshot(); + }); + test("positive value", () => { + value.value = 5; + expect((modifier.description as JSXFunction)()).toMatchSnapshot(); + }); + }); + }); +}); + +describe("Create modifier sections", () => { + test("No optional values", () => + expect( + createModifierSection({ + title: "Test", + modifier: createAdditiveModifier(() => ({ addend: 5, description: "Test Desc" })) + }) + ).toMatchSnapshot()); + test("With subtitle", () => + expect( + createModifierSection({ + title: "Test", + subtitle: "Subtitle", + modifier: createAdditiveModifier(() => ({ addend: 5, description: "Test Desc" })) + }) + ).toMatchSnapshot()); + test("With base", () => + expect( + createModifierSection({ + title: "Test", + modifier: createAdditiveModifier(() => ({ addend: 5, description: "Test Desc" })), + base: 10 + }) + ).toMatchSnapshot()); + test("With unit", () => + expect( + createModifierSection({ + title: "Test", + modifier: createAdditiveModifier(() => ({ addend: 5, description: "Test Desc" })), + unit: "/s" + }) + ).toMatchSnapshot()); + test("With base", () => + expect( + createModifierSection({ + title: "Test", + modifier: createAdditiveModifier(() => ({ addend: 5, description: "Test Desc" })), + baseText: "Based on" + }) + ).toMatchSnapshot()); + test("With baseText", () => + expect( + createModifierSection({ + title: "Test", + modifier: createAdditiveModifier(() => ({ addend: 5, description: "Test Desc" })), + baseText: "Based on" + }) + ).toMatchSnapshot()); + describe("With smallerIsBetter", () => { + test("smallerIsBetter = false", () => { + expect( + createModifierSection({ + title: "Test", + modifier: createAdditiveModifier(() => ({ + addend: -5, + description: "Test Desc" + })), + smallerIsBetter: false + }) + ).toMatchSnapshot(); + expect( + createModifierSection({ + title: "Test", + modifier: createAdditiveModifier(() => ({ + addend: 0, + description: "Test Desc" + })), + smallerIsBetter: false + }) + ).toMatchSnapshot(); + expect( + createModifierSection({ + title: "Test", + modifier: createAdditiveModifier(() => ({ + addend: 5, + description: "Test Desc" + })), + smallerIsBetter: false + }) + ).toMatchSnapshot(); + }); + test("smallerIsBetter = true", () => { + expect( + createModifierSection({ + title: "Test", + modifier: createAdditiveModifier(() => ({ + addend: -5, + description: "Test Desc" + })), + smallerIsBetter: true + }) + ).toMatchSnapshot(); + expect( + createModifierSection({ + title: "Test", + modifier: createAdditiveModifier(() => ({ + addend: 0, + description: "Test Desc" + })), + smallerIsBetter: true + }) + ).toMatchSnapshot(); + expect( + createModifierSection({ + title: "Test", + modifier: createAdditiveModifier(() => ({ + addend: 5, + description: "Test Desc" + })), + smallerIsBetter: true + }) + ).toMatchSnapshot(); + }); + }); + test("With everything", () => + expect( + createModifierSection({ + title: "Test", + subtitle: "Subtitle", + modifier: createAdditiveModifier(() => ({ addend: 5, description: "Test Desc" })), + base: 10, + unit: "/s", + baseText: "Based on", + smallerIsBetter: true + }) + ).toMatchSnapshot()); +}); From 8ebfb8536076a979047dfa19ecefb8fa60dfac61 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 16 Apr 2023 12:43:04 -0500 Subject: [PATCH 022/134] Fix smallerIsBetter handling in createCollapsibleModifierSections --- src/data/common.tsx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/data/common.tsx b/src/data/common.tsx index 8050818..304208b 100644 --- a/src/data/common.tsx +++ b/src/data/common.tsx @@ -253,17 +253,17 @@ export interface Section { baseText?: Computable<CoercableComponent>; /** Whether or not this section should be currently visible to the player. **/ visible?: Computable<boolean>; + /** Determines if numbers larger or smaller than the base should be displayed as red. */ + smallerIsBetter?: boolean; } /** * Takes an array of modifier "sections", and creates a JSXFunction that can render all those sections, and allow each section to be collapsed. * Also returns a list of persistent refs that are used to control which sections are currently collapsed. * @param sectionsFunc A function that returns the sections to display. - * @param smallerIsBetter Determines whether numbers larger or smaller than the base should be displayed as red. */ export function createCollapsibleModifierSections( - sectionsFunc: () => Section[], - smallerIsBetter = false + sectionsFunc: () => Section[] ): [JSXFunction, Persistent<Record<number, boolean>>] { const sections: Section[] = []; const processed: @@ -324,7 +324,9 @@ export function createCollapsibleModifierSections( {s.unit} </span> </div> - {renderJSX(unref(s.modifier.description))} + {s.modifier.description == null + ? null + : renderJSX(unref(s.modifier.description))} </> ); @@ -353,7 +355,7 @@ export function createCollapsibleModifierSections( class="modifier-amount" style={ ( - smallerIsBetter === true + s.smallerIsBetter === true ? Decimal.gt(total, base ?? 1) : Decimal.lt(total, base ?? 1) ) From 80722bd64bebda785ae49578162db5178632116f Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 16 Apr 2023 21:15:19 -0500 Subject: [PATCH 023/134] Make noPersist work on objects as well --- src/game/persistence.ts | 44 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/src/game/persistence.ts b/src/game/persistence.ts index b56f52f..712f989 100644 --- a/src/game/persistence.ts +++ b/src/game/persistence.ts @@ -46,6 +46,11 @@ export const SaveDataPath = Symbol("SaveDataPath"); */ export const CheckNaN = Symbol("CheckNaN"); +/** + * A symbol used to flag objects that should not be checked for persistent values. + */ +export const SkipPersistence = Symbol("SkipPersistence"); + /** * This is a union of things that should be safely stringifiable without needing special processes or knowing what to load them in as. * - Decimals aren't allowed because we'd need to know to parse them back. @@ -196,12 +201,42 @@ export function isPersistent(value: unknown): value is Persistent { /** * Unwraps the non-persistent ref inside of persistent refs, to be passed to other features without duplicating values in the save data object. - * @param persistent The persistent ref to unwrap + * @param persistent The persistent ref to unwrap, or an object to ignore all persistent refs within */ export function noPersist<T extends Persistent<S>, S extends State>( persistent: T -): T[typeof NonPersistent] { - return persistent[NonPersistent]; +): T[typeof NonPersistent]; +export function noPersist<T extends object>(persistent: T): T; +export function noPersist<T extends Persistent<S>, S extends State>(persistent: T | object) { + // Check for proxy state so if it's a lazy proxy we don't evaluate it's function + // Lazy proxies are not persistent refs themselves, so we know we want to wrap them + return !(ProxyState in persistent) && NonPersistent in persistent + ? persistent[NonPersistent] + : new Proxy(persistent, { + get(target, p) { + if (p === PersistentState) { + return undefined; + } + if (p === SkipPersistence) { + return true; + } + return target[p as keyof typeof target]; + }, + set(target, key, value) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (target as Record<PropertyKey, any>)[key] = value; + return true; + }, + has(target, key) { + if (key === PersistentState) { + return false; + } + if (key == SkipPersistence) { + return true; + } + return Reflect.has(target, key); + } + }); } /** @@ -226,6 +261,9 @@ globalBus.on("addLayer", (layer: GenericLayer, saveData: Record<string, unknown> Object.keys(obj).forEach(key => { let value = obj[key]; if (value != null && typeof value === "object") { + if ((value as Record<PropertyKey, unknown>)[SkipPersistence] === true) { + return; + } if (ProxyState in value) { // eslint-disable-next-line @typescript-eslint/no-explicit-any value = (value as any)[ProxyState] as object; From ba67ff4fe9cec090b7596b575ff1a4d105a57d22 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 16 Apr 2023 21:47:58 -0500 Subject: [PATCH 024/134] Update TS --- package-lock.json | 16 ++++++++-------- package.json | 2 +- src/components/Game.vue | 2 +- src/components/Layer.vue | 4 ---- src/components/Save.vue | 2 +- src/components/SavesManager.vue | 4 ++-- 6 files changed, 13 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 31bffe8..6bf4e30 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,7 +43,7 @@ "eslint": "^8.6.0", "jsdom": "^20.0.0", "prettier": "^2.5.1", - "typescript": "^4.7.4", + "typescript": "^5.0.2", "vitest": "^0.29.3", "vue-tsc": "^0.38.1" }, @@ -7005,16 +7005,16 @@ } }, "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=12.20" } }, "node_modules/ufo": { @@ -12971,9 +12971,9 @@ "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==" }, "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", "dev": true }, "ufo": { diff --git a/package.json b/package.json index 0bf023d..9285057 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "eslint": "^8.6.0", "jsdom": "^20.0.0", "prettier": "^2.5.1", - "typescript": "^4.7.4", + "typescript": "^5.0.2", "vitest": "^0.29.3", "vue-tsc": "^0.38.1" }, diff --git a/src/components/Game.vue b/src/components/Game.vue index 680273a..1975696 100644 --- a/src/components/Game.vue +++ b/src/components/Game.vue @@ -13,7 +13,7 @@ v-if="layerKeys.includes(tab)" v-bind="gatherLayerProps(layers[tab]!)" :index="index" - @set-minimized="value => (layers[tab]!.minimized.value = value)" + @set-minimized="(value: boolean) => (layers[tab]!.minimized.value = value)" /> <component :is="tab" :index="index" v-else /> </div> diff --git a/src/components/Layer.vue b/src/components/Layer.vue index a3fffda..c00cf8a 100644 --- a/src/components/Layer.vue +++ b/src/components/Layer.vue @@ -73,10 +73,6 @@ export default defineComponent({ player.tabs.splice(unref(props.index), Infinity); } - function setMinimized(min: boolean) { - minimized.value = min; - } - function updateNodes(nodes: Record<string, FeatureNode | undefined>) { props.nodes.value = nodes; } diff --git a/src/components/Save.vue b/src/components/Save.vue index 1ff2496..77d2988 100644 --- a/src/components/Save.vue +++ b/src/components/Save.vue @@ -33,7 +33,7 @@ <DangerButton :disabled="isActive" @click="emit('delete')" - @confirmingChanged="value => (isConfirming = value)" + @confirmingChanged="(value: boolean) => (isConfirming = value)" > <Tooltip display="Delete" :direction="Direction.Left" class="info"> <span class="material-icons" style="margin: -2px">delete</span> diff --git a/src/components/SavesManager.vue b/src/components/SavesManager.vue index 91edd40..b1bf7e0 100644 --- a/src/components/SavesManager.vue +++ b/src/components/SavesManager.vue @@ -15,7 +15,7 @@ :save="saves[element]" @open="openSave(element)" @export="exportSave(element)" - @editName="name => editSave(element, name)" + @editName="(name: string) => editSave(element, name)" @duplicate="duplicateSave(element)" @delete="deleteSave(element)" /> @@ -38,7 +38,7 @@ v-if="Object.keys(bank).length > 0" :options="bank" :modelValue="selectedPreset" - @update:modelValue="preset => newFromPreset(preset as string)" + @update:modelValue="(preset: unknown) => newFromPreset(preset as string)" closeOnSelect placeholder="Select preset" class="presets" From 0f2cc45a7e3c4d38615f9a704c0d02ec33eb887a Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Tue, 18 Apr 2023 20:13:12 -0500 Subject: [PATCH 025/134] Add else statement to conditional formulas --- src/game/formulas/formulas.ts | 19 ++++++++++++++++--- tests/game/formulas.test.ts | 20 ++++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index d0a0f81..3b897dd 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -364,21 +364,30 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { * @param value The incoming formula value * @param condition Whether or not to apply the modifier * @param formulaModifier The modifier to apply to the incoming formula if the condition is true + * @param elseFormulaModifier An optional modifier to apply to the incoming formula if the condition is false */ public static if( value: FormulaSource, condition: Computable<boolean>, formulaModifier: ( value: InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula + ) => GenericFormula, + elseFormulaModifier?: ( + value: InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula ) => GenericFormula ): GenericFormula { const lhsRef = ref<DecimalSource>(0); - const formula = formulaModifier(Formula.variable(lhsRef)); + const variable = Formula.variable(lhsRef); + const formula = formulaModifier(variable); + const elseFormula = elseFormulaModifier?.(variable); const processedCondition = convertComputable(condition); function evalStep(lhs: DecimalSource) { if (unref(processedCondition)) { lhsRef.value = lhs; return formula.evaluate(); + } else if (elseFormula) { + lhsRef.value = lhs; + return elseFormula.evaluate(); } else { return lhs; } @@ -389,6 +398,8 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } if (unref(processedCondition)) { return lhs.invert(formula.invert(value)); + } else if (elseFormula) { + return lhs.invert(elseFormula.invert(value)); } else { return lhs.invert(value); } @@ -399,15 +410,17 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { invert: formula.isInvertible() && formula.hasVariable() ? invertStep : undefined }); } - /** @see {@link if} */ public static conditional( value: FormulaSource, condition: Computable<boolean>, formulaModifier: ( value: InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula + ) => GenericFormula, + elseFormulaModifier?: ( + value: InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula ) => GenericFormula ) { - return Formula.if(value, condition, formulaModifier); + return Formula.if(value, condition, formulaModifier, elseFormulaModifier); } public static abs(value: FormulaSource): GenericFormula { diff --git a/tests/game/formulas.test.ts b/tests/game/formulas.test.ts index ed5adb2..7da6226 100644 --- a/tests/game/formulas.test.ts +++ b/tests/game/formulas.test.ts @@ -868,6 +868,26 @@ describe("Conditionals", () => { Formula.if(variable, false, value => Formula.sqrt(value)).invert(10) ).compare_tolerance(10)); }); + describe("Evaluates correctly with condition false and else statement", () => { + test("Evaluates correctly", () => + expect( + Formula.if( + constant, + false, + value => Formula.sqrt(value), + value => value.times(2) + ).evaluate() + ).compare_tolerance(20)); + test("Inverts correctly with variable in input", () => + expect( + Formula.if( + variable, + false, + value => Formula.sqrt(value), + value => value.times(2) + ).invert(20) + ).compare_tolerance(10)); + }); describe("Evaluates correctly with condition true", () => { test("Evaluates correctly", () => From 632da10acaf93ddb2a3192a0895230df0b024969 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Tue, 18 Apr 2023 20:48:34 -0500 Subject: [PATCH 026/134] Make lazy proxies and options funcs pass along base object --- src/features/achievements/achievement.tsx | 6 ++++-- src/features/action.tsx | 6 ++++-- src/features/bars/bar.ts | 4 ++-- src/features/boards/board.ts | 4 ++-- src/features/challenges/challenge.tsx | 4 ++-- src/features/clickables/clickable.ts | 6 ++++-- src/features/conversion.ts | 8 +++---- src/features/feature.ts | 4 +--- src/features/grids/grid.ts | 4 ++-- src/features/hotkey.tsx | 4 ++-- src/features/infoboxes/infobox.ts | 4 ++-- src/features/links/links.ts | 4 ++-- src/features/particles/particles.tsx | 6 ++++-- src/features/repeatable.tsx | 4 ++-- src/features/reset.ts | 4 ++-- src/features/tabs/tab.ts | 4 ++-- src/features/tabs/tabFamily.ts | 6 ++++-- src/features/trees/tree.ts | 10 +++++---- src/features/upgrades/upgrade.ts | 4 ++-- src/game/layers.tsx | 2 +- src/game/modifiers.tsx | 26 ++++++++++++++--------- src/game/requirements.tsx | 7 +++--- src/util/proxies.ts | 6 +++--- 23 files changed, 77 insertions(+), 60 deletions(-) diff --git a/src/features/achievements/achievement.tsx b/src/features/achievements/achievement.tsx index 3f2a7f3..ccbbc37 100644 --- a/src/features/achievements/achievement.tsx +++ b/src/features/achievements/achievement.tsx @@ -140,8 +140,10 @@ export function createAchievement<T extends AchievementOptions>( optionsFunc?: OptionsFunc<T, BaseAchievement, GenericAchievement> ): Achievement<T> { const earned = persistent<boolean>(false, false); - return createLazyProxy(() => { - const achievement = optionsFunc?.() ?? ({} as ReturnType<NonNullable<typeof optionsFunc>>); + return createLazyProxy(feature => { + const achievement = + optionsFunc?.call(feature, feature) ?? + ({} as ReturnType<NonNullable<typeof optionsFunc>>); achievement.id = getUniqueID("achievement-"); achievement.type = AchievementType; achievement[Component] = AchievementComponent as GenericComponent; diff --git a/src/features/action.tsx b/src/features/action.tsx index 46f0e72..31dd6a1 100644 --- a/src/features/action.tsx +++ b/src/features/action.tsx @@ -105,8 +105,10 @@ export function createAction<T extends ActionOptions>( optionsFunc?: OptionsFunc<T, BaseAction, GenericAction> ): Action<T> { const progress = persistent<DecimalSource>(0); - return createLazyProxy(() => { - const action = optionsFunc?.() ?? ({} as ReturnType<NonNullable<typeof optionsFunc>>); + return createLazyProxy(feature => { + const action = + optionsFunc?.call(feature, feature) ?? + ({} as ReturnType<NonNullable<typeof optionsFunc>>); action.id = getUniqueID("action-"); action.type = ActionType; action[Component] = ClickableComponent as GenericComponent; diff --git a/src/features/bars/bar.ts b/src/features/bars/bar.ts index 0a6433c..82718eb 100644 --- a/src/features/bars/bar.ts +++ b/src/features/bars/bar.ts @@ -103,8 +103,8 @@ export type GenericBar = Replace< export function createBar<T extends BarOptions>( optionsFunc: OptionsFunc<T, BaseBar, GenericBar> ): Bar<T> { - return createLazyProxy(() => { - const bar = optionsFunc(); + return createLazyProxy(feature => { + const bar = optionsFunc.call(feature, feature); bar.id = getUniqueID("bar-"); bar.type = BarType; bar[Component] = BarComponent as GenericComponent; diff --git a/src/features/boards/board.ts b/src/features/boards/board.ts index b8f66b4..e10bf67 100644 --- a/src/features/boards/board.ts +++ b/src/features/boards/board.ts @@ -297,8 +297,8 @@ export function createBoard<T extends BoardOptions>( false ); - return createLazyProxy(() => { - const board = optionsFunc(); + return createLazyProxy(feature => { + const board = optionsFunc.call(feature, feature); board.id = getUniqueID("board-"); board.type = BoardType; board[Component] = BoardComponent as GenericComponent; diff --git a/src/features/challenges/challenge.tsx b/src/features/challenges/challenge.tsx index 5b6231d..a180139 100644 --- a/src/features/challenges/challenge.tsx +++ b/src/features/challenges/challenge.tsx @@ -152,8 +152,8 @@ export function createChallenge<T extends ChallengeOptions>( ): Challenge<T> { const completions = persistent(0); const active = persistent(false, false); - return createLazyProxy(() => { - const challenge = optionsFunc(); + return createLazyProxy(feature => { + const challenge = optionsFunc.call(feature, feature); challenge.id = getUniqueID("challenge-"); challenge.type = ChallengeType; diff --git a/src/features/clickables/clickable.ts b/src/features/clickables/clickable.ts index d369603..1516965 100644 --- a/src/features/clickables/clickable.ts +++ b/src/features/clickables/clickable.ts @@ -97,8 +97,10 @@ export type GenericClickable = Replace< export function createClickable<T extends ClickableOptions>( optionsFunc?: OptionsFunc<T, BaseClickable, GenericClickable> ): Clickable<T> { - return createLazyProxy(() => { - const clickable = optionsFunc?.() ?? ({} as ReturnType<NonNullable<typeof optionsFunc>>); + return createLazyProxy(feature => { + const clickable = + optionsFunc?.call(feature, feature) ?? + ({} as ReturnType<NonNullable<typeof optionsFunc>>); clickable.id = getUniqueID("clickable-"); clickable.type = ClickableType; clickable[Component] = ClickableComponent as GenericComponent; diff --git a/src/features/conversion.ts b/src/features/conversion.ts index a184de0..6ea498f 100644 --- a/src/features/conversion.ts +++ b/src/features/conversion.ts @@ -125,8 +125,8 @@ export type GenericConversion = Replace< export function createConversion<T extends ConversionOptions>( optionsFunc: OptionsFunc<T, BaseConversion, GenericConversion> ): Conversion<T> { - return createLazyProxy(() => { - const conversion = optionsFunc(); + return createLazyProxy(feature => { + const conversion = optionsFunc.call(feature, feature); (conversion as GenericConversion).formula = conversion.formula( Formula.variable(conversion.baseResource) @@ -211,8 +211,8 @@ export function createCumulativeConversion<S extends ConversionOptions>( export function createIndependentConversion<S extends ConversionOptions>( optionsFunc: OptionsFunc<S, BaseConversion, GenericConversion> ): Conversion<S> { - return createConversion(() => { - const conversion: S = optionsFunc(); + return createConversion(feature => { + const conversion: S = optionsFunc.call(feature, feature); setDefault(conversion, "buyMax", false); diff --git a/src/features/feature.ts b/src/features/feature.ts index d234997..db0af40 100644 --- a/src/features/feature.ts +++ b/src/features/feature.ts @@ -42,9 +42,7 @@ export type Replace<T, S> = S & Omit<T, keyof S>; * with "this" bound to what the type will eventually be processed into. * Intended for making lazily evaluated objects. */ -export type OptionsFunc<T, R = Record<string, unknown>, S = R> = () => T & - Partial<R> & - ThisType<T & S>; +export type OptionsFunc<T, R = unknown, S = R> = (obj: R) => T & Partial<R> & ThisType<T & S>; let id = 0; /** diff --git a/src/features/grids/grid.ts b/src/features/grids/grid.ts index 57eb399..454bbfc 100644 --- a/src/features/grids/grid.ts +++ b/src/features/grids/grid.ts @@ -307,8 +307,8 @@ export function createGrid<T extends GridOptions>( optionsFunc: OptionsFunc<T, BaseGrid, GenericGrid> ): Grid<T> { const cellState = persistent<Record<string | number, State>>({}, false); - return createLazyProxy(() => { - const grid = optionsFunc(); + return createLazyProxy(feature => { + const grid = optionsFunc.call(feature, feature); grid.id = getUniqueID("grid-"); grid[Component] = GridComponent as GenericComponent; diff --git a/src/features/hotkey.tsx b/src/features/hotkey.tsx index dcfdade..51fafbb 100644 --- a/src/features/hotkey.tsx +++ b/src/features/hotkey.tsx @@ -68,8 +68,8 @@ const uppercaseNumbers = [")", "!", "@", "#", "$", "%", "^", "&", "*", "("]; export function createHotkey<T extends HotkeyOptions>( optionsFunc: OptionsFunc<T, BaseHotkey, GenericHotkey> ): Hotkey<T> { - return createLazyProxy(() => { - const hotkey = optionsFunc(); + return createLazyProxy(feature => { + const hotkey = optionsFunc.call(feature, feature); hotkey.type = HotkeyType; processComputable(hotkey as T, "enabled"); diff --git a/src/features/infoboxes/infobox.ts b/src/features/infoboxes/infobox.ts index f5c7a2f..551d86c 100644 --- a/src/features/infoboxes/infobox.ts +++ b/src/features/infoboxes/infobox.ts @@ -91,8 +91,8 @@ export function createInfobox<T extends InfoboxOptions>( optionsFunc: OptionsFunc<T, BaseInfobox, GenericInfobox> ): Infobox<T> { const collapsed = persistent<boolean>(false, false); - return createLazyProxy(() => { - const infobox = optionsFunc(); + return createLazyProxy(feature => { + const infobox = optionsFunc.call(feature, feature); infobox.id = getUniqueID("infobox-"); infobox.type = InfoboxType; infobox[Component] = InfoboxComponent as GenericComponent; diff --git a/src/features/links/links.ts b/src/features/links/links.ts index 5b28c46..c5603c5 100644 --- a/src/features/links/links.ts +++ b/src/features/links/links.ts @@ -59,8 +59,8 @@ export type GenericLinks = Replace< export function createLinks<T extends LinksOptions>( optionsFunc: OptionsFunc<T, BaseLinks, GenericLinks> ): Links<T> { - return createLazyProxy(() => { - const links = optionsFunc(); + return createLazyProxy(feature => { + const links = optionsFunc.call(feature, feature); links.type = LinksType; links[Component] = LinksComponent as GenericComponent; diff --git a/src/features/particles/particles.tsx b/src/features/particles/particles.tsx index 8edaab1..d2797d5 100644 --- a/src/features/particles/particles.tsx +++ b/src/features/particles/particles.tsx @@ -69,8 +69,10 @@ export type GenericParticles = Particles<ParticlesOptions>; export function createParticles<T extends ParticlesOptions>( optionsFunc?: OptionsFunc<T, BaseParticles, GenericParticles> ): Particles<T> { - return createLazyProxy(() => { - const particles = optionsFunc?.() ?? ({} as ReturnType<NonNullable<typeof optionsFunc>>); + return createLazyProxy(feature => { + const particles = + optionsFunc?.call(feature, feature) ?? + ({} as ReturnType<NonNullable<typeof optionsFunc>>); particles.id = getUniqueID("particles-"); particles.type = ParticlesType; particles[Component] = ParticlesComponent as GenericComponent; diff --git a/src/features/repeatable.tsx b/src/features/repeatable.tsx index 2598c19..098b637 100644 --- a/src/features/repeatable.tsx +++ b/src/features/repeatable.tsx @@ -132,8 +132,8 @@ export function createRepeatable<T extends RepeatableOptions>( optionsFunc: OptionsFunc<T, BaseRepeatable, GenericRepeatable> ): Repeatable<T> { const amount = persistent<DecimalSource>(0); - return createLazyProxy(() => { - const repeatable = optionsFunc(); + return createLazyProxy(feature => { + const repeatable = optionsFunc.call(feature, feature); repeatable.id = getUniqueID("repeatable-"); repeatable.type = RepeatableType; diff --git a/src/features/reset.ts b/src/features/reset.ts index 0bba943..b7c40ed 100644 --- a/src/features/reset.ts +++ b/src/features/reset.ts @@ -54,8 +54,8 @@ export type GenericReset = Reset<ResetOptions>; export function createReset<T extends ResetOptions>( optionsFunc: OptionsFunc<T, BaseReset, GenericReset> ): Reset<T> { - return createLazyProxy(() => { - const reset = optionsFunc(); + return createLazyProxy(feature => { + const reset = optionsFunc.call(feature, feature); reset.id = getUniqueID("reset-"); reset.type = ResetType; diff --git a/src/features/tabs/tab.ts b/src/features/tabs/tab.ts index d19dfdd..111f954 100644 --- a/src/features/tabs/tab.ts +++ b/src/features/tabs/tab.ts @@ -62,8 +62,8 @@ export type GenericTab = Tab<TabOptions>; export function createTab<T extends TabOptions>( optionsFunc: OptionsFunc<T, BaseTab, GenericTab> ): Tab<T> { - return createLazyProxy(() => { - const tab = optionsFunc(); + return createLazyProxy(feature => { + const tab = optionsFunc.call(feature, feature); tab.id = getUniqueID("tab-"); tab.type = TabType; tab[Component] = TabComponent as GenericComponent; diff --git a/src/features/tabs/tabFamily.ts b/src/features/tabs/tabFamily.ts index 316b309..2ca544b 100644 --- a/src/features/tabs/tabFamily.ts +++ b/src/features/tabs/tabFamily.ts @@ -156,8 +156,10 @@ export function createTabFamily<T extends TabFamilyOptions>( } const selected = persistent(Object.keys(tabs)[0], false); - return createLazyProxy(() => { - const tabFamily = optionsFunc?.() ?? ({} as ReturnType<NonNullable<typeof optionsFunc>>); + return createLazyProxy(feature => { + const tabFamily = + optionsFunc?.call(feature, feature) ?? + ({} as ReturnType<NonNullable<typeof optionsFunc>>); tabFamily.id = getUniqueID("tabFamily-"); tabFamily.type = TabFamilyType; diff --git a/src/features/trees/tree.ts b/src/features/trees/tree.ts index 8bd1f7a..67c6892 100644 --- a/src/features/trees/tree.ts +++ b/src/features/trees/tree.ts @@ -103,8 +103,10 @@ export type GenericTreeNode = Replace< export function createTreeNode<T extends TreeNodeOptions>( optionsFunc?: OptionsFunc<T, BaseTreeNode, GenericTreeNode> ): TreeNode<T> { - return createLazyProxy(() => { - const treeNode = optionsFunc?.() ?? ({} as ReturnType<NonNullable<typeof optionsFunc>>); + return createLazyProxy(feature => { + const treeNode = + optionsFunc?.call(feature, feature) ?? + ({} as ReturnType<NonNullable<typeof optionsFunc>>); treeNode.id = getUniqueID("treeNode-"); treeNode.type = TreeNodeType; treeNode[Component] = TreeNodeComponent as GenericComponent; @@ -242,8 +244,8 @@ export type GenericTree = Replace< export function createTree<T extends TreeOptions>( optionsFunc: OptionsFunc<T, BaseTree, GenericTree> ): Tree<T> { - return createLazyProxy(() => { - const tree = optionsFunc(); + return createLazyProxy(feature => { + const tree = optionsFunc.call(feature, feature); tree.id = getUniqueID("tree-"); tree.type = TreeType; tree[Component] = TreeComponent as GenericComponent; diff --git a/src/features/upgrades/upgrade.ts b/src/features/upgrades/upgrade.ts index 14a64e7..5eebfc6 100644 --- a/src/features/upgrades/upgrade.ts +++ b/src/features/upgrades/upgrade.ts @@ -118,8 +118,8 @@ export function createUpgrade<T extends UpgradeOptions>( optionsFunc: OptionsFunc<T, BaseUpgrade, GenericUpgrade> ): Upgrade<T> { const bought = persistent<boolean>(false, false); - return createLazyProxy(() => { - const upgrade = optionsFunc(); + return createLazyProxy(feature => { + const upgrade = optionsFunc.call(feature, feature); upgrade.id = getUniqueID("upgrade-"); upgrade.type = UpgradeType; upgrade[Component] = UpgradeComponent as GenericComponent; diff --git a/src/game/layers.tsx b/src/game/layers.tsx index 532daba..6294592 100644 --- a/src/game/layers.tsx +++ b/src/game/layers.tsx @@ -220,7 +220,7 @@ export function createLayer<T extends LayerOptions>( addingLayers.push(id); persistentRefs[id] = new Set(); layer.minimized = persistent(false, false); - Object.assign(layer, optionsFunc.call(layer as BaseLayer)); + Object.assign(layer, optionsFunc.call(layer, layer as BaseLayer)); if ( addingLayers[addingLayers.length - 1] == null || addingLayers[addingLayers.length - 1] !== id diff --git a/src/game/modifiers.tsx b/src/game/modifiers.tsx index 74692b0..cceacd8 100644 --- a/src/game/modifiers.tsx +++ b/src/game/modifiers.tsx @@ -1,5 +1,5 @@ import "components/common/modifiers.css"; -import type { CoercableComponent } from "features/feature"; +import type { CoercableComponent, OptionsFunc } from "features/feature"; import { jsx } from "features/feature"; import settings from "game/settings"; import type { DecimalSource } from "util/bignum"; @@ -66,10 +66,13 @@ export interface AdditiveModifierOptions { * @param optionsFunc Additive modifier options. */ export function createAdditiveModifier<T extends AdditiveModifierOptions>( - optionsFunc: () => T + optionsFunc: OptionsFunc<T> ): ModifierFromOptionalParams<T["description"], T["enabled"]> { - return createLazyProxy(() => { - const { addend, description, enabled, smallerIsBetter } = optionsFunc(); + return createLazyProxy(feature => { + const { addend, description, enabled, smallerIsBetter } = optionsFunc.call( + feature, + feature + ); const processedAddend = convertComputable(addend); const processedDescription = convertComputable(description); @@ -128,10 +131,13 @@ export interface MultiplicativeModifierOptions { * @param optionsFunc Multiplicative modifier options. */ export function createMultiplicativeModifier<T extends MultiplicativeModifierOptions>( - optionsFunc: () => T + optionsFunc: OptionsFunc<T> ): ModifierFromOptionalParams<T["description"], T["enabled"]> { - return createLazyProxy(() => { - const { multiplier, description, enabled, smallerIsBetter } = optionsFunc(); + return createLazyProxy(feature => { + const { multiplier, description, enabled, smallerIsBetter } = optionsFunc.call( + feature, + feature + ); const processedMultiplier = convertComputable(multiplier); const processedDescription = convertComputable(description); @@ -191,11 +197,11 @@ export interface ExponentialModifierOptions { * @param optionsFunc Exponential modifier options. */ export function createExponentialModifier<T extends ExponentialModifierOptions>( - optionsFunc: () => T + optionsFunc: OptionsFunc<T> ): ModifierFromOptionalParams<T["description"], T["enabled"]> { - return createLazyProxy(() => { + return createLazyProxy(feature => { const { exponent, description, enabled, supportLowNumbers, smallerIsBetter } = - optionsFunc(); + optionsFunc.call(feature, feature); const processedExponent = convertComputable(exponent); const processedDescription = convertComputable(description); diff --git a/src/game/requirements.tsx b/src/game/requirements.tsx index acb7f7b..35504b6 100644 --- a/src/game/requirements.tsx +++ b/src/game/requirements.tsx @@ -3,6 +3,7 @@ import { CoercableComponent, isVisible, jsx, + OptionsFunc, Replace, setDefault, Visibility @@ -108,10 +109,10 @@ export type CostRequirement = Replace< * @param optionsFunc Cost requirement options. */ export function createCostRequirement<T extends CostRequirementOptions>( - optionsFunc: () => T + optionsFunc: OptionsFunc<T> ): CostRequirement { - return createLazyProxy(() => { - const req = optionsFunc() as T & Partial<Requirement>; + return createLazyProxy(feature => { + const req = optionsFunc.call(feature, feature) as T & Partial<Requirement>; req.partialDisplay = amount => ( <span diff --git a/src/util/proxies.ts b/src/util/proxies.ts index 174378b..6e7a6f1 100644 --- a/src/util/proxies.ts +++ b/src/util/proxies.ts @@ -31,14 +31,14 @@ export type Proxied<T> = NonNullable<T> extends Record<PropertyKey, unknown> // Takes a function that returns an object and pretends to be that object // Note that the object is lazily calculated export function createLazyProxy<T extends object, S extends T>( - objectFunc: (baseObject: S) => T & S, + objectFunc: (this: S, baseObject: S) => T & S, baseObject: S = {} as S ): T { const obj: S & Partial<T> = baseObject; let calculated = false; function calculateObj(): T { if (!calculated) { - Object.assign(obj, objectFunc(obj)); + Object.assign(obj, objectFunc.call(obj, obj)); calculated = true; } return obj as S & T; @@ -73,7 +73,7 @@ export function createLazyProxy<T extends object, S extends T>( }, getOwnPropertyDescriptor(target, key) { if (!calculated) { - Object.assign(obj, objectFunc(obj)); + Object.assign(obj, objectFunc.call(obj, obj)); calculated = true; } return Object.getOwnPropertyDescriptor(target, key); From a262d6fd0333bb74a126570ed7f05da856025465 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Tue, 18 Apr 2023 20:55:40 -0500 Subject: [PATCH 027/134] Make formulas unwrap persistent refs automatically --- src/game/formulas/formulas.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index 3b897dd..9f6ad5a 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -1,7 +1,8 @@ import { Resource } from "features/resources/resource"; +import { NonPersistent } from "game/persistence"; import Decimal, { DecimalSource, format } from "util/bignum"; -import { Computable, convertComputable, ProcessedComputable } from "util/computed"; -import { computed, ComputedRef, ref, unref } from "vue"; +import { Computable, ProcessedComputable, convertComputable } from "util/computed"; +import { ComputedRef, Ref, computed, ref, unref } from "vue"; import * as ops from "./operations"; import type { EvaluateFunction, @@ -58,7 +59,15 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { constructor(options: FormulaOptions<T>) { let readonlyProperties; + if ("inputs" in options) { + options.inputs = options.inputs.map(input => + typeof input === "object" && NonPersistent in input ? input[NonPersistent] : input + ) as T | [FormulaSource]; + } if ("variable" in options) { + if (typeof options.variable === "object" && NonPersistent in options.variable) { + options.variable = options.variable[NonPersistent] as Ref<DecimalSource>; + } readonlyProperties = this.setupVariable(options); } else if (!("evaluate" in options)) { readonlyProperties = this.setupConstant(options); From b666e0c1f58e1dff5aea33e0e92a2abd3b94e2d5 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Tue, 18 Apr 2023 20:58:35 -0500 Subject: [PATCH 028/134] Fix common.tsx --- src/data/common.tsx | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/data/common.tsx b/src/data/common.tsx index 304208b..ab33aa6 100644 --- a/src/data/common.tsx +++ b/src/data/common.tsx @@ -5,11 +5,10 @@ import { createClickable } from "features/clickables/clickable"; import type { GenericConversion } from "features/conversion"; import type { CoercableComponent, JSXFunction, OptionsFunc, Replace } from "features/feature"; import { jsx, setDefault } from "features/feature"; -import { displayResource, Resource } from "features/resources/resource"; +import { Resource, displayResource } from "features/resources/resource"; import type { GenericTree, GenericTreeNode, TreeNode, TreeNodeOptions } from "features/trees/tree"; import { createTreeNode } from "features/trees/tree"; -import Formula from "game/formulas/formulas"; -import type { FormulaSource, GenericFormula } from "game/formulas/types"; +import type { GenericFormula } from "game/formulas/types"; import type { Modifier } from "game/modifiers"; import type { Persistent } from "game/persistence"; import { DefaultValue, persistent } from "game/persistence"; @@ -99,8 +98,8 @@ export type GenericResetButton = Replace< export function createResetButton<T extends ClickableOptions & ResetButtonOptions>( optionsFunc: OptionsFunc<T> ): ResetButton<T> { - return createClickable(() => { - const resetButton = optionsFunc(); + return createClickable(feature => { + const resetButton = optionsFunc.call(feature, feature); processComputable(resetButton as T, "showNextAt"); setDefault(resetButton, "showNextAt", true); @@ -213,8 +212,8 @@ export type GenericLayerTreeNode = Replace< export function createLayerTreeNode<T extends LayerTreeNodeOptions>( optionsFunc: OptionsFunc<T> ): LayerTreeNode<T> { - return createTreeNode(() => { - const options = optionsFunc(); + return createTreeNode(feature => { + const options = optionsFunc.call(feature, feature); processComputable(options as T, "display"); setDefault(options, "display", options.layerID); processComputable(options as T, "append"); From c386acee8de7d1cf136381c760a705c4c07b2217 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Tue, 18 Apr 2023 23:36:25 -0500 Subject: [PATCH 029/134] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 951929d..ae41644 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Requires referencing persistent refs either through a proxy or by wrapping in `noPersist()` - **BREAKING** Visibility properties can now take booleans - Removed showIf util +- **BREAKING** Lazy proxies and options functions now pass the base object in as `this` as well as the first parameter. - Tweaked settings display - setupPassiveGeneration will no longer lower the resource - displayResource now floors resource amounts From 7065de519fb03836e75f954d39fb083212baa289 Mon Sep 17 00:00:00 2001 From: Seth Posner <smartseth@hotmail.com> Date: Wed, 19 Apr 2023 16:59:52 -0700 Subject: [PATCH 030/134] Add optional total functions to BonusDecorator options --- package-lock.json | 4941 ++++++++++++--------- src/features/decorators/bonusDecorator.ts | 2 + src/features/decorators/common.ts | 2 +- 3 files changed, 2854 insertions(+), 2091 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6bf4e30..4a3a68d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,11 +52,11 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { @@ -64,9 +64,9 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -75,32 +75,32 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", + "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", - "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", + "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.10", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.10", - "@babel/types": "^7.18.10", + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.4", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.4", + "@babel/types": "^7.21.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" }, "engines": { @@ -112,31 +112,19 @@ } }, "node_modules/@babel/generator": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", - "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", + "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", "dependencies": { - "@babel/types": "^7.18.10", + "@babel/types": "^7.21.4", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", @@ -161,13 +149,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", + "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", + "@babel/compat-data": "^7.21.4", + "@babel/helper-validator-option": "^7.21.0", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "engines": { @@ -178,16 +167,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz", - "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", + "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/helper-split-export-declaration": "^7.18.6" }, "engines": { @@ -198,12 +188,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", - "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz", + "integrity": "sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" + "regexpu-core": "^5.3.1" }, "engines": { "node": ">=6.9.0" @@ -213,9 +203,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", - "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -248,12 +238,12 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -271,40 +261,40 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", + "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.21.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" }, "engines": { "node": ">=6.9.0" @@ -322,9 +312,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", "engines": { "node": ">=6.9.0" } @@ -347,37 +337,38 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", - "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.20.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.20.0" }, "engines": { "node": ">=6.9.0" @@ -395,51 +386,51 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz", - "integrity": "sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", "dependencies": { - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.11", - "@babel/types": "^7.18.10" + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dependencies": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -459,9 +450,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", - "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", + "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -484,13 +475,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", + "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -500,12 +491,12 @@ } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", - "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" }, @@ -532,12 +523,12 @@ } }, "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", + "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -593,11 +584,11 @@ } }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -638,15 +629,15 @@ } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", - "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" + "@babel/plugin-transform-parameters": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -671,12 +662,12 @@ } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -702,13 +693,13 @@ } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", + "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -792,11 +783,11 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -828,11 +819,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", + "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -936,11 +927,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", + "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -950,11 +941,11 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", + "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -964,13 +955,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", "dependencies": { "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -994,11 +985,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", - "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", + "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1008,16 +999,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz", - "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", + "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" }, @@ -1029,11 +1021,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", + "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -1043,11 +1036,11 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz", - "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", + "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1101,11 +1094,11 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", + "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1159,13 +1152,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1175,14 +1167,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", + "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1192,15 +1183,14 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz", - "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", + "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", "dependencies": { "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-identifier": "^7.19.1" }, "engines": { "node": ">=6.9.0" @@ -1225,12 +1215,12 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", - "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", + "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1269,11 +1259,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", + "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1297,12 +1287,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" }, "engines": { "node": ">=6.9.0" @@ -1340,12 +1330,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz", - "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" }, "engines": { "node": ">=6.9.0" @@ -1397,13 +1387,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.12.tgz", - "integrity": "sha512-2vjjam0cum0miPkenUbQswKowuxs/NjMwIKEq0zwegRxXk12C9YOF9STXnaUptITOtOJHKHpzvvWYOjbm6tc0w==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz", + "integrity": "sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-typescript": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" }, "engines": { "node": ">=6.9.0" @@ -1442,37 +1433,37 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", - "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.4.tgz", + "integrity": "sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==", "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-option": "^7.18.6", + "@babel/compat-data": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.18.10", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", + "@babel/plugin-proposal-async-generator-functions": "^7.20.7", "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.21.0", "@babel/plugin-proposal-dynamic-import": "^7.18.6", "@babel/plugin-proposal-export-namespace-from": "^7.18.9", "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.21.0", "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-import-assertions": "^7.20.0", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -1482,44 +1473,44 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.20.7", + "@babel/plugin-transform-async-to-generator": "^7.20.7", "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", - "@babel/plugin-transform-classes": "^7.18.9", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.9", + "@babel/plugin-transform-block-scoping": "^7.21.0", + "@babel/plugin-transform-classes": "^7.21.0", + "@babel/plugin-transform-computed-properties": "^7.20.7", + "@babel/plugin-transform-destructuring": "^7.21.3", "@babel/plugin-transform-dotall-regex": "^7.18.6", "@babel/plugin-transform-duplicate-keys": "^7.18.9", "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-for-of": "^7.21.0", "@babel/plugin-transform-function-name": "^7.18.9", "@babel/plugin-transform-literals": "^7.18.9", "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-amd": "^7.20.11", + "@babel/plugin-transform-modules-commonjs": "^7.21.2", + "@babel/plugin-transform-modules-systemjs": "^7.20.11", "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", "@babel/plugin-transform-new-target": "^7.18.6", "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-parameters": "^7.21.3", "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.20.5", "@babel/plugin-transform-reserved-words": "^7.18.6", "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-transform-spread": "^7.20.7", "@babel/plugin-transform-sticky-regex": "^7.18.6", "@babel/plugin-transform-template-literals": "^7.18.9", "@babel/plugin-transform-typeof-symbol": "^7.18.9", "@babel/plugin-transform-unicode-escapes": "^7.18.10", "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.10", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "core-js-compat": "^3.22.1", + "@babel/types": "^7.21.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", "semver": "^6.3.0" }, "engines": { @@ -1544,43 +1535,48 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, "node_modules/@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", "dependencies": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", - "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", + "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.11", - "@babel/types": "^7.18.10", + "@babel/parser": "^7.21.4", + "@babel/types": "^7.21.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1589,12 +1585,12 @@ } }, "node_modules/@babel/types": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", - "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", + "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", "dependencies": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1607,9 +1603,9 @@ "integrity": "sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==" }, "node_modules/@esbuild/android-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", - "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.17.tgz", + "integrity": "sha512-E6VAZwN7diCa3labs0GYvhEPL2M94WLF8A+czO8hfjREXxba8Ng7nM5VxV+9ihNXIY1iQO1XxUU4P7hbqbICxg==", "cpu": [ "arm" ], @@ -1623,9 +1619,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", - "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.17.tgz", + "integrity": "sha512-jaJ5IlmaDLFPNttv0ofcwy/cfeY4bh/n705Tgh+eLObbGtQBK3EPAu+CzL95JVE4nFAliyrnEu0d32Q5foavqg==", "cpu": [ "arm64" ], @@ -1639,9 +1635,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", - "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.17.tgz", + "integrity": "sha512-446zpfJ3nioMC7ASvJB1pszHVskkw4u/9Eu8s5yvvsSDTzYh4p4ZIRj0DznSl3FBF0Z/mZfrKXTtt0QCoFmoHA==", "cpu": [ "x64" ], @@ -1655,9 +1651,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", - "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.17.tgz", + "integrity": "sha512-m/gwyiBwH3jqfUabtq3GH31otL/0sE0l34XKpSIqR7NjQ/XHQ3lpmQHLHbG8AHTGCw8Ao059GvV08MS0bhFIJQ==", "cpu": [ "arm64" ], @@ -1671,9 +1667,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", - "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.17.tgz", + "integrity": "sha512-4utIrsX9IykrqYaXR8ob9Ha2hAY2qLc6ohJ8c0CN1DR8yWeMrTgYFjgdeQ9LIoTOfLetXjuCu5TRPHT9yKYJVg==", "cpu": [ "x64" ], @@ -1687,9 +1683,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", - "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.17.tgz", + "integrity": "sha512-4PxjQII/9ppOrpEwzQ1b0pXCsFLqy77i0GaHodrmzH9zq2/NEhHMAMJkJ635Ns4fyJPFOlHMz4AsklIyRqFZWA==", "cpu": [ "arm64" ], @@ -1703,9 +1699,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", - "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.17.tgz", + "integrity": "sha512-lQRS+4sW5S3P1sv0z2Ym807qMDfkmdhUYX30GRBURtLTrJOPDpoU0kI6pVz1hz3U0+YQ0tXGS9YWveQjUewAJw==", "cpu": [ "x64" ], @@ -1719,9 +1715,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", - "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.17.tgz", + "integrity": "sha512-biDs7bjGdOdcmIk6xU426VgdRUpGg39Yz6sT9Xp23aq+IEHDb/u5cbmu/pAANpDB4rZpY/2USPhCA+w9t3roQg==", "cpu": [ "arm" ], @@ -1735,9 +1731,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", - "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.17.tgz", + "integrity": "sha512-2+pwLx0whKY1/Vqt8lyzStyda1v0qjJ5INWIe+d8+1onqQxHLLi3yr5bAa4gvbzhZqBztifYEu8hh1La5+7sUw==", "cpu": [ "arm64" ], @@ -1751,9 +1747,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", - "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.17.tgz", + "integrity": "sha512-IBTTv8X60dYo6P2t23sSUYym8fGfMAiuv7PzJ+0LcdAndZRzvke+wTVxJeCq4WgjppkOpndL04gMZIFvwoU34Q==", "cpu": [ "ia32" ], @@ -1782,9 +1778,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", - "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.17.tgz", + "integrity": "sha512-2kYCGh8589ZYnY031FgMLy0kmE4VoGdvfJkxLdxP4HJvWNXpyLhjOvxVsYjYZ6awqY4bgLR9tpdYyStgZZhi2A==", "cpu": [ "mips64el" ], @@ -1798,9 +1794,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", - "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.17.tgz", + "integrity": "sha512-KIdG5jdAEeAKogfyMTcszRxy3OPbZhq0PPsW4iKKcdlbk3YE4miKznxV2YOSmiK/hfOZ+lqHri3v8eecT2ATwQ==", "cpu": [ "ppc64" ], @@ -1814,9 +1810,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", - "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.17.tgz", + "integrity": "sha512-Cj6uWLBR5LWhcD/2Lkfg2NrkVsNb2sFM5aVEfumKB2vYetkA/9Uyc1jVoxLZ0a38sUhFk4JOVKH0aVdPbjZQeA==", "cpu": [ "riscv64" ], @@ -1830,9 +1826,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", - "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.17.tgz", + "integrity": "sha512-lK+SffWIr0XsFf7E0srBjhpkdFVJf3HEgXCwzkm69kNbRar8MhezFpkIwpk0qo2IOQL4JE4mJPJI8AbRPLbuOQ==", "cpu": [ "s390x" ], @@ -1846,9 +1842,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", - "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.17.tgz", + "integrity": "sha512-XcSGTQcWFQS2jx3lZtQi7cQmDYLrpLRyz1Ns1DzZCtn898cWfm5Icx/DEWNcTU+T+tyPV89RQtDnI7qL2PObPg==", "cpu": [ "x64" ], @@ -1862,9 +1858,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", - "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.17.tgz", + "integrity": "sha512-RNLCDmLP5kCWAJR+ItLM3cHxzXRTe4N00TQyQiimq+lyqVqZWGPAvcyfUBM0isE79eEZhIuGN09rAz8EL5KdLA==", "cpu": [ "x64" ], @@ -1878,9 +1874,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", - "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.17.tgz", + "integrity": "sha512-PAXswI5+cQq3Pann7FNdcpSUrhrql3wKjj3gVkmuz6OHhqqYxKvi6GgRBoaHjaG22HV/ZZEgF9TlS+9ftHVigA==", "cpu": [ "x64" ], @@ -1894,9 +1890,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", - "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.17.tgz", + "integrity": "sha512-V63egsWKnx/4V0FMYkr9NXWrKTB5qFftKGKuZKFIrAkO/7EWLFnbBZNM1CvJ6Sis+XBdPws2YQSHF1Gqf1oj/Q==", "cpu": [ "x64" ], @@ -1910,9 +1906,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", - "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.17.tgz", + "integrity": "sha512-YtUXLdVnd6YBSYlZODjWzH+KzbaubV0YVd6UxSfoFfa5PtNJNaW+1i+Hcmjpg2nEe0YXUCNF5bkKy1NnBv1y7Q==", "cpu": [ "arm64" ], @@ -1926,9 +1922,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", - "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.17.tgz", + "integrity": "sha512-yczSLRbDdReCO74Yfc5tKG0izzm+lPMYyO1fFTcn0QNwnKmc3K+HdxZWLGKg4pZVte7XVgcFku7TIZNbWEJdeQ==", "cpu": [ "ia32" ], @@ -1942,9 +1938,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", - "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.17.tgz", + "integrity": "sha512-FNZw7H3aqhF9OyRQbDDnzUApDXfC1N6fgBhkqEO2jvYCJ+DxMTfZVqg3AX0R1khg1wHTBRD5SdcibSJ+XF6bFg==", "cpu": [ "x64" ], @@ -1957,16 +1953,40 @@ "node": ">=12" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", + "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", + "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", + "espree": "^9.5.1", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -1975,12 +1995,15 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2004,35 +2027,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/js": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.38.0.tgz", + "integrity": "sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@fontsource/material-icons": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/@fontsource/material-icons/-/material-icons-4.5.4.tgz", "integrity": "sha512-YGmXkkEdu6EIgpFKNmB/nIXzZocwSmbI01Ninpmml8x8BT0M6RR++V1KqOfpzZ6Cw/FQ2/KYonQ3x4IY/4VRRA==" }, "node_modules/@fontsource/roboto-mono": { - "version": "4.5.8", - "resolved": "https://registry.npmjs.org/@fontsource/roboto-mono/-/roboto-mono-4.5.8.tgz", - "integrity": "sha512-AW44UkbQD0w1CT5mzDbsvhGZ6/bb0YmZzoELj6Sx8vcVEzcbYGUdt2Dtl5zqlOuYMWQFY1mniwWyVv+Bm/lVxw==" + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@fontsource/roboto-mono/-/roboto-mono-4.5.10.tgz", + "integrity": "sha512-KrJdmkqz6DszT2wV/bbhXef4r0hV3B0vw2mAqei8A2kRnvq+gcJLmmIeQ94vu9VEXrUQzos5M9lH1TAAXpRphw==" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "engines": { + "node": ">=12.22" + }, "funding": { "type": "github", "url": "https://github.com/sponsors/nzakas" @@ -2051,12 +2086,13 @@ "dev": true }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" @@ -2079,41 +2115,33 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, - "node_modules/@jridgewell/sourcemap-codec": { + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2196,16 +2224,16 @@ "integrity": "sha512-REXrCKQaT2shJ3p2Rpq1ZYV4iUeAOUFKnLN2KteQWtB5HQpB8b+w5xBGI+TcnY0FUhx92fbKPYTTvCftNZF4Jw==" }, "node_modules/@pixi/particle-emitter": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@pixi/particle-emitter/-/particle-emitter-5.0.7.tgz", - "integrity": "sha512-g0vf+z2pFr+znJEzAii6T7CfMAKsCZuRc8bVY2znJDYxEKoAuU+XuqzHtOkGeR/VuiNCuJhMFLh+BDfXN4Fubw==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@pixi/particle-emitter/-/particle-emitter-5.0.8.tgz", + "integrity": "sha512-OzuZ4+esQo+zJ0u3htuNHHMAE8Ixmr3nz3tEfrTGZHje1vnGyie3ANQj9F0V4OM47oi9jd70njVCmeb7bTkS9A==", "peerDependencies": { - "@pixi/constants": "^6.0.4", - "@pixi/core": "^6.0.4", - "@pixi/display": "^6.0.4", - "@pixi/math": "^6.0.4", - "@pixi/sprite": "^6.0.4", - "@pixi/ticker": "^6.0.4" + "@pixi/constants": ">=6.0.4 <8.0.0", + "@pixi/core": ">=6.0.4 <8.0.0", + "@pixi/display": ">=6.0.4 <8.0.0", + "@pixi/math": ">=6.0.4 <8.0.0", + "@pixi/sprite": ">=6.0.4 <8.0.0", + "@pixi/ticker": ">=6.0.4 <8.0.0" } }, "node_modules/@pixi/runner": { @@ -2389,9 +2417,9 @@ } }, "node_modules/@rushstack/eslint-patch": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz", - "integrity": "sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", + "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", "dev": true }, "node_modules/@surma/rollup-plugin-off-main-thread": { @@ -2447,15 +2475,19 @@ "dev": true }, "node_modules/@types/lz-string": { - "version": "1.3.34", - "resolved": "https://registry.npmjs.org/@types/lz-string/-/lz-string-1.3.34.tgz", - "integrity": "sha512-j6G1e8DULJx3ONf6NdR5JiR2ZY3K3PaaqiEuKYkLQO0Czfi1AzrtjfnfCROyWGeDd5IVMKCwsgSmMip9OWijow==", - "dev": true + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-s84fKOrzqqNCAPljhVyC5TjAo6BH4jKHw9NRNFNiRUY5QSgZCmVm5XILlWbisiKl+0OcS7eWihmKGS5akc2iQw==", + "deprecated": "This is a stub types definition. lz-string provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "lz-string": "*" + } }, "node_modules/@types/node": { - "version": "18.7.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.9.tgz", - "integrity": "sha512-0N5Y1XAdcl865nDdjbO0m3T6FdmQ4ijE89/urOHLREyTXbpMWbSafx9y7XIsgWGtwUP2iYTinLyyW3FatAxBLQ==" + "version": "18.15.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.12.tgz", + "integrity": "sha512-Wha1UwsB3CYdqUm2PPzh/1gujGCNtWVUYF0mB00fJFoR4gTyWTDPjSm+zBF787Ahw8vSGgBja90MkgFwvB86Dg==" }, "node_modules/@types/offscreencanvas": { "version": "2019.7.0", @@ -2470,24 +2502,31 @@ "@types/node": "*" } }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "node_modules/@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz", - "integrity": "sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.0.tgz", + "integrity": "sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/type-utils": "5.33.1", - "@typescript-eslint/utils": "5.33.1", + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.0", + "@typescript-eslint/type-utils": "5.59.0", + "@typescript-eslint/utils": "5.59.0", "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", - "regexpp": "^3.2.0", + "natural-compare-lite": "^1.4.0", "semver": "^7.3.7", "tsutils": "^3.21.0" }, @@ -2508,10 +2547,22 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2523,15 +2574,21 @@ "node": ">=10" } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@typescript-eslint/parser": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz", - "integrity": "sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.0.tgz", + "integrity": "sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/typescript-estree": "5.33.1", + "@typescript-eslint/scope-manager": "5.59.0", + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/typescript-estree": "5.59.0", "debug": "^4.3.4" }, "engines": { @@ -2551,13 +2608,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz", - "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.0.tgz", + "integrity": "sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/visitor-keys": "5.33.1" + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/visitor-keys": "5.59.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2568,12 +2625,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz", - "integrity": "sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.0.tgz", + "integrity": "sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.33.1", + "@typescript-eslint/typescript-estree": "5.59.0", + "@typescript-eslint/utils": "5.59.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -2594,9 +2652,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz", - "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.0.tgz", + "integrity": "sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2607,13 +2665,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz", - "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz", + "integrity": "sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/visitor-keys": "5.33.1", + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/visitor-keys": "5.59.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2633,10 +2691,22 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2648,18 +2718,26 @@ "node": ">=10" } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@typescript-eslint/utils": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.1.tgz", - "integrity": "sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.0.tgz", + "integrity": "sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==", "dev": true, "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/typescript-estree": "5.33.1", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.0", + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/typescript-estree": "5.59.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "semver": "^7.3.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2672,13 +2750,46 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz", - "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==", + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.33.1", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz", + "integrity": "sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -2718,23 +2829,23 @@ } }, "node_modules/@vitest/expect": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.29.3.tgz", - "integrity": "sha512-z/0JqBqqrdtrT/wzxNrWC76EpkOHdl+SvuNGxWulLaoluygntYyG5wJul5u/rQs5875zfFz/F+JaDf90SkLUIg==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.29.8.tgz", + "integrity": "sha512-xlcVXn5I5oTq6NiZSY3ykyWixBxr5mG8HYtjvpgg6KaqHm0mvhX18xuwl5YGxIRNt/A5jidd7CWcNHrSvgaQqQ==", "dev": true, "dependencies": { - "@vitest/spy": "0.29.3", - "@vitest/utils": "0.29.3", + "@vitest/spy": "0.29.8", + "@vitest/utils": "0.29.8", "chai": "^4.3.7" } }, "node_modules/@vitest/runner": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.29.3.tgz", - "integrity": "sha512-XLi8ctbvOWhUWmuvBUSIBf8POEDH4zCh6bOuVxm/KGfARpgmVF1ku+vVNvyq85va+7qXxtl+MFmzyXQ2xzhAvw==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.29.8.tgz", + "integrity": "sha512-FzdhnRDwEr/A3Oo1jtIk/B952BBvP32n1ObMEb23oEJNO+qO5cBet6M2XWIDQmA7BDKGKvmhUf2naXyp/2JEwQ==", "dev": true, "dependencies": { - "@vitest/utils": "0.29.3", + "@vitest/utils": "0.29.8", "p-limit": "^4.0.0", "pathe": "^1.1.0" } @@ -2767,18 +2878,18 @@ } }, "node_modules/@vitest/spy": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.29.3.tgz", - "integrity": "sha512-LLpCb1oOCOZcBm0/Oxbr1DQTuKLRBsSIHyLYof7z4QVE8/v8NcZKdORjMUq645fcfX55+nLXwU/1AQ+c2rND+w==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.29.8.tgz", + "integrity": "sha512-VdjBe9w34vOMl5I5mYEzNX8inTxrZ+tYUVk9jxaZJmHFwmDFC/GV3KBFTA/JKswr3XHvZL+FE/yq5EVhb6pSAw==", "dev": true, "dependencies": { "tinyspy": "^1.0.2" } }, "node_modules/@vitest/utils": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.29.3.tgz", - "integrity": "sha512-hg4Ff8AM1GtUnLpUJlNMxrf9f4lZr/xRJjh3uJ0QFP+vjaW82HAxKrmeBmLnhc8Os2eRf+f+VBu4ts7TafPPkA==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.29.8.tgz", + "integrity": "sha512-qGzuf3vrTbnoY+RjjVVIBYfuWMjn3UMUqyQtdGNZ6ZIIyte7B37exj6LaVkrZiUTvzSadVvO/tJm8AEgbGCBPg==", "dev": true, "dependencies": { "cli-truncate": "^3.1.0", @@ -2850,36 +2961,36 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", - "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz", + "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==", "dependencies": { "@babel/parser": "^7.16.4", - "@vue/shared": "3.2.37", + "@vue/shared": "3.2.47", "estree-walker": "^2.0.2", "source-map": "^0.6.1" } }, "node_modules/@vue/compiler-dom": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", - "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz", + "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==", "dependencies": { - "@vue/compiler-core": "3.2.37", - "@vue/shared": "3.2.37" + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", - "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", + "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", "dependencies": { "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.37", - "@vue/compiler-dom": "3.2.37", - "@vue/compiler-ssr": "3.2.37", - "@vue/reactivity-transform": "3.2.37", - "@vue/shared": "3.2.37", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-ssr": "3.2.47", + "@vue/reactivity-transform": "3.2.47", + "@vue/shared": "3.2.47", "estree-walker": "^2.0.2", "magic-string": "^0.25.7", "postcss": "^8.1.10", @@ -2887,18 +2998,18 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", - "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz", + "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==", "dependencies": { - "@vue/compiler-dom": "3.2.37", - "@vue/shared": "3.2.37" + "@vue/compiler-dom": "3.2.47", + "@vue/shared": "3.2.47" } }, "node_modules/@vue/eslint-config-prettier": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.0.0.tgz", - "integrity": "sha512-/CTc6ML3Wta1tCe1gUeO0EYnVXfo3nJXsIhZ8WJr3sov+cGASr6yuiibJTL6lmIBm7GobopToOuB3B6AWyV0Iw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz", + "integrity": "sha512-Pv/lVr0bAzSIHLd9iz0KnvAr4GKyCEl+h52bc4e5yWuDVtLgFwycF7nrbWTAQAS+FU6q1geVd07lc6EWfJiWKQ==", "dev": true, "dependencies": { "eslint-config-prettier": "^8.3.0", @@ -2928,60 +3039,60 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", - "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.47.tgz", + "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==", "dependencies": { - "@vue/shared": "3.2.37" + "@vue/shared": "3.2.47" } }, "node_modules/@vue/reactivity-transform": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz", - "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz", + "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==", "dependencies": { "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.37", - "@vue/shared": "3.2.37", + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47", "estree-walker": "^2.0.2", "magic-string": "^0.25.7" } }, "node_modules/@vue/runtime-core": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.37.tgz", - "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.47.tgz", + "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==", "dependencies": { - "@vue/reactivity": "3.2.37", - "@vue/shared": "3.2.37" + "@vue/reactivity": "3.2.47", + "@vue/shared": "3.2.47" } }, "node_modules/@vue/runtime-dom": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", - "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz", + "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==", "dependencies": { - "@vue/runtime-core": "3.2.37", - "@vue/shared": "3.2.37", + "@vue/runtime-core": "3.2.47", + "@vue/shared": "3.2.47", "csstype": "^2.6.8" } }, "node_modules/@vue/server-renderer": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.37.tgz", - "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.47.tgz", + "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==", "dependencies": { - "@vue/compiler-ssr": "3.2.37", - "@vue/shared": "3.2.37" + "@vue/compiler-ssr": "3.2.47", + "@vue/shared": "3.2.47" }, "peerDependencies": { - "vue": "3.2.37" + "vue": "3.2.47" } }, "node_modules/@vue/shared": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz", - "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz", + "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==" }, "node_modules/abab": { "version": "2.0.6", @@ -3001,25 +3112,13 @@ } }, "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", "dev": true, "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" } }, "node_modules/acorn-jsx": { @@ -3032,9 +3131,9 @@ } }, "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true, "engines": { "node": ">=0.4.0" @@ -3096,12 +3195,29 @@ "node": ">=4" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -3139,21 +3255,24 @@ "node": ">= 4.0.0" } }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz", - "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dependencies": { "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.2", + "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" }, "peerDependencies": { @@ -3161,23 +3280,23 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", - "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz", - "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.2" + "@babel/helper-define-polyfill-provider": "^0.3.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -3220,16 +3339,10 @@ "node": ">=8" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "node_modules/browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "funding": [ { "type": "opencollective", @@ -3241,10 +3354,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { "browserslist": "cli.js" @@ -3311,9 +3424,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001380", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001380.tgz", - "integrity": "sha512-OO+pPubxx16lkI7TVrbFpde8XHz66SMwstl1YWpg6uMGw56XnhYVwtPIjvX4kYpzwMwQKr4DDce394E03dQPGg==", + "version": "1.0.30001480", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001480.tgz", + "integrity": "sha512-q7cpoPPvZYgtyC4VaBSN0Bt+PJ4c4EYRf0DrduInOz2SkFpHD5p3LnvEpqBp7UnJn+8x1Ogl1s38saUxe+ihQQ==", "funding": [ { "type": "opencollective", @@ -3322,6 +3435,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -3407,9 +3524,12 @@ } }, "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } }, "node_modules/common-tags": { "version": "1.8.2", @@ -3425,12 +3545,9 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/core-js": { "version": "2.6.12", @@ -3440,26 +3557,17 @@ "hasInstallScript": true }, "node_modules/core-js-compat": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.24.1.tgz", - "integrity": "sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw==", + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", + "integrity": "sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==", "dependencies": { - "browserslist": "^4.21.3", - "semver": "7.0.0" + "browserslist": "^4.21.5" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3520,9 +3628,9 @@ "dev": true }, "node_modules/csstype": { - "version": "2.6.20", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", - "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" + "version": "2.6.21", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, "node_modules/data-urls": { "version": "3.0.2", @@ -3555,9 +3663,9 @@ } }, "node_modules/decimal.js": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz", - "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true }, "node_modules/deep-eql": { @@ -3579,17 +3687,17 @@ "dev": true }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "engines": { "node": ">=0.10.0" } }, "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -3668,9 +3776,9 @@ "dev": true }, "node_modules/ejs": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", "dependencies": { "jake": "^10.8.5" }, @@ -3682,9 +3790,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.225", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.225.tgz", - "integrity": "sha512-ICHvGaCIQR3P88uK8aRtx8gmejbVJyC6bB4LEC3anzBrIzdzC7aiZHY4iFfXhN4st6I7lMO0x4sgBHf/7kBvRw==" + "version": "1.4.368", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.368.tgz", + "integrity": "sha512-e2aeCAixCj9M7nJxdB/wDjO6mbYX+lJJxSJCXDzlr5YPGYVofuJwGN9nKg2o6wWInjX6XmxRinn3AeJMK81ltw==" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -3693,9 +3801,9 @@ "dev": true }, "node_modules/entities": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz", - "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "engines": { "node": ">=0.12" @@ -3705,33 +3813,44 @@ } }, "node_modules/es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", + "get-intrinsic": "^1.2.0", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", + "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" }, "engines": { "node": ">= 0.4" @@ -3740,6 +3859,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -4190,14 +4322,18 @@ } }, "node_modules/eslint": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", - "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz", + "integrity": "sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.2", + "@eslint/js": "8.38.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -4205,23 +4341,22 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", - "esquery": "^1.4.0", + "eslint-visitor-keys": "^3.4.0", + "espree": "^9.5.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -4229,11 +4364,9 @@ "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -4246,9 +4379,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -4299,10 +4432,23 @@ "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/eslint-plugin-vue/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/eslint-plugin-vue/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dev": true, "peer": true, "dependencies": { @@ -4315,6 +4461,13 @@ "node": ">=10" } }, + "node_modules/eslint-plugin-vue/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -4333,6 +4486,7 @@ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, + "peer": true, "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -4351,17 +4505,21 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, + "peer": true, "engines": { "node": ">=10" } }, "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", + "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/ansi-styles": { @@ -4426,9 +4584,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -4436,6 +4594,9 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/estraverse": { @@ -4448,9 +4609,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -4496,14 +4657,14 @@ } }, "node_modules/espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", + "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", "dev": true, "dependencies": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4526,9 +4687,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -4607,9 +4768,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -4644,9 +4805,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dependencies": { "reusify": "^1.0.4" } @@ -4680,9 +4841,9 @@ } }, "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4736,6 +4897,14 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -4812,12 +4981,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -4844,9 +5007,9 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -4920,6 +5083,20 @@ "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -4945,10 +5122,21 @@ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/grapheme-splitter": { "version": "1.0.4", @@ -4994,6 +5182,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -5037,9 +5236,9 @@ } }, "node_modules/html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "engines": { "node": ">=8" }, @@ -5087,14 +5286,14 @@ } }, "node_modules/idb": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.2.tgz", - "integrity": "sha512-jjKrT1EnyZewQ/gCBb/eyiYrhGzws2FeY92Yx8qT9S9GeQAmo4JFVIiWRIfKW/6Ob9A+UDAOW9j9jn58fy2HIg==" + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" @@ -5140,11 +5339,11 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -5152,6 +5351,19 @@ "node": ">= 0.4" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -5179,9 +5391,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "engines": { "node": ">= 0.4" }, @@ -5190,9 +5402,9 @@ } }, "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", + "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", "dependencies": { "has": "^1.0.3" }, @@ -5291,6 +5503,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -5378,6 +5599,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -5514,6 +5753,16 @@ "node": ">=8" } }, + "node_modules/js-sdsl": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", + "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5532,18 +5781,18 @@ } }, "node_modules/jsdom": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz", - "integrity": "sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==", + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", "dev": true, "dependencies": { "abab": "^2.0.6", - "acorn": "^8.7.1", - "acorn-globals": "^6.0.0", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", "cssom": "^0.5.0", "cssstyle": "^2.3.0", "data-urls": "^3.0.2", - "decimal.js": "^10.3.1", + "decimal.js": "^10.4.2", "domexception": "^4.0.0", "escodegen": "^2.0.0", "form-data": "^4.0.0", @@ -5551,18 +5800,17 @@ "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.1", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "^7.0.0", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^3.0.0", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^2.0.0", "whatwg-mimetype": "^3.0.0", "whatwg-url": "^11.0.0", - "ws": "^8.8.0", + "ws": "^8.11.0", "xml-name-validator": "^4.0.0" }, "engines": { @@ -5606,9 +5854,9 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "bin": { "json5": "lib/cli.js" }, @@ -5670,10 +5918,15 @@ "node": ">= 0.8.0" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, "node_modules/local-pkg": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", - "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", "dev": true, "engines": { "node": ">=14" @@ -5728,21 +5981,17 @@ } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "yallist": "^3.0.2" } }, "node_modules/lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "bin": { "lz-string": "bin/bin.js" } @@ -5813,9 +6062,12 @@ } }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/mlly": { "version": "1.2.0", @@ -5834,6 +6086,16 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nanoevents": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/nanoevents/-/nanoevents-6.0.2.tgz", @@ -5843,9 +6105,15 @@ } }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -5859,15 +6127,21 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/ngraph.events": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-1.2.2.tgz", "integrity": "sha512-JsUbEOzANskax+WSYiAPETemLWYXmixuPAlmZmhIbIj6FH/WDgEGCGnRwUQBK0GjOnVm8Ui+e5IJ+5VZ4e32eQ==" }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "node_modules/nth-check": { "version": "2.1.1", @@ -5883,15 +6157,23 @@ } }, "node_modules/nwsapi": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", - "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.4.tgz", + "integrity": "sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==", "dev": true }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5999,12 +6281,12 @@ } }, "node_modules/parse5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", - "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dev": true, "dependencies": { - "entities": "^4.3.0" + "entities": "^4.4.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -6081,6 +6363,14 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "engines": { + "node": ">= 6" + } + }, "node_modules/pkg-types": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.2.tgz", @@ -6093,9 +6383,9 @@ } }, "node_modules/postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "version": "8.4.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", + "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", "funding": [ { "type": "opencollective", @@ -6104,10 +6394,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -6116,9 +6410,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", "dev": true, "peer": true, "dependencies": { @@ -6139,9 +6433,9 @@ } }, "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -6166,9 +6460,9 @@ } }, "node_modules/pretty-bytes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.0.0.tgz", - "integrity": "sha512-6UqkYefdogmzqAZWzJ7laYeJnaXDy2/J+ZqiiMtS7t7OfpXWTlaeGMwX8U6EFvPV/YWWEKRkS8hKS4k60WHTOg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.0.tgz", + "integrity": "sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ==", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -6209,9 +6503,9 @@ "dev": true }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "engines": { "node": ">=6" } @@ -6226,6 +6520,12 @@ "node": ">=0.4.x" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6260,13 +6560,14 @@ "dev": true }, "node_modules/recrawl-sync": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recrawl-sync/-/recrawl-sync-2.2.2.tgz", - "integrity": "sha512-E2sI4F25Fu2nrfV+KsnC7/qfk/spQIYXlonfQoS4rwxeNK5BjxnLPbWiRXHVXPwYBOTWtPX5765kTm/zJiL+LQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recrawl-sync/-/recrawl-sync-2.2.3.tgz", + "integrity": "sha512-vSaTR9t+cpxlskkdUFrsEpnf67kSmPk66yAGT1fZPrDudxQjoMzPgQhSMImQ0pAw5k0NPirefQfhopSjhdUtpQ==", "dependencies": { "@cush/relative": "^1.0.0", "glob-regex": "^0.3.0", "slash": "^3.0.0", + "sucrase": "^3.20.3", "tslib": "^1.9.3" } }, @@ -6276,9 +6577,9 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "node_modules/regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dependencies": { "regenerate": "^1.4.2" }, @@ -6287,26 +6588,26 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -6315,43 +6616,26 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dependencies": { + "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" + "unicode-match-property-value-ecmascript": "^2.1.0" }, "engines": { "node": ">=4" } }, - "node_modules/regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" - }, "node_modules/regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dependencies": { "jsesc": "~0.5.0" }, @@ -6375,12 +6659,18 @@ "node": ">=0.10.0" } }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.11.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -6442,6 +6732,7 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", "dependencies": { "@babel/code-frame": "^7.10.4", "jest-worker": "^26.2.1", @@ -6475,9 +6766,36 @@ } }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/safer-buffer": { "version": "2.1.2", @@ -6622,7 +6940,8 @@ "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" }, "node_modules/stackback": { "version": "0.0.2", @@ -6681,44 +7000,60 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", + "regexp.prototype.flags": "^1.4.3", "side-channel": "^1.0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6789,6 +7124,46 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/sucrase": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", + "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -6848,9 +7223,9 @@ } }, "node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", + "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -6864,22 +7239,46 @@ "node": ">=10" } }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/tinybench": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.3.1.tgz", - "integrity": "sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.4.0.tgz", + "integrity": "sha512-iyziEiyFxX4kyxSp+MtY1oCH/lvjH3PxFN8PGCDeqcZWAJ/i+9y+nL85w99PxVzrIvew/GSkSbDYtiGVa85Afg==", "dev": true }, "node_modules/tinypool": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.1.tgz", - "integrity": "sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.4.0.tgz", + "integrity": "sha512-2ksntHOKf893wSAH4z/+JbPpi92esw8Gn9N2deXX+B0EO92hexAVI9GIZZPx7P5aYo5KULfeOSt3kMOmSOy6uA==", "dev": true, "engines": { "node": ">=14.0.0" @@ -6914,14 +7313,15 @@ } }, "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", "dev": true, "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", - "universalify": "^0.1.2" + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { "node": ">=6" @@ -6939,12 +7339,17 @@ "node": ">=12" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, "node_modules/tsconfig-paths": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", - "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dependencies": { - "json5": "^2.2.1", + "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" }, @@ -7004,6 +7409,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typescript": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", @@ -7058,17 +7476,17 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "engines": { "node": ">=4" } @@ -7085,9 +7503,9 @@ } }, "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, "engines": { "node": ">= 4.0.0" @@ -7103,9 +7521,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "funding": [ { "type": "opencollective", @@ -7114,6 +7532,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -7121,7 +7543,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -7145,6 +7567,16 @@ "querystring": "0.2.0" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/url/node_modules/punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", @@ -7158,12 +7590,6 @@ "dev": true, "peer": true }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/vite": { "version": "2.9.15", "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.15.tgz", @@ -7201,9 +7627,9 @@ } }, "node_modules/vite-node": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.29.3.tgz", - "integrity": "sha512-QYzYSA4Yt2IiduEjYbccfZQfxKp+T1Do8/HEpSX/G5WIECTFKJADwLs9c94aQH4o0A+UtCKU61lj1m5KvbxxQA==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.29.8.tgz", + "integrity": "sha512-b6OtCXfk65L6SElVM20q5G546yu10/kNrhg08afEoWlFRJXFq9/6glsvSVY+aI6YeC1tu2TtAqI2jHEQmOmsFw==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -7224,9 +7650,9 @@ } }, "node_modules/vite-node/node_modules/@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.17.tgz", + "integrity": "sha512-WVMBtcDpATjaGfWfp6u9dANIqmU9r37SY8wgAivuKmgKHE+bWSuv0qXEFt/p3qXQYxJIGXQQv6hHcm7iWhWjiw==", "cpu": [ "loong64" ], @@ -7240,9 +7666,9 @@ } }, "node_modules/vite-node/node_modules/esbuild": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", - "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.17.tgz", + "integrity": "sha512-/jUywtAymR8jR4qsa2RujlAF7Krpt5VWi72Q2yuLD4e/hvtNcFQ0I1j8m/bxq238pf3/0KO5yuXNpuLx8BE1KA==", "dev": true, "hasInstallScript": true, "bin": { @@ -7252,34 +7678,34 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" + "@esbuild/android-arm": "0.17.17", + "@esbuild/android-arm64": "0.17.17", + "@esbuild/android-x64": "0.17.17", + "@esbuild/darwin-arm64": "0.17.17", + "@esbuild/darwin-x64": "0.17.17", + "@esbuild/freebsd-arm64": "0.17.17", + "@esbuild/freebsd-x64": "0.17.17", + "@esbuild/linux-arm": "0.17.17", + "@esbuild/linux-arm64": "0.17.17", + "@esbuild/linux-ia32": "0.17.17", + "@esbuild/linux-loong64": "0.17.17", + "@esbuild/linux-mips64el": "0.17.17", + "@esbuild/linux-ppc64": "0.17.17", + "@esbuild/linux-riscv64": "0.17.17", + "@esbuild/linux-s390x": "0.17.17", + "@esbuild/linux-x64": "0.17.17", + "@esbuild/netbsd-x64": "0.17.17", + "@esbuild/openbsd-x64": "0.17.17", + "@esbuild/sunos-x64": "0.17.17", + "@esbuild/win32-arm64": "0.17.17", + "@esbuild/win32-ia32": "0.17.17", + "@esbuild/win32-x64": "0.17.17" } }, "node_modules/vite-node/node_modules/rollup": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.19.1.tgz", - "integrity": "sha512-lAbrdN7neYCg/8WaoWn/ckzCtz+jr70GFfYdlf50OF7387HTg+wiuiqJRFYawwSPpqfqDNYqK7smY/ks2iAudg==", + "version": "3.20.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.6.tgz", + "integrity": "sha512-2yEB3nQXp/tBQDN0hJScJQheXdvU2wFhh6ld7K/aiZ1vYcak6N/BKjY1QrU6BvO2JWYS8bEs14FRaxXosxy2zw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -7293,15 +7719,15 @@ } }, "node_modules/vite-node/node_modules/vite": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.4.tgz", - "integrity": "sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.2.tgz", + "integrity": "sha512-PcNtT5HeDxb3QaSqFYkEum8f5sCVe0R3WK20qxgIvNBZPXU/Obxs/+ubBMeE7nLWeCo2LDzv+8hRYSlcaSehig==", "dev": true, "dependencies": { - "esbuild": "^0.16.14", + "esbuild": "^0.17.5", "postcss": "^8.4.21", "resolve": "^1.22.1", - "rollup": "^3.10.0" + "rollup": "^3.18.0" }, "bin": { "vite": "bin/vite.js" @@ -7342,9 +7768,9 @@ } }, "node_modules/vite-plugin-pwa": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.12.3.tgz", - "integrity": "sha512-gmYdIVXpmBuNjzbJFPZFzxWYrX4lHqwMAlOtjmXBbxApiHjx9QPXKQPJjSpeTeosLKvVbNcKSAAhfxMda0QVNQ==", + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.12.8.tgz", + "integrity": "sha512-pSiFHmnJGMQJJL8aJzQ8SaraZBSBPMGvGUkCNzheIq9UQCEk/eP3UmANNmS9eupuhIpTK8AdxTOHcaMcAqAbCA==", "dependencies": { "debug": "^4.3.4", "fast-glob": "^3.2.11", @@ -7363,9 +7789,9 @@ } }, "node_modules/vite-tsconfig-paths": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-3.5.0.tgz", - "integrity": "sha512-NKIubr7gXgh/3uniQaOytSg+aKWPrjquP6anAy+zCWEn6h9fB8z2/qdlfQrTgZWaXJ2pHVlllrSdRZltHn9P4g==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-3.6.0.tgz", + "integrity": "sha512-UfsPYonxLqPD633X8cWcPFVuYzx/CMNHAjZTasYwX69sXpa4gNmQkR0XCjj82h7zhLGdTWagMjC1qfb9S+zv0A==", "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", @@ -7377,18 +7803,18 @@ } }, "node_modules/vitest": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.29.3.tgz", - "integrity": "sha512-muMsbXnZsrzDGiyqf/09BKQsGeUxxlyLeLK/sFFM4EXdURPQRv8y7dco32DXaRORYP0bvyN19C835dT23mL0ow==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.29.8.tgz", + "integrity": "sha512-JIAVi2GK5cvA6awGpH0HvH/gEG9PZ0a/WoxdiV3PmqK+3CjQMf8c+J/Vhv4mdZ2nRyXFw66sAg6qz7VNkaHfDQ==", "dev": true, "dependencies": { "@types/chai": "^4.3.4", "@types/chai-subset": "^1.3.3", "@types/node": "*", - "@vitest/expect": "0.29.3", - "@vitest/runner": "0.29.3", - "@vitest/spy": "0.29.3", - "@vitest/utils": "0.29.3", + "@vitest/expect": "0.29.8", + "@vitest/runner": "0.29.8", + "@vitest/spy": "0.29.8", + "@vitest/utils": "0.29.8", "acorn": "^8.8.1", "acorn-walk": "^8.2.0", "cac": "^6.7.14", @@ -7401,10 +7827,10 @@ "std-env": "^3.3.1", "strip-literal": "^1.0.0", "tinybench": "^2.3.1", - "tinypool": "^0.3.1", + "tinypool": "^0.4.0", "tinyspy": "^1.0.2", "vite": "^3.0.0 || ^4.0.0", - "vite-node": "0.29.3", + "vite-node": "0.29.8", "why-is-node-running": "^2.2.2" }, "bin": { @@ -7421,7 +7847,10 @@ "@vitest/browser": "*", "@vitest/ui": "*", "happy-dom": "*", - "jsdom": "*" + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" }, "peerDependenciesMeta": { "@edge-runtime/vm": { @@ -7438,13 +7867,22 @@ }, "jsdom": { "optional": true + }, + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true } } }, "node_modules/vitest/node_modules/@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.17.tgz", + "integrity": "sha512-WVMBtcDpATjaGfWfp6u9dANIqmU9r37SY8wgAivuKmgKHE+bWSuv0qXEFt/p3qXQYxJIGXQQv6hHcm7iWhWjiw==", "cpu": [ "loong64" ], @@ -7457,19 +7895,10 @@ "node": ">=12" } }, - "node_modules/vitest/node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/vitest/node_modules/esbuild": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", - "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.17.tgz", + "integrity": "sha512-/jUywtAymR8jR4qsa2RujlAF7Krpt5VWi72Q2yuLD4e/hvtNcFQ0I1j8m/bxq238pf3/0KO5yuXNpuLx8BE1KA==", "dev": true, "hasInstallScript": true, "bin": { @@ -7479,34 +7908,34 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" + "@esbuild/android-arm": "0.17.17", + "@esbuild/android-arm64": "0.17.17", + "@esbuild/android-x64": "0.17.17", + "@esbuild/darwin-arm64": "0.17.17", + "@esbuild/darwin-x64": "0.17.17", + "@esbuild/freebsd-arm64": "0.17.17", + "@esbuild/freebsd-x64": "0.17.17", + "@esbuild/linux-arm": "0.17.17", + "@esbuild/linux-arm64": "0.17.17", + "@esbuild/linux-ia32": "0.17.17", + "@esbuild/linux-loong64": "0.17.17", + "@esbuild/linux-mips64el": "0.17.17", + "@esbuild/linux-ppc64": "0.17.17", + "@esbuild/linux-riscv64": "0.17.17", + "@esbuild/linux-s390x": "0.17.17", + "@esbuild/linux-x64": "0.17.17", + "@esbuild/netbsd-x64": "0.17.17", + "@esbuild/openbsd-x64": "0.17.17", + "@esbuild/sunos-x64": "0.17.17", + "@esbuild/win32-arm64": "0.17.17", + "@esbuild/win32-ia32": "0.17.17", + "@esbuild/win32-x64": "0.17.17" } }, "node_modules/vitest/node_modules/rollup": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.15.0.tgz", - "integrity": "sha512-F9hrCAhnp5/zx/7HYmftvsNBkMfLfk/dXUh73hPSM2E3CRgap65orDNJbLetoiUFwSAk6iHPLvBrZ5iHYvzqsg==", + "version": "3.20.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.6.tgz", + "integrity": "sha512-2yEB3nQXp/tBQDN0hJScJQheXdvU2wFhh6ld7K/aiZ1vYcak6N/BKjY1QrU6BvO2JWYS8bEs14FRaxXosxy2zw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -7520,15 +7949,15 @@ } }, "node_modules/vitest/node_modules/vite": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.1.tgz", - "integrity": "sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.2.tgz", + "integrity": "sha512-PcNtT5HeDxb3QaSqFYkEum8f5sCVe0R3WK20qxgIvNBZPXU/Obxs/+ubBMeE7nLWeCo2LDzv+8hRYSlcaSehig==", "dev": true, "dependencies": { - "esbuild": "^0.16.14", + "esbuild": "^0.17.5", "postcss": "^8.4.21", "resolve": "^1.22.1", - "rollup": "^3.10.0" + "rollup": "^3.18.0" }, "bin": { "vite": "bin/vite.js" @@ -7569,15 +7998,15 @@ } }, "node_modules/vue": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.37.tgz", - "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.47.tgz", + "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==", "dependencies": { - "@vue/compiler-dom": "3.2.37", - "@vue/compiler-sfc": "3.2.37", - "@vue/runtime-dom": "3.2.37", - "@vue/server-renderer": "3.2.37", - "@vue/shared": "3.2.37" + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-sfc": "3.2.47", + "@vue/runtime-dom": "3.2.47", + "@vue/server-renderer": "3.2.47", + "@vue/shared": "3.2.47" } }, "node_modules/vue-eslint-parser": { @@ -7605,9 +8034,9 @@ } }, "node_modules/vue-eslint-parser/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -7615,6 +8044,9 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/vue-eslint-parser/node_modules/estraverse": { @@ -7626,10 +8058,22 @@ "node": ">=4.0" } }, + "node_modules/vue-eslint-parser/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/vue-eslint-parser/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -7641,12 +8085,18 @@ "node": ">=10" } }, + "node_modules/vue-eslint-parser/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/vue-next-select": { - "version": "2.10.4", - "resolved": "https://registry.npmjs.org/vue-next-select/-/vue-next-select-2.10.4.tgz", - "integrity": "sha512-9Lg1mD2h9w6mm4gkXPyVMWhOdUPtA/JF9VrNyo6mqjkh4ktGLVQpNhygVBCg13RFHdEq3iqawjeFmp3FJq+CUw==", + "version": "2.10.5", + "resolved": "https://registry.npmjs.org/vue-next-select/-/vue-next-select-2.10.5.tgz", + "integrity": "sha512-O77bdbp2wj/Dkpd8XFv21EYXI8UtqgTxnKBsycCd2pUe4SAxKsT1h3MT+b7tuyGQV5udMpBYaUE445Z1VdHyUw==", "engines": { - "node": ">=10" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { "vue": "^3.2.0" @@ -7685,9 +8135,9 @@ } }, "node_modules/vue-transition-expand/node_modules/@vue/compiler-sfc": { - "version": "2.7.9", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.9.tgz", - "integrity": "sha512-TD2FvT0fPUezw5RVP4tfwTZnKHP0QjeEUb39y7tORvOJQTjbOuHJEk4GPHUPsRaTeQ8rjuKjntyrYcEIx+ODxg==", + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", + "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", "dependencies": { "@babel/parser": "^7.18.4", "postcss": "^8.4.14", @@ -7695,16 +8145,16 @@ } }, "node_modules/vue-transition-expand/node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/vue-transition-expand/node_modules/vue": { - "version": "2.7.9", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.9.tgz", - "integrity": "sha512-GeWCvAUkjzD5q4A3vgi8ka5r9bM6g8fmNmx/9VnHDKCaEzBcoVw+7UcQktZHrJ2jhlI+Zv8L57pMCIwM4h4MWg==", + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz", + "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", "dependencies": { - "@vue/compiler-sfc": "2.7.9", + "@vue/compiler-sfc": "2.7.14", "csstype": "^3.1.0" } }, @@ -7734,25 +8184,16 @@ "vue": "^3.0.1" } }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, "node_modules/w3c-xmlserializer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", - "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, "dependencies": { "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/webidl-conversions": { @@ -7833,6 +8274,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/why-is-node-running": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", @@ -7939,9 +8399,9 @@ } }, "node_modules/workbox-build/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -8120,16 +8580,16 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -8156,10 +8616,9 @@ "dev": true }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yocto-queue": { "version": "0.1.0", @@ -8176,69 +8635,58 @@ }, "dependencies": { "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "requires": { - "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", "requires": { "@babel/highlight": "^7.18.6" } }, "@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==" + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", + "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==" }, "@babel/core": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", - "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", + "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.10", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.10", - "@babel/types": "^7.18.10", + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.4", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.4", + "@babel/types": "^7.21.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" } }, "@babel/generator": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", - "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", + "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", "requires": { - "@babel/types": "^7.18.10", + "@babel/types": "^7.21.4", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } } }, "@babel/helper-annotate-as-pure": { @@ -8259,43 +8707,45 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", + "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", + "@babel/compat-data": "^7.21.4", + "@babel/helper-validator-option": "^7.21.0", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz", - "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", + "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/helper-split-export-declaration": "^7.18.6" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", - "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz", + "integrity": "sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" + "regexpu-core": "^5.3.1" } }, "@babel/helper-define-polyfill-provider": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", - "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "requires": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -8319,12 +8769,12 @@ } }, "@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" } }, "@babel/helper-hoist-variables": { @@ -8336,34 +8786,34 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "requires": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.21.0" } }, "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", + "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.21.4" } }, "@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" } }, "@babel/helper-optimise-call-expression": { @@ -8375,9 +8825,9 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==" + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" }, "@babel/helper-remap-async-to-generator": { "version": "7.18.9", @@ -8391,31 +8841,32 @@ } }, "@babel/helper-replace-supers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", - "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "requires": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.20.2" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", "requires": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.20.0" } }, "@babel/helper-split-export-declaration": { @@ -8427,39 +8878,39 @@ } }, "@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==" + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" }, "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==" + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==" }, "@babel/helper-wrap-function": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz", - "integrity": "sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", "requires": { - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.11", - "@babel/types": "^7.18.10" + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" } }, "@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "requires": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" } }, "@babel/highlight": { @@ -8473,9 +8924,9 @@ } }, "@babel/parser": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", - "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==" + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", + "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -8486,22 +8937,22 @@ } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", + "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.7" } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", - "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", "requires": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" } @@ -8516,12 +8967,12 @@ } }, "@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", + "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, @@ -8553,11 +9004,11 @@ } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", "requires": { - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, @@ -8580,15 +9031,15 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", - "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" + "@babel/plugin-transform-parameters": "^7.20.7" } }, "@babel/plugin-proposal-optional-catch-binding": { @@ -8601,12 +9052,12 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, @@ -8620,13 +9071,13 @@ } }, "@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", + "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, @@ -8680,11 +9131,11 @@ } }, "@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.19.0" } }, "@babel/plugin-syntax-import-meta": { @@ -8704,11 +9155,11 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", + "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -8776,29 +9227,29 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", + "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", + "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", "requires": { "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" } }, "@babel/plugin-transform-block-scoped-functions": { @@ -8810,42 +9261,44 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", - "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", + "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-classes": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz", - "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", + "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", + "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7" } }, "@babel/plugin-transform-destructuring": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz", - "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", + "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", "requires": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-dotall-regex": { @@ -8875,11 +9328,11 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", + "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-function-name": { @@ -8909,36 +9362,33 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", + "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz", - "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", + "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", "requires": { "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-identifier": "^7.19.1" } }, "@babel/plugin-transform-modules-umd": { @@ -8951,12 +9401,12 @@ } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", - "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", + "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-new-target": { @@ -8977,11 +9427,11 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", + "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-property-literals": { @@ -8993,12 +9443,12 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" } }, "@babel/plugin-transform-reserved-words": { @@ -9018,12 +9468,12 @@ } }, "@babel/plugin-transform-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz", - "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" } }, "@babel/plugin-transform-sticky-regex": { @@ -9051,13 +9501,14 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.12.tgz", - "integrity": "sha512-2vjjam0cum0miPkenUbQswKowuxs/NjMwIKEq0zwegRxXk12C9YOF9STXnaUptITOtOJHKHpzvvWYOjbm6tc0w==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz", + "integrity": "sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-typescript": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" } }, "@babel/plugin-transform-unicode-escapes": { @@ -9078,37 +9529,37 @@ } }, "@babel/preset-env": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", - "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.4.tgz", + "integrity": "sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==", "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-option": "^7.18.6", + "@babel/compat-data": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.18.10", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", + "@babel/plugin-proposal-async-generator-functions": "^7.20.7", "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.21.0", "@babel/plugin-proposal-dynamic-import": "^7.18.6", "@babel/plugin-proposal-export-namespace-from": "^7.18.9", "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.21.0", "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-import-assertions": "^7.20.0", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -9118,44 +9569,44 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.20.7", + "@babel/plugin-transform-async-to-generator": "^7.20.7", "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", - "@babel/plugin-transform-classes": "^7.18.9", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.9", + "@babel/plugin-transform-block-scoping": "^7.21.0", + "@babel/plugin-transform-classes": "^7.21.0", + "@babel/plugin-transform-computed-properties": "^7.20.7", + "@babel/plugin-transform-destructuring": "^7.21.3", "@babel/plugin-transform-dotall-regex": "^7.18.6", "@babel/plugin-transform-duplicate-keys": "^7.18.9", "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-for-of": "^7.21.0", "@babel/plugin-transform-function-name": "^7.18.9", "@babel/plugin-transform-literals": "^7.18.9", "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-amd": "^7.20.11", + "@babel/plugin-transform-modules-commonjs": "^7.21.2", + "@babel/plugin-transform-modules-systemjs": "^7.20.11", "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", "@babel/plugin-transform-new-target": "^7.18.6", "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-parameters": "^7.21.3", "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.20.5", "@babel/plugin-transform-reserved-words": "^7.18.6", "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-transform-spread": "^7.20.7", "@babel/plugin-transform-sticky-regex": "^7.18.6", "@babel/plugin-transform-template-literals": "^7.18.9", "@babel/plugin-transform-typeof-symbol": "^7.18.9", "@babel/plugin-transform-unicode-escapes": "^7.18.10", "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.10", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "core-js-compat": "^3.22.1", + "@babel/types": "^7.21.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", "semver": "^6.3.0" } }, @@ -9171,48 +9622,53 @@ "esutils": "^2.0.2" } }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, "@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", "requires": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" } }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "requires": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/traverse": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", - "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", + "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.11", - "@babel/types": "^7.18.10", + "@babel/parser": "^7.21.4", + "@babel/types": "^7.21.4", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", - "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", + "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", "requires": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } }, @@ -9222,72 +9678,72 @@ "integrity": "sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==" }, "@esbuild/android-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", - "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.17.tgz", + "integrity": "sha512-E6VAZwN7diCa3labs0GYvhEPL2M94WLF8A+czO8hfjREXxba8Ng7nM5VxV+9ihNXIY1iQO1XxUU4P7hbqbICxg==", "dev": true, "optional": true }, "@esbuild/android-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", - "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.17.tgz", + "integrity": "sha512-jaJ5IlmaDLFPNttv0ofcwy/cfeY4bh/n705Tgh+eLObbGtQBK3EPAu+CzL95JVE4nFAliyrnEu0d32Q5foavqg==", "dev": true, "optional": true }, "@esbuild/android-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", - "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.17.tgz", + "integrity": "sha512-446zpfJ3nioMC7ASvJB1pszHVskkw4u/9Eu8s5yvvsSDTzYh4p4ZIRj0DznSl3FBF0Z/mZfrKXTtt0QCoFmoHA==", "dev": true, "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", - "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.17.tgz", + "integrity": "sha512-m/gwyiBwH3jqfUabtq3GH31otL/0sE0l34XKpSIqR7NjQ/XHQ3lpmQHLHbG8AHTGCw8Ao059GvV08MS0bhFIJQ==", "dev": true, "optional": true }, "@esbuild/darwin-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", - "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.17.tgz", + "integrity": "sha512-4utIrsX9IykrqYaXR8ob9Ha2hAY2qLc6ohJ8c0CN1DR8yWeMrTgYFjgdeQ9LIoTOfLetXjuCu5TRPHT9yKYJVg==", "dev": true, "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", - "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.17.tgz", + "integrity": "sha512-4PxjQII/9ppOrpEwzQ1b0pXCsFLqy77i0GaHodrmzH9zq2/NEhHMAMJkJ635Ns4fyJPFOlHMz4AsklIyRqFZWA==", "dev": true, "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", - "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.17.tgz", + "integrity": "sha512-lQRS+4sW5S3P1sv0z2Ym807qMDfkmdhUYX30GRBURtLTrJOPDpoU0kI6pVz1hz3U0+YQ0tXGS9YWveQjUewAJw==", "dev": true, "optional": true }, "@esbuild/linux-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", - "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.17.tgz", + "integrity": "sha512-biDs7bjGdOdcmIk6xU426VgdRUpGg39Yz6sT9Xp23aq+IEHDb/u5cbmu/pAANpDB4rZpY/2USPhCA+w9t3roQg==", "dev": true, "optional": true }, "@esbuild/linux-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", - "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.17.tgz", + "integrity": "sha512-2+pwLx0whKY1/Vqt8lyzStyda1v0qjJ5INWIe+d8+1onqQxHLLi3yr5bAa4gvbzhZqBztifYEu8hh1La5+7sUw==", "dev": true, "optional": true }, "@esbuild/linux-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", - "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.17.tgz", + "integrity": "sha512-IBTTv8X60dYo6P2t23sSUYym8fGfMAiuv7PzJ+0LcdAndZRzvke+wTVxJeCq4WgjppkOpndL04gMZIFvwoU34Q==", "dev": true, "optional": true }, @@ -9298,92 +9754,107 @@ "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", - "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.17.tgz", + "integrity": "sha512-2kYCGh8589ZYnY031FgMLy0kmE4VoGdvfJkxLdxP4HJvWNXpyLhjOvxVsYjYZ6awqY4bgLR9tpdYyStgZZhi2A==", "dev": true, "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", - "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.17.tgz", + "integrity": "sha512-KIdG5jdAEeAKogfyMTcszRxy3OPbZhq0PPsW4iKKcdlbk3YE4miKznxV2YOSmiK/hfOZ+lqHri3v8eecT2ATwQ==", "dev": true, "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", - "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.17.tgz", + "integrity": "sha512-Cj6uWLBR5LWhcD/2Lkfg2NrkVsNb2sFM5aVEfumKB2vYetkA/9Uyc1jVoxLZ0a38sUhFk4JOVKH0aVdPbjZQeA==", "dev": true, "optional": true }, "@esbuild/linux-s390x": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", - "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.17.tgz", + "integrity": "sha512-lK+SffWIr0XsFf7E0srBjhpkdFVJf3HEgXCwzkm69kNbRar8MhezFpkIwpk0qo2IOQL4JE4mJPJI8AbRPLbuOQ==", "dev": true, "optional": true }, "@esbuild/linux-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", - "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.17.tgz", + "integrity": "sha512-XcSGTQcWFQS2jx3lZtQi7cQmDYLrpLRyz1Ns1DzZCtn898cWfm5Icx/DEWNcTU+T+tyPV89RQtDnI7qL2PObPg==", "dev": true, "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", - "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.17.tgz", + "integrity": "sha512-RNLCDmLP5kCWAJR+ItLM3cHxzXRTe4N00TQyQiimq+lyqVqZWGPAvcyfUBM0isE79eEZhIuGN09rAz8EL5KdLA==", "dev": true, "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", - "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.17.tgz", + "integrity": "sha512-PAXswI5+cQq3Pann7FNdcpSUrhrql3wKjj3gVkmuz6OHhqqYxKvi6GgRBoaHjaG22HV/ZZEgF9TlS+9ftHVigA==", "dev": true, "optional": true }, "@esbuild/sunos-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", - "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.17.tgz", + "integrity": "sha512-V63egsWKnx/4V0FMYkr9NXWrKTB5qFftKGKuZKFIrAkO/7EWLFnbBZNM1CvJ6Sis+XBdPws2YQSHF1Gqf1oj/Q==", "dev": true, "optional": true }, "@esbuild/win32-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", - "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.17.tgz", + "integrity": "sha512-YtUXLdVnd6YBSYlZODjWzH+KzbaubV0YVd6UxSfoFfa5PtNJNaW+1i+Hcmjpg2nEe0YXUCNF5bkKy1NnBv1y7Q==", "dev": true, "optional": true }, "@esbuild/win32-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", - "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.17.tgz", + "integrity": "sha512-yczSLRbDdReCO74Yfc5tKG0izzm+lPMYyO1fFTcn0QNwnKmc3K+HdxZWLGKg4pZVte7XVgcFku7TIZNbWEJdeQ==", "dev": true, "optional": true }, "@esbuild/win32-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", - "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.17.tgz", + "integrity": "sha512-FNZw7H3aqhF9OyRQbDDnzUApDXfC1N6fgBhkqEO2jvYCJ+DxMTfZVqg3AX0R1khg1wHTBRD5SdcibSJ+XF6bFg==", "dev": true, "optional": true }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", + "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", + "dev": true + }, "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", + "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", + "espree": "^9.5.1", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -9392,9 +9863,9 @@ }, "dependencies": { "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -9408,31 +9879,37 @@ } } }, + "@eslint/js": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.38.0.tgz", + "integrity": "sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==", + "dev": true + }, "@fontsource/material-icons": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/@fontsource/material-icons/-/material-icons-4.5.4.tgz", "integrity": "sha512-YGmXkkEdu6EIgpFKNmB/nIXzZocwSmbI01Ninpmml8x8BT0M6RR++V1KqOfpzZ6Cw/FQ2/KYonQ3x4IY/4VRRA==" }, "@fontsource/roboto-mono": { - "version": "4.5.8", - "resolved": "https://registry.npmjs.org/@fontsource/roboto-mono/-/roboto-mono-4.5.8.tgz", - "integrity": "sha512-AW44UkbQD0w1CT5mzDbsvhGZ6/bb0YmZzoELj6Sx8vcVEzcbYGUdt2Dtl5zqlOuYMWQFY1mniwWyVv+Bm/lVxw==" + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@fontsource/roboto-mono/-/roboto-mono-4.5.10.tgz", + "integrity": "sha512-KrJdmkqz6DszT2wV/bbhXef4r0hV3B0vw2mAqei8A2kRnvq+gcJLmmIeQ94vu9VEXrUQzos5M9lH1TAAXpRphw==" }, "@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" } }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true }, "@humanwhocodes/object-schema": { @@ -9448,12 +9925,13 @@ "dev": true }, "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" } }, "@jridgewell/resolve-uri": { @@ -9467,38 +9945,33 @@ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", "requires": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } } }, "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + } } }, "@nodelib/fs.scandir": { @@ -9555,9 +10028,9 @@ "integrity": "sha512-REXrCKQaT2shJ3p2Rpq1ZYV4iUeAOUFKnLN2KteQWtB5HQpB8b+w5xBGI+TcnY0FUhx92fbKPYTTvCftNZF4Jw==" }, "@pixi/particle-emitter": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@pixi/particle-emitter/-/particle-emitter-5.0.7.tgz", - "integrity": "sha512-g0vf+z2pFr+znJEzAii6T7CfMAKsCZuRc8bVY2znJDYxEKoAuU+XuqzHtOkGeR/VuiNCuJhMFLh+BDfXN4Fubw==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@pixi/particle-emitter/-/particle-emitter-5.0.8.tgz", + "integrity": "sha512-OzuZ4+esQo+zJ0u3htuNHHMAE8Ixmr3nz3tEfrTGZHje1vnGyie3ANQj9F0V4OM47oi9jd70njVCmeb7bTkS9A==", "requires": {} }, "@pixi/runner": { @@ -9691,9 +10164,9 @@ } }, "@rushstack/eslint-patch": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz", - "integrity": "sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", + "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", "dev": true }, "@surma/rollup-plugin-off-main-thread": { @@ -9746,15 +10219,18 @@ "dev": true }, "@types/lz-string": { - "version": "1.3.34", - "resolved": "https://registry.npmjs.org/@types/lz-string/-/lz-string-1.3.34.tgz", - "integrity": "sha512-j6G1e8DULJx3ONf6NdR5JiR2ZY3K3PaaqiEuKYkLQO0Czfi1AzrtjfnfCROyWGeDd5IVMKCwsgSmMip9OWijow==", - "dev": true + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-s84fKOrzqqNCAPljhVyC5TjAo6BH4jKHw9NRNFNiRUY5QSgZCmVm5XILlWbisiKl+0OcS7eWihmKGS5akc2iQw==", + "dev": true, + "requires": { + "lz-string": "*" + } }, "@types/node": { - "version": "18.7.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.9.tgz", - "integrity": "sha512-0N5Y1XAdcl865nDdjbO0m3T6FdmQ4ijE89/urOHLREyTXbpMWbSafx9y7XIsgWGtwUP2iYTinLyyW3FatAxBLQ==" + "version": "18.15.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.12.tgz", + "integrity": "sha512-Wha1UwsB3CYdqUm2PPzh/1gujGCNtWVUYF0mB00fJFoR4gTyWTDPjSm+zBF787Ahw8vSGgBja90MkgFwvB86Dg==" }, "@types/offscreencanvas": { "version": "2019.7.0", @@ -9769,86 +10245,109 @@ "@types/node": "*" } }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" }, "@typescript-eslint/eslint-plugin": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz", - "integrity": "sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.0.tgz", + "integrity": "sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/type-utils": "5.33.1", - "@typescript-eslint/utils": "5.33.1", + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.0", + "@typescript-eslint/type-utils": "5.59.0", + "@typescript-eslint/utils": "5.59.0", "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", - "regexpp": "^3.2.0", + "natural-compare-lite": "^1.4.0", "semver": "^7.3.7", "tsutils": "^3.21.0" }, "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dev": true, "requires": { "lru-cache": "^6.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, "@typescript-eslint/parser": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz", - "integrity": "sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.0.tgz", + "integrity": "sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/typescript-estree": "5.33.1", + "@typescript-eslint/scope-manager": "5.59.0", + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/typescript-estree": "5.59.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz", - "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.0.tgz", + "integrity": "sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/visitor-keys": "5.33.1" + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/visitor-keys": "5.59.0" } }, "@typescript-eslint/type-utils": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz", - "integrity": "sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.0.tgz", + "integrity": "sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.33.1", + "@typescript-eslint/typescript-estree": "5.59.0", + "@typescript-eslint/utils": "5.59.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz", - "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.0.tgz", + "integrity": "sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz", - "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz", + "integrity": "sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/visitor-keys": "5.33.1", + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/visitor-keys": "5.59.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -9856,38 +10355,81 @@ "tsutils": "^3.21.0" }, "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dev": true, "requires": { "lru-cache": "^6.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, "@typescript-eslint/utils": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.1.tgz", - "integrity": "sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.0.tgz", + "integrity": "sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==", "dev": true, "requires": { + "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/typescript-estree": "5.33.1", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.0", + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/typescript-estree": "5.59.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "semver": "^7.3.7" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "@typescript-eslint/visitor-keys": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz", - "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz", + "integrity": "sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.33.1", + "@typescript-eslint/types": "5.59.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -9911,23 +10453,23 @@ } }, "@vitest/expect": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.29.3.tgz", - "integrity": "sha512-z/0JqBqqrdtrT/wzxNrWC76EpkOHdl+SvuNGxWulLaoluygntYyG5wJul5u/rQs5875zfFz/F+JaDf90SkLUIg==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.29.8.tgz", + "integrity": "sha512-xlcVXn5I5oTq6NiZSY3ykyWixBxr5mG8HYtjvpgg6KaqHm0mvhX18xuwl5YGxIRNt/A5jidd7CWcNHrSvgaQqQ==", "dev": true, "requires": { - "@vitest/spy": "0.29.3", - "@vitest/utils": "0.29.3", + "@vitest/spy": "0.29.8", + "@vitest/utils": "0.29.8", "chai": "^4.3.7" } }, "@vitest/runner": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.29.3.tgz", - "integrity": "sha512-XLi8ctbvOWhUWmuvBUSIBf8POEDH4zCh6bOuVxm/KGfARpgmVF1ku+vVNvyq85va+7qXxtl+MFmzyXQ2xzhAvw==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.29.8.tgz", + "integrity": "sha512-FzdhnRDwEr/A3Oo1jtIk/B952BBvP32n1ObMEb23oEJNO+qO5cBet6M2XWIDQmA7BDKGKvmhUf2naXyp/2JEwQ==", "dev": true, "requires": { - "@vitest/utils": "0.29.3", + "@vitest/utils": "0.29.8", "p-limit": "^4.0.0", "pathe": "^1.1.0" }, @@ -9950,18 +10492,18 @@ } }, "@vitest/spy": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.29.3.tgz", - "integrity": "sha512-LLpCb1oOCOZcBm0/Oxbr1DQTuKLRBsSIHyLYof7z4QVE8/v8NcZKdORjMUq645fcfX55+nLXwU/1AQ+c2rND+w==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.29.8.tgz", + "integrity": "sha512-VdjBe9w34vOMl5I5mYEzNX8inTxrZ+tYUVk9jxaZJmHFwmDFC/GV3KBFTA/JKswr3XHvZL+FE/yq5EVhb6pSAw==", "dev": true, "requires": { "tinyspy": "^1.0.2" } }, "@vitest/utils": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.29.3.tgz", - "integrity": "sha512-hg4Ff8AM1GtUnLpUJlNMxrf9f4lZr/xRJjh3uJ0QFP+vjaW82HAxKrmeBmLnhc8Os2eRf+f+VBu4ts7TafPPkA==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.29.8.tgz", + "integrity": "sha512-qGzuf3vrTbnoY+RjjVVIBYfuWMjn3UMUqyQtdGNZ6ZIIyte7B37exj6LaVkrZiUTvzSadVvO/tJm8AEgbGCBPg==", "dev": true, "requires": { "cli-truncate": "^3.1.0", @@ -10033,36 +10575,36 @@ } }, "@vue/compiler-core": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", - "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz", + "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==", "requires": { "@babel/parser": "^7.16.4", - "@vue/shared": "3.2.37", + "@vue/shared": "3.2.47", "estree-walker": "^2.0.2", "source-map": "^0.6.1" } }, "@vue/compiler-dom": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", - "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz", + "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==", "requires": { - "@vue/compiler-core": "3.2.37", - "@vue/shared": "3.2.37" + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47" } }, "@vue/compiler-sfc": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", - "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", + "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", "requires": { "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.37", - "@vue/compiler-dom": "3.2.37", - "@vue/compiler-ssr": "3.2.37", - "@vue/reactivity-transform": "3.2.37", - "@vue/shared": "3.2.37", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-ssr": "3.2.47", + "@vue/reactivity-transform": "3.2.47", + "@vue/shared": "3.2.47", "estree-walker": "^2.0.2", "magic-string": "^0.25.7", "postcss": "^8.1.10", @@ -10070,18 +10612,18 @@ } }, "@vue/compiler-ssr": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", - "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz", + "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==", "requires": { - "@vue/compiler-dom": "3.2.37", - "@vue/shared": "3.2.37" + "@vue/compiler-dom": "3.2.47", + "@vue/shared": "3.2.47" } }, "@vue/eslint-config-prettier": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.0.0.tgz", - "integrity": "sha512-/CTc6ML3Wta1tCe1gUeO0EYnVXfo3nJXsIhZ8WJr3sov+cGASr6yuiibJTL6lmIBm7GobopToOuB3B6AWyV0Iw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz", + "integrity": "sha512-Pv/lVr0bAzSIHLd9iz0KnvAr4GKyCEl+h52bc4e5yWuDVtLgFwycF7nrbWTAQAS+FU6q1geVd07lc6EWfJiWKQ==", "dev": true, "requires": { "eslint-config-prettier": "^8.3.0", @@ -10100,57 +10642,57 @@ } }, "@vue/reactivity": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", - "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.47.tgz", + "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==", "requires": { - "@vue/shared": "3.2.37" + "@vue/shared": "3.2.47" } }, "@vue/reactivity-transform": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz", - "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz", + "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==", "requires": { "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.37", - "@vue/shared": "3.2.37", + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47", "estree-walker": "^2.0.2", "magic-string": "^0.25.7" } }, "@vue/runtime-core": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.37.tgz", - "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.47.tgz", + "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==", "requires": { - "@vue/reactivity": "3.2.37", - "@vue/shared": "3.2.37" + "@vue/reactivity": "3.2.47", + "@vue/shared": "3.2.47" } }, "@vue/runtime-dom": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", - "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz", + "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==", "requires": { - "@vue/runtime-core": "3.2.37", - "@vue/shared": "3.2.37", + "@vue/runtime-core": "3.2.47", + "@vue/shared": "3.2.47", "csstype": "^2.6.8" } }, "@vue/server-renderer": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.37.tgz", - "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.47.tgz", + "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==", "requires": { - "@vue/compiler-ssr": "3.2.37", - "@vue/shared": "3.2.37" + "@vue/compiler-ssr": "3.2.47", + "@vue/shared": "3.2.47" } }, "@vue/shared": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz", - "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz", + "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==" }, "abab": { "version": "2.0.6", @@ -10164,21 +10706,13 @@ "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" }, "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", "dev": true, "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" } }, "acorn-jsx": { @@ -10189,9 +10723,9 @@ "requires": {} }, "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true }, "agent-base": { @@ -10237,12 +10771,26 @@ "color-convert": "^1.9.0" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -10271,39 +10819,36 @@ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" }, "babel-plugin-polyfill-corejs2": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz", - "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "requires": { "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.2", + "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" } }, "babel-plugin-polyfill-corejs3": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", - "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz", - "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.2" + "@babel/helper-define-polyfill-provider": "^0.3.3" } }, "balanced-match": { @@ -10340,21 +10885,15 @@ "fill-range": "^7.0.1" } }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "requires": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" } }, "buffer-from": { @@ -10394,9 +10933,9 @@ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" }, "caniuse-lite": { - "version": "1.0.30001380", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001380.tgz", - "integrity": "sha512-OO+pPubxx16lkI7TVrbFpde8XHz66SMwstl1YWpg6uMGw56XnhYVwtPIjvX4kYpzwMwQKr4DDce394E03dQPGg==" + "version": "1.0.30001480", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001480.tgz", + "integrity": "sha512-q7cpoPPvZYgtyC4VaBSN0Bt+PJ4c4EYRf0DrduInOz2SkFpHD5p3LnvEpqBp7UnJn+8x1Ogl1s38saUxe+ihQQ==" }, "chai": { "version": "4.3.7", @@ -10462,9 +11001,9 @@ } }, "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" }, "common-tags": { "version": "1.8.2", @@ -10477,12 +11016,9 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "requires": { - "safe-buffer": "~5.1.1" - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "core-js": { "version": "2.6.12", @@ -10490,19 +11026,11 @@ "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" }, "core-js-compat": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.24.1.tgz", - "integrity": "sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw==", + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", + "integrity": "sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==", "requires": { - "browserslist": "^4.21.3", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } + "browserslist": "^4.21.5" } }, "cross-spawn": { @@ -10552,9 +11080,9 @@ } }, "csstype": { - "version": "2.6.20", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", - "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" + "version": "2.6.21", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, "data-urls": { "version": "3.0.2", @@ -10576,9 +11104,9 @@ } }, "decimal.js": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz", - "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true }, "deep-eql": { @@ -10597,14 +11125,14 @@ "dev": true }, "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" }, "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "requires": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -10662,17 +11190,17 @@ "dev": true }, "ejs": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", "requires": { "jake": "^10.8.5" } }, "electron-to-chromium": { - "version": "1.4.225", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.225.tgz", - "integrity": "sha512-ICHvGaCIQR3P88uK8aRtx8gmejbVJyC6bB4LEC3anzBrIzdzC7aiZHY4iFfXhN4st6I7lMO0x4sgBHf/7kBvRw==" + "version": "1.4.368", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.368.tgz", + "integrity": "sha512-e2aeCAixCj9M7nJxdB/wDjO6mbYX+lJJxSJCXDzlr5YPGYVofuJwGN9nKg2o6wWInjX6XmxRinn3AeJMK81ltw==" }, "emoji-regex": { "version": "9.2.2", @@ -10681,39 +11209,60 @@ "dev": true }, "entities": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz", - "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true }, "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", "requires": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", + "get-intrinsic": "^1.2.0", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", + "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + } + }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" } }, "es-to-primitive": { @@ -10945,14 +11494,18 @@ } }, "eslint": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", - "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz", + "integrity": "sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.2", + "@eslint/js": "8.38.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -10960,23 +11513,22 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", - "esquery": "^1.4.0", + "eslint-visitor-keys": "^3.4.0", + "espree": "^9.5.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -10984,11 +11536,9 @@ "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { "ansi-styles": { @@ -11032,9 +11582,9 @@ "dev": true }, "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -11048,9 +11598,9 @@ "dev": true }, "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -11080,9 +11630,9 @@ } }, "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", "dev": true, "requires": {} }, @@ -11110,15 +11660,32 @@ "vue-eslint-parser": "^8.0.1" }, "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dev": true, "peer": true, "requires": { "lru-cache": "^6.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true } } }, @@ -11137,6 +11704,7 @@ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, + "peer": true, "requires": { "eslint-visitor-keys": "^2.0.0" }, @@ -11145,25 +11713,26 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true + "dev": true, + "peer": true } } }, "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", + "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", "dev": true }, "espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", + "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", "dev": true, "requires": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.0" } }, "esprima": { @@ -11173,9 +11742,9 @@ "dev": true }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -11240,9 +11809,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -11273,9 +11842,9 @@ "dev": true }, "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "requires": { "reusify": "^1.0.4" } @@ -11306,9 +11875,9 @@ } }, "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "requires": { "brace-expansion": "^2.0.1" } @@ -11349,6 +11918,14 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "^1.1.3" + } + }, "form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -11405,12 +11982,6 @@ "functions-have-names": "^1.2.2" } }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -11428,9 +11999,9 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -11483,6 +12054,14 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "requires": { + "define-properties": "^1.1.3" + } + }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -11502,10 +12081,18 @@ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "grapheme-splitter": { "version": "1.0.4", @@ -11539,6 +12126,11 @@ "get-intrinsic": "^1.1.1" } }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -11567,9 +12159,9 @@ } }, "html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==" }, "http-proxy-agent": { "version": "5.0.0", @@ -11602,14 +12194,14 @@ } }, "idb": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.2.tgz", - "integrity": "sha512-jjKrT1EnyZewQ/gCBb/eyiYrhGzws2FeY92Yx8qT9S9GeQAmo4JFVIiWRIfKW/6Ob9A+UDAOW9j9jn58fy2HIg==" + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" }, "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, "import-fresh": { @@ -11643,15 +12235,25 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "requires": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" } }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -11670,14 +12272,14 @@ } }, "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", + "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", "requires": { "has": "^1.0.3" } @@ -11737,6 +12339,12 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -11791,6 +12399,18 @@ "has-symbols": "^1.0.2" } }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -11892,6 +12512,12 @@ } } }, + "js-sdsl": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", + "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -11907,18 +12533,18 @@ } }, "jsdom": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz", - "integrity": "sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==", + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", "dev": true, "requires": { "abab": "^2.0.6", - "acorn": "^8.7.1", - "acorn-globals": "^6.0.0", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", "cssom": "^0.5.0", "cssstyle": "^2.3.0", "data-urls": "^3.0.2", - "decimal.js": "^10.3.1", + "decimal.js": "^10.4.2", "domexception": "^4.0.0", "escodegen": "^2.0.0", "form-data": "^4.0.0", @@ -11926,18 +12552,17 @@ "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.1", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "^7.0.0", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^3.0.0", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^2.0.0", "whatwg-mimetype": "^3.0.0", "whatwg-url": "^11.0.0", - "ws": "^8.8.0", + "ws": "^8.11.0", "xml-name-validator": "^4.0.0" } }, @@ -11964,9 +12589,9 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, "jsonc-parser": { "version": "3.2.0", @@ -12010,10 +12635,15 @@ "type-check": "~0.4.0" } }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, "local-pkg": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", - "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", "dev": true }, "locate-path": { @@ -12056,18 +12686,17 @@ } }, "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "requires": { - "yallist": "^4.0.0" + "yallist": "^3.0.2" } }, "lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==" }, "magic-string": { "version": "0.25.9", @@ -12120,9 +12749,9 @@ } }, "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "mlly": { "version": "1.2.0", @@ -12141,15 +12770,25 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "nanoevents": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/nanoevents/-/nanoevents-6.0.2.tgz", "integrity": "sha512-FRS2otuFcPPYDPYViNWQ42+1iZqbXydinkRHTHFxrF4a1CpBfmydR9zkI44WSXAXCyPrkcGtPk5CnpW6Y3lFKQ==" }, "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" }, "natural-compare": { "version": "1.4.0", @@ -12157,15 +12796,21 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "ngraph.events": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-1.2.2.tgz", "integrity": "sha512-JsUbEOzANskax+WSYiAPETemLWYXmixuPAlmZmhIbIj6FH/WDgEGCGnRwUQBK0GjOnVm8Ui+e5IJ+5VZ4e32eQ==" }, "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "nth-check": { "version": "2.1.1", @@ -12178,15 +12823,20 @@ } }, "nwsapi": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", - "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.4.tgz", + "integrity": "sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==", "dev": true }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" }, "object-keys": { "version": "1.1.1", @@ -12264,12 +12914,12 @@ } }, "parse5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", - "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dev": true, "requires": { - "entities": "^4.3.0" + "entities": "^4.4.0" } }, "path-exists": { @@ -12322,6 +12972,11 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, + "pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" + }, "pkg-types": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.2.tgz", @@ -12334,19 +12989,19 @@ } }, "postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "version": "8.4.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", + "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", "requires": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", "dev": true, "peer": true, "requires": { @@ -12361,9 +13016,9 @@ "dev": true }, "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", "dev": true }, "prettier-linter-helpers": { @@ -12376,9 +13031,9 @@ } }, "pretty-bytes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.0.0.tgz", - "integrity": "sha512-6UqkYefdogmzqAZWzJ7laYeJnaXDy2/J+ZqiiMtS7t7OfpXWTlaeGMwX8U6EFvPV/YWWEKRkS8hKS4k60WHTOg==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.0.tgz", + "integrity": "sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ==" }, "pretty-format": { "version": "27.5.1", @@ -12406,9 +13061,9 @@ "dev": true }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" }, "querystring": { "version": "0.2.0", @@ -12416,6 +13071,12 @@ "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", "peer": true }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -12436,13 +13097,14 @@ "dev": true }, "recrawl-sync": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recrawl-sync/-/recrawl-sync-2.2.2.tgz", - "integrity": "sha512-E2sI4F25Fu2nrfV+KsnC7/qfk/spQIYXlonfQoS4rwxeNK5BjxnLPbWiRXHVXPwYBOTWtPX5765kTm/zJiL+LQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recrawl-sync/-/recrawl-sync-2.2.3.tgz", + "integrity": "sha512-vSaTR9t+cpxlskkdUFrsEpnf67kSmPk66yAGT1fZPrDudxQjoMzPgQhSMImQ0pAw5k0NPirefQfhopSjhdUtpQ==", "requires": { "@cush/relative": "^1.0.0", "glob-regex": "^0.3.0", "slash": "^3.0.0", + "sucrase": "^3.20.3", "tslib": "^1.9.3" } }, @@ -12452,64 +13114,53 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "requires": { "regenerate": "^1.4.2" } }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "requires": { "@babel/runtime": "^7.8.4" } }, "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" } }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, "regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "requires": { + "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" + "unicode-match-property-value-ecmascript": "^2.1.0" } }, - "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" - }, "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "requires": { "jsesc": "~0.5.0" }, @@ -12526,12 +13177,18 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "requires": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.11.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -12584,9 +13241,19 @@ } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } }, "safer-buffer": { "version": "2.1.2", @@ -12740,38 +13407,48 @@ } }, "string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", + "regexp.prototype.flags": "^1.4.3", "side-channel": "^1.0.4" } }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" } }, "stringify-object": { @@ -12818,6 +13495,35 @@ "acorn": "^8.8.2" } }, + "sucrase": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", + "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -12859,14 +13565,21 @@ } }, "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", + "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", "requires": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } } }, "text-table": { @@ -12875,16 +13588,32 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "tinybench": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.3.1.tgz", - "integrity": "sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.4.0.tgz", + "integrity": "sha512-iyziEiyFxX4kyxSp+MtY1oCH/lvjH3PxFN8PGCDeqcZWAJ/i+9y+nL85w99PxVzrIvew/GSkSbDYtiGVa85Afg==", "dev": true }, "tinypool": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.1.tgz", - "integrity": "sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.4.0.tgz", + "integrity": "sha512-2ksntHOKf893wSAH4z/+JbPpi92esw8Gn9N2deXX+B0EO92hexAVI9GIZZPx7P5aYo5KULfeOSt3kMOmSOy6uA==", "dev": true }, "tinyspy": { @@ -12907,14 +13636,15 @@ } }, "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", "dev": true, "requires": { "psl": "^1.1.33", "punycode": "^2.1.1", - "universalify": "^0.1.2" + "universalify": "^0.2.0", + "url-parse": "^1.5.3" } }, "tr46": { @@ -12926,12 +13656,17 @@ "punycode": "^2.1.1" } }, + "ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, "tsconfig-paths": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", - "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "requires": { - "json5": "^2.2.1", + "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } @@ -12970,6 +13705,16 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==" }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, "typescript": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", @@ -13008,14 +13753,14 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" }, "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" }, "unique-string": { "version": "2.0.0", @@ -13026,9 +13771,9 @@ } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true }, "upath": { @@ -13037,9 +13782,9 @@ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" }, "update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "requires": { "escalade": "^3.1.1", "picocolors": "^1.0.0" @@ -13071,6 +13816,16 @@ } } }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -13078,12 +13833,6 @@ "dev": true, "peer": true }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "vite": { "version": "2.9.15", "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.15.tgz", @@ -13097,9 +13846,9 @@ } }, "vite-node": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.29.3.tgz", - "integrity": "sha512-QYzYSA4Yt2IiduEjYbccfZQfxKp+T1Do8/HEpSX/G5WIECTFKJADwLs9c94aQH4o0A+UtCKU61lj1m5KvbxxQA==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.29.8.tgz", + "integrity": "sha512-b6OtCXfk65L6SElVM20q5G546yu10/kNrhg08afEoWlFRJXFq9/6glsvSVY+aI6YeC1tu2TtAqI2jHEQmOmsFw==", "dev": true, "requires": { "cac": "^6.7.14", @@ -13111,70 +13860,70 @@ }, "dependencies": { "@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.17.tgz", + "integrity": "sha512-WVMBtcDpATjaGfWfp6u9dANIqmU9r37SY8wgAivuKmgKHE+bWSuv0qXEFt/p3qXQYxJIGXQQv6hHcm7iWhWjiw==", "dev": true, "optional": true }, "esbuild": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", - "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.17.tgz", + "integrity": "sha512-/jUywtAymR8jR4qsa2RujlAF7Krpt5VWi72Q2yuLD4e/hvtNcFQ0I1j8m/bxq238pf3/0KO5yuXNpuLx8BE1KA==", "dev": true, "requires": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" + "@esbuild/android-arm": "0.17.17", + "@esbuild/android-arm64": "0.17.17", + "@esbuild/android-x64": "0.17.17", + "@esbuild/darwin-arm64": "0.17.17", + "@esbuild/darwin-x64": "0.17.17", + "@esbuild/freebsd-arm64": "0.17.17", + "@esbuild/freebsd-x64": "0.17.17", + "@esbuild/linux-arm": "0.17.17", + "@esbuild/linux-arm64": "0.17.17", + "@esbuild/linux-ia32": "0.17.17", + "@esbuild/linux-loong64": "0.17.17", + "@esbuild/linux-mips64el": "0.17.17", + "@esbuild/linux-ppc64": "0.17.17", + "@esbuild/linux-riscv64": "0.17.17", + "@esbuild/linux-s390x": "0.17.17", + "@esbuild/linux-x64": "0.17.17", + "@esbuild/netbsd-x64": "0.17.17", + "@esbuild/openbsd-x64": "0.17.17", + "@esbuild/sunos-x64": "0.17.17", + "@esbuild/win32-arm64": "0.17.17", + "@esbuild/win32-ia32": "0.17.17", + "@esbuild/win32-x64": "0.17.17" } }, "rollup": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.19.1.tgz", - "integrity": "sha512-lAbrdN7neYCg/8WaoWn/ckzCtz+jr70GFfYdlf50OF7387HTg+wiuiqJRFYawwSPpqfqDNYqK7smY/ks2iAudg==", + "version": "3.20.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.6.tgz", + "integrity": "sha512-2yEB3nQXp/tBQDN0hJScJQheXdvU2wFhh6ld7K/aiZ1vYcak6N/BKjY1QrU6BvO2JWYS8bEs14FRaxXosxy2zw==", "dev": true, "requires": { "fsevents": "~2.3.2" } }, "vite": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.4.tgz", - "integrity": "sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.2.tgz", + "integrity": "sha512-PcNtT5HeDxb3QaSqFYkEum8f5sCVe0R3WK20qxgIvNBZPXU/Obxs/+ubBMeE7nLWeCo2LDzv+8hRYSlcaSehig==", "dev": true, "requires": { - "esbuild": "^0.16.14", + "esbuild": "^0.17.5", "fsevents": "~2.3.2", "postcss": "^8.4.21", "resolve": "^1.22.1", - "rollup": "^3.10.0" + "rollup": "^3.18.0" } } } }, "vite-plugin-pwa": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.12.3.tgz", - "integrity": "sha512-gmYdIVXpmBuNjzbJFPZFzxWYrX4lHqwMAlOtjmXBbxApiHjx9QPXKQPJjSpeTeosLKvVbNcKSAAhfxMda0QVNQ==", + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.12.8.tgz", + "integrity": "sha512-pSiFHmnJGMQJJL8aJzQ8SaraZBSBPMGvGUkCNzheIq9UQCEk/eP3UmANNmS9eupuhIpTK8AdxTOHcaMcAqAbCA==", "requires": { "debug": "^4.3.4", "fast-glob": "^3.2.11", @@ -13185,9 +13934,9 @@ } }, "vite-tsconfig-paths": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-3.5.0.tgz", - "integrity": "sha512-NKIubr7gXgh/3uniQaOytSg+aKWPrjquP6anAy+zCWEn6h9fB8z2/qdlfQrTgZWaXJ2pHVlllrSdRZltHn9P4g==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-3.6.0.tgz", + "integrity": "sha512-UfsPYonxLqPD633X8cWcPFVuYzx/CMNHAjZTasYwX69sXpa4gNmQkR0XCjj82h7zhLGdTWagMjC1qfb9S+zv0A==", "requires": { "debug": "^4.1.1", "globrex": "^0.1.2", @@ -13196,18 +13945,18 @@ } }, "vitest": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.29.3.tgz", - "integrity": "sha512-muMsbXnZsrzDGiyqf/09BKQsGeUxxlyLeLK/sFFM4EXdURPQRv8y7dco32DXaRORYP0bvyN19C835dT23mL0ow==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.29.8.tgz", + "integrity": "sha512-JIAVi2GK5cvA6awGpH0HvH/gEG9PZ0a/WoxdiV3PmqK+3CjQMf8c+J/Vhv4mdZ2nRyXFw66sAg6qz7VNkaHfDQ==", "dev": true, "requires": { "@types/chai": "^4.3.4", "@types/chai-subset": "^1.3.3", "@types/node": "*", - "@vitest/expect": "0.29.3", - "@vitest/runner": "0.29.3", - "@vitest/spy": "0.29.3", - "@vitest/utils": "0.29.3", + "@vitest/expect": "0.29.8", + "@vitest/runner": "0.29.8", + "@vitest/spy": "0.29.8", + "@vitest/utils": "0.29.8", "acorn": "^8.8.1", "acorn-walk": "^8.2.0", "cac": "^6.7.14", @@ -13220,90 +13969,84 @@ "std-env": "^3.3.1", "strip-literal": "^1.0.0", "tinybench": "^2.3.1", - "tinypool": "^0.3.1", + "tinypool": "^0.4.0", "tinyspy": "^1.0.2", "vite": "^3.0.0 || ^4.0.0", - "vite-node": "0.29.3", + "vite-node": "0.29.8", "why-is-node-running": "^2.2.2" }, "dependencies": { "@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.17.tgz", + "integrity": "sha512-WVMBtcDpATjaGfWfp6u9dANIqmU9r37SY8wgAivuKmgKHE+bWSuv0qXEFt/p3qXQYxJIGXQQv6hHcm7iWhWjiw==", "dev": true, "optional": true }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, "esbuild": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", - "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.17.tgz", + "integrity": "sha512-/jUywtAymR8jR4qsa2RujlAF7Krpt5VWi72Q2yuLD4e/hvtNcFQ0I1j8m/bxq238pf3/0KO5yuXNpuLx8BE1KA==", "dev": true, "requires": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" + "@esbuild/android-arm": "0.17.17", + "@esbuild/android-arm64": "0.17.17", + "@esbuild/android-x64": "0.17.17", + "@esbuild/darwin-arm64": "0.17.17", + "@esbuild/darwin-x64": "0.17.17", + "@esbuild/freebsd-arm64": "0.17.17", + "@esbuild/freebsd-x64": "0.17.17", + "@esbuild/linux-arm": "0.17.17", + "@esbuild/linux-arm64": "0.17.17", + "@esbuild/linux-ia32": "0.17.17", + "@esbuild/linux-loong64": "0.17.17", + "@esbuild/linux-mips64el": "0.17.17", + "@esbuild/linux-ppc64": "0.17.17", + "@esbuild/linux-riscv64": "0.17.17", + "@esbuild/linux-s390x": "0.17.17", + "@esbuild/linux-x64": "0.17.17", + "@esbuild/netbsd-x64": "0.17.17", + "@esbuild/openbsd-x64": "0.17.17", + "@esbuild/sunos-x64": "0.17.17", + "@esbuild/win32-arm64": "0.17.17", + "@esbuild/win32-ia32": "0.17.17", + "@esbuild/win32-x64": "0.17.17" } }, "rollup": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.15.0.tgz", - "integrity": "sha512-F9hrCAhnp5/zx/7HYmftvsNBkMfLfk/dXUh73hPSM2E3CRgap65orDNJbLetoiUFwSAk6iHPLvBrZ5iHYvzqsg==", + "version": "3.20.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.6.tgz", + "integrity": "sha512-2yEB3nQXp/tBQDN0hJScJQheXdvU2wFhh6ld7K/aiZ1vYcak6N/BKjY1QrU6BvO2JWYS8bEs14FRaxXosxy2zw==", "dev": true, "requires": { "fsevents": "~2.3.2" } }, "vite": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.1.tgz", - "integrity": "sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.2.tgz", + "integrity": "sha512-PcNtT5HeDxb3QaSqFYkEum8f5sCVe0R3WK20qxgIvNBZPXU/Obxs/+ubBMeE7nLWeCo2LDzv+8hRYSlcaSehig==", "dev": true, "requires": { - "esbuild": "^0.16.14", + "esbuild": "^0.17.5", "fsevents": "~2.3.2", "postcss": "^8.4.21", "resolve": "^1.22.1", - "rollup": "^3.10.0" + "rollup": "^3.18.0" } } } }, "vue": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.37.tgz", - "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.47.tgz", + "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==", "requires": { - "@vue/compiler-dom": "3.2.37", - "@vue/compiler-sfc": "3.2.37", - "@vue/runtime-dom": "3.2.37", - "@vue/server-renderer": "3.2.37", - "@vue/shared": "3.2.37" + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-sfc": "3.2.47", + "@vue/runtime-dom": "3.2.47", + "@vue/server-renderer": "3.2.47", + "@vue/shared": "3.2.47" } }, "vue-eslint-parser": { @@ -13322,9 +14065,9 @@ }, "dependencies": { "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -13337,21 +14080,36 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dev": true, "requires": { "lru-cache": "^6.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, "vue-next-select": { - "version": "2.10.4", - "resolved": "https://registry.npmjs.org/vue-next-select/-/vue-next-select-2.10.4.tgz", - "integrity": "sha512-9Lg1mD2h9w6mm4gkXPyVMWhOdUPtA/JF9VrNyo6mqjkh4ktGLVQpNhygVBCg13RFHdEq3iqawjeFmp3FJq+CUw==", + "version": "2.10.5", + "resolved": "https://registry.npmjs.org/vue-next-select/-/vue-next-select-2.10.5.tgz", + "integrity": "sha512-O77bdbp2wj/Dkpd8XFv21EYXI8UtqgTxnKBsycCd2pUe4SAxKsT1h3MT+b7tuyGQV5udMpBYaUE445Z1VdHyUw==", "requires": {} }, "vue-panzoom": { @@ -13384,9 +14142,9 @@ }, "dependencies": { "@vue/compiler-sfc": { - "version": "2.7.9", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.9.tgz", - "integrity": "sha512-TD2FvT0fPUezw5RVP4tfwTZnKHP0QjeEUb39y7tORvOJQTjbOuHJEk4GPHUPsRaTeQ8rjuKjntyrYcEIx+ODxg==", + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", + "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", "requires": { "@babel/parser": "^7.18.4", "postcss": "^8.4.14", @@ -13394,16 +14152,16 @@ } }, "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "vue": { - "version": "2.7.9", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.9.tgz", - "integrity": "sha512-GeWCvAUkjzD5q4A3vgi8ka5r9bM6g8fmNmx/9VnHDKCaEzBcoVw+7UcQktZHrJ2jhlI+Zv8L57pMCIwM4h4MWg==", + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz", + "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", "requires": { - "@vue/compiler-sfc": "2.7.9", + "@vue/compiler-sfc": "2.7.14", "csstype": "^3.1.0" } } @@ -13426,19 +14184,10 @@ "sortablejs": "1.14.0" } }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, "w3c-xmlserializer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", - "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, "requires": { "xml-name-validator": "^4.0.0" @@ -13501,6 +14250,19 @@ "is-symbol": "^1.0.3" } }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, "why-is-node-running": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", @@ -13589,9 +14351,9 @@ } }, "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -13759,9 +14521,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, "requires": {} }, @@ -13778,10 +14540,9 @@ "dev": true }, "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "yocto-queue": { "version": "0.1.0", diff --git a/src/features/decorators/bonusDecorator.ts b/src/features/decorators/bonusDecorator.ts index 875fe3f..d019010 100644 --- a/src/features/decorators/bonusDecorator.ts +++ b/src/features/decorators/bonusDecorator.ts @@ -6,9 +6,11 @@ import { Decorator } from "./common"; export interface BonusAmountFeatureOptions { bonusAmount: Computable<DecimalSource>; + totalAmount?: Computable<DecimalSource>; } export interface BonusCompletionsFeatureOptions { bonusCompletions: Computable<DecimalSource>; + totalCompletions?: Computable<DecimalSource>; } export interface BaseBonusAmountFeature { diff --git a/src/features/decorators/common.ts b/src/features/decorators/common.ts index e23b9f0..362d787 100644 --- a/src/features/decorators/common.ts +++ b/src/features/decorators/common.ts @@ -2,7 +2,7 @@ import { Replace, OptionsObject } from "../feature"; import { Computable, GetComputableType, processComputable, ProcessedComputable } from "util/computed"; import { Persistent, State } from "game/persistence"; -export type Decorator<FeatureOptions, BaseFeature = {}, GenericFeature = {}, S extends State = State> = { +export type Decorator<FeatureOptions, BaseFeature = {}, GenericFeature = BaseFeature, S extends State = State> = { getPersistentData?(): Record<string, Persistent<S>>; preConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): void; postConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): void; From f0fd926cecca4066b37cb1129a0cae106ca819cd Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 19 Apr 2023 19:17:36 -0500 Subject: [PATCH 031/134] Update package-lock.json and snapshots --- package-lock.json | 8730 +++-------------- .../game/__snapshots__/modifiers.test.ts.snap | 932 +- 2 files changed, 1904 insertions(+), 7758 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6bf4e30..02de79c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "profectus", "version": "0.5.2", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -52,11 +52,11 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { @@ -64,9 +64,9 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -75,32 +75,32 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", + "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", - "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", + "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.10", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.10", - "@babel/types": "^7.18.10", + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.4", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.4", + "@babel/types": "^7.21.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" }, "engines": { @@ -112,31 +112,19 @@ } }, "node_modules/@babel/generator": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", - "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", + "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", "dependencies": { - "@babel/types": "^7.18.10", + "@babel/types": "^7.21.4", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", @@ -161,13 +149,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", + "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", + "@babel/compat-data": "^7.21.4", + "@babel/helper-validator-option": "^7.21.0", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "engines": { @@ -178,16 +167,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz", - "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", + "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/helper-split-export-declaration": "^7.18.6" }, "engines": { @@ -198,12 +188,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", - "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz", + "integrity": "sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" + "regexpu-core": "^5.3.1" }, "engines": { "node": ">=6.9.0" @@ -213,9 +203,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", - "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -248,12 +238,12 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -271,40 +261,40 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", + "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.21.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" }, "engines": { "node": ">=6.9.0" @@ -322,9 +312,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", "engines": { "node": ">=6.9.0" } @@ -347,37 +337,38 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", - "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.20.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.20.0" }, "engines": { "node": ">=6.9.0" @@ -395,51 +386,51 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz", - "integrity": "sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", "dependencies": { - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.11", - "@babel/types": "^7.18.10" + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dependencies": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -459,9 +450,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", - "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", + "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -484,13 +475,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", + "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -500,12 +491,12 @@ } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", - "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" }, @@ -532,12 +523,12 @@ } }, "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", + "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -593,11 +584,11 @@ } }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -638,15 +629,15 @@ } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", - "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" + "@babel/plugin-transform-parameters": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -671,12 +662,12 @@ } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -702,13 +693,13 @@ } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", + "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -792,11 +783,11 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -828,11 +819,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", + "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -936,11 +927,11 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz", + "integrity": "sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -950,11 +941,11 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", + "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -964,13 +955,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", "dependencies": { "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -994,11 +985,11 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", - "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", + "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1008,16 +999,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz", - "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", + "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" }, @@ -1029,11 +1021,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", + "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -1043,11 +1036,11 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz", - "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", + "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1101,11 +1094,11 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", + "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1159,13 +1152,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1175,14 +1167,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", + "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1192,15 +1183,14 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz", - "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", + "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", "dependencies": { "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-identifier": "^7.19.1" }, "engines": { "node": ">=6.9.0" @@ -1225,12 +1215,12 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", - "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", + "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1269,11 +1259,11 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", + "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1297,12 +1287,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" }, "engines": { "node": ">=6.9.0" @@ -1340,12 +1330,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz", - "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" }, "engines": { "node": ">=6.9.0" @@ -1397,13 +1387,14 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.12.tgz", - "integrity": "sha512-2vjjam0cum0miPkenUbQswKowuxs/NjMwIKEq0zwegRxXk12C9YOF9STXnaUptITOtOJHKHpzvvWYOjbm6tc0w==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz", + "integrity": "sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-typescript": "^7.18.6" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" }, "engines": { "node": ">=6.9.0" @@ -1442,37 +1433,37 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", - "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.21.4.tgz", + "integrity": "sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw==", "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-option": "^7.18.6", + "@babel/compat-data": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.18.10", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.20.7", + "@babel/plugin-proposal-async-generator-functions": "^7.20.7", "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.21.0", "@babel/plugin-proposal-dynamic-import": "^7.18.6", "@babel/plugin-proposal-export-namespace-from": "^7.18.9", "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-logical-assignment-operators": "^7.20.7", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.21.0", "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-import-assertions": "^7.20.0", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", @@ -1482,44 +1473,44 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.20.7", + "@babel/plugin-transform-async-to-generator": "^7.20.7", "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", - "@babel/plugin-transform-classes": "^7.18.9", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.9", + "@babel/plugin-transform-block-scoping": "^7.21.0", + "@babel/plugin-transform-classes": "^7.21.0", + "@babel/plugin-transform-computed-properties": "^7.20.7", + "@babel/plugin-transform-destructuring": "^7.21.3", "@babel/plugin-transform-dotall-regex": "^7.18.6", "@babel/plugin-transform-duplicate-keys": "^7.18.9", "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-for-of": "^7.21.0", "@babel/plugin-transform-function-name": "^7.18.9", "@babel/plugin-transform-literals": "^7.18.9", "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-amd": "^7.20.11", + "@babel/plugin-transform-modules-commonjs": "^7.21.2", + "@babel/plugin-transform-modules-systemjs": "^7.20.11", "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.20.5", "@babel/plugin-transform-new-target": "^7.18.6", "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-parameters": "^7.21.3", "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.20.5", "@babel/plugin-transform-reserved-words": "^7.18.6", "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-transform-spread": "^7.20.7", "@babel/plugin-transform-sticky-regex": "^7.18.6", "@babel/plugin-transform-template-literals": "^7.18.9", "@babel/plugin-transform-typeof-symbol": "^7.18.9", "@babel/plugin-transform-unicode-escapes": "^7.18.10", "@babel/plugin-transform-unicode-regex": "^7.18.6", "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.10", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "core-js-compat": "^3.22.1", + "@babel/types": "^7.21.4", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", "semver": "^6.3.0" }, "engines": { @@ -1544,43 +1535,48 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, "node_modules/@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", "dependencies": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", - "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", + "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.11", - "@babel/types": "^7.18.10", + "@babel/parser": "^7.21.4", + "@babel/types": "^7.21.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1589,12 +1585,12 @@ } }, "node_modules/@babel/types": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", - "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", + "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", "dependencies": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1606,345 +1602,10 @@ "resolved": "https://registry.npmjs.org/@cush/relative/-/relative-1.0.0.tgz", "integrity": "sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==" }, - "node_modules/@esbuild/android-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", - "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", - "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", - "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", - "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", - "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", - "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", - "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", - "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", - "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", - "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", - "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", - "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", - "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", - "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", - "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", - "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", - "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", - "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", - "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", - "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", - "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/win32-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", - "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.17.tgz", + "integrity": "sha512-FNZw7H3aqhF9OyRQbDDnzUApDXfC1N6fgBhkqEO2jvYCJ+DxMTfZVqg3AX0R1khg1wHTBRD5SdcibSJ+XF6bFg==", "cpu": [ "x64" ], @@ -1957,16 +1618,40 @@ "node": ">=12" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", + "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", + "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", + "espree": "^9.5.1", + "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -1975,12 +1660,15 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2004,35 +1692,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/js": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.38.0.tgz", + "integrity": "sha512-IoD2MfUnOV58ghIHCiil01PcohxjbYR/qCxsoC+xNgUwh1EY8jOOrYmu3d3a71+tJJ23uscEV4X2HJWMsPJu4g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@fontsource/material-icons": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/@fontsource/material-icons/-/material-icons-4.5.4.tgz", "integrity": "sha512-YGmXkkEdu6EIgpFKNmB/nIXzZocwSmbI01Ninpmml8x8BT0M6RR++V1KqOfpzZ6Cw/FQ2/KYonQ3x4IY/4VRRA==" }, "node_modules/@fontsource/roboto-mono": { - "version": "4.5.8", - "resolved": "https://registry.npmjs.org/@fontsource/roboto-mono/-/roboto-mono-4.5.8.tgz", - "integrity": "sha512-AW44UkbQD0w1CT5mzDbsvhGZ6/bb0YmZzoELj6Sx8vcVEzcbYGUdt2Dtl5zqlOuYMWQFY1mniwWyVv+Bm/lVxw==" + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@fontsource/roboto-mono/-/roboto-mono-4.5.10.tgz", + "integrity": "sha512-KrJdmkqz6DszT2wV/bbhXef4r0hV3B0vw2mAqei8A2kRnvq+gcJLmmIeQ94vu9VEXrUQzos5M9lH1TAAXpRphw==" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "engines": { + "node": ">=12.22" + }, "funding": { "type": "github", "url": "https://github.com/sponsors/nzakas" @@ -2051,12 +1751,13 @@ "dev": true }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" @@ -2079,41 +1780,33 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" } }, - "node_modules/@jridgewell/sourcemap-codec": { + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2196,16 +1889,16 @@ "integrity": "sha512-REXrCKQaT2shJ3p2Rpq1ZYV4iUeAOUFKnLN2KteQWtB5HQpB8b+w5xBGI+TcnY0FUhx92fbKPYTTvCftNZF4Jw==" }, "node_modules/@pixi/particle-emitter": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@pixi/particle-emitter/-/particle-emitter-5.0.7.tgz", - "integrity": "sha512-g0vf+z2pFr+znJEzAii6T7CfMAKsCZuRc8bVY2znJDYxEKoAuU+XuqzHtOkGeR/VuiNCuJhMFLh+BDfXN4Fubw==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@pixi/particle-emitter/-/particle-emitter-5.0.8.tgz", + "integrity": "sha512-OzuZ4+esQo+zJ0u3htuNHHMAE8Ixmr3nz3tEfrTGZHje1vnGyie3ANQj9F0V4OM47oi9jd70njVCmeb7bTkS9A==", "peerDependencies": { - "@pixi/constants": "^6.0.4", - "@pixi/core": "^6.0.4", - "@pixi/display": "^6.0.4", - "@pixi/math": "^6.0.4", - "@pixi/sprite": "^6.0.4", - "@pixi/ticker": "^6.0.4" + "@pixi/constants": ">=6.0.4 <8.0.0", + "@pixi/core": ">=6.0.4 <8.0.0", + "@pixi/display": ">=6.0.4 <8.0.0", + "@pixi/math": ">=6.0.4 <8.0.0", + "@pixi/sprite": ">=6.0.4 <8.0.0", + "@pixi/ticker": ">=6.0.4 <8.0.0" } }, "node_modules/@pixi/runner": { @@ -2389,9 +2082,9 @@ } }, "node_modules/@rushstack/eslint-patch": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz", - "integrity": "sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", + "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", "dev": true }, "node_modules/@surma/rollup-plugin-off-main-thread": { @@ -2447,15 +2140,19 @@ "dev": true }, "node_modules/@types/lz-string": { - "version": "1.3.34", - "resolved": "https://registry.npmjs.org/@types/lz-string/-/lz-string-1.3.34.tgz", - "integrity": "sha512-j6G1e8DULJx3ONf6NdR5JiR2ZY3K3PaaqiEuKYkLQO0Czfi1AzrtjfnfCROyWGeDd5IVMKCwsgSmMip9OWijow==", - "dev": true + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-s84fKOrzqqNCAPljhVyC5TjAo6BH4jKHw9NRNFNiRUY5QSgZCmVm5XILlWbisiKl+0OcS7eWihmKGS5akc2iQw==", + "deprecated": "This is a stub types definition. lz-string provides its own type definitions, so you do not need this installed.", + "dev": true, + "dependencies": { + "lz-string": "*" + } }, "node_modules/@types/node": { - "version": "18.7.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.9.tgz", - "integrity": "sha512-0N5Y1XAdcl865nDdjbO0m3T6FdmQ4ijE89/urOHLREyTXbpMWbSafx9y7XIsgWGtwUP2iYTinLyyW3FatAxBLQ==" + "version": "18.15.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.12.tgz", + "integrity": "sha512-Wha1UwsB3CYdqUm2PPzh/1gujGCNtWVUYF0mB00fJFoR4gTyWTDPjSm+zBF787Ahw8vSGgBja90MkgFwvB86Dg==" }, "node_modules/@types/offscreencanvas": { "version": "2019.7.0", @@ -2470,24 +2167,31 @@ "@types/node": "*" } }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "node_modules/@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", + "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz", - "integrity": "sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.0.tgz", + "integrity": "sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/type-utils": "5.33.1", - "@typescript-eslint/utils": "5.33.1", + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.0", + "@typescript-eslint/type-utils": "5.59.0", + "@typescript-eslint/utils": "5.59.0", "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", - "regexpp": "^3.2.0", + "natural-compare-lite": "^1.4.0", "semver": "^7.3.7", "tsutils": "^3.21.0" }, @@ -2508,10 +2212,22 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2523,15 +2239,21 @@ "node": ">=10" } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@typescript-eslint/parser": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz", - "integrity": "sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.0.tgz", + "integrity": "sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/typescript-estree": "5.33.1", + "@typescript-eslint/scope-manager": "5.59.0", + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/typescript-estree": "5.59.0", "debug": "^4.3.4" }, "engines": { @@ -2551,13 +2273,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz", - "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.0.tgz", + "integrity": "sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/visitor-keys": "5.33.1" + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/visitor-keys": "5.59.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2568,12 +2290,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz", - "integrity": "sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.0.tgz", + "integrity": "sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.33.1", + "@typescript-eslint/typescript-estree": "5.59.0", + "@typescript-eslint/utils": "5.59.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -2594,9 +2317,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz", - "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.0.tgz", + "integrity": "sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2607,13 +2330,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz", - "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz", + "integrity": "sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/visitor-keys": "5.33.1", + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/visitor-keys": "5.59.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2633,10 +2356,22 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -2648,18 +2383,26 @@ "node": ">=10" } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@typescript-eslint/utils": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.1.tgz", - "integrity": "sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ==", + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.0.tgz", + "integrity": "sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==", "dev": true, "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/typescript-estree": "5.33.1", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.0", + "@typescript-eslint/types": "5.59.0", + "@typescript-eslint/typescript-estree": "5.59.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "semver": "^7.3.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2672,13 +2415,46 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz", - "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==", + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.33.1", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz", + "integrity": "sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.59.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -2718,23 +2494,23 @@ } }, "node_modules/@vitest/expect": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.29.3.tgz", - "integrity": "sha512-z/0JqBqqrdtrT/wzxNrWC76EpkOHdl+SvuNGxWulLaoluygntYyG5wJul5u/rQs5875zfFz/F+JaDf90SkLUIg==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.29.8.tgz", + "integrity": "sha512-xlcVXn5I5oTq6NiZSY3ykyWixBxr5mG8HYtjvpgg6KaqHm0mvhX18xuwl5YGxIRNt/A5jidd7CWcNHrSvgaQqQ==", "dev": true, "dependencies": { - "@vitest/spy": "0.29.3", - "@vitest/utils": "0.29.3", + "@vitest/spy": "0.29.8", + "@vitest/utils": "0.29.8", "chai": "^4.3.7" } }, "node_modules/@vitest/runner": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.29.3.tgz", - "integrity": "sha512-XLi8ctbvOWhUWmuvBUSIBf8POEDH4zCh6bOuVxm/KGfARpgmVF1ku+vVNvyq85va+7qXxtl+MFmzyXQ2xzhAvw==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.29.8.tgz", + "integrity": "sha512-FzdhnRDwEr/A3Oo1jtIk/B952BBvP32n1ObMEb23oEJNO+qO5cBet6M2XWIDQmA7BDKGKvmhUf2naXyp/2JEwQ==", "dev": true, "dependencies": { - "@vitest/utils": "0.29.3", + "@vitest/utils": "0.29.8", "p-limit": "^4.0.0", "pathe": "^1.1.0" } @@ -2767,18 +2543,18 @@ } }, "node_modules/@vitest/spy": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.29.3.tgz", - "integrity": "sha512-LLpCb1oOCOZcBm0/Oxbr1DQTuKLRBsSIHyLYof7z4QVE8/v8NcZKdORjMUq645fcfX55+nLXwU/1AQ+c2rND+w==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.29.8.tgz", + "integrity": "sha512-VdjBe9w34vOMl5I5mYEzNX8inTxrZ+tYUVk9jxaZJmHFwmDFC/GV3KBFTA/JKswr3XHvZL+FE/yq5EVhb6pSAw==", "dev": true, "dependencies": { "tinyspy": "^1.0.2" } }, "node_modules/@vitest/utils": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.29.3.tgz", - "integrity": "sha512-hg4Ff8AM1GtUnLpUJlNMxrf9f4lZr/xRJjh3uJ0QFP+vjaW82HAxKrmeBmLnhc8Os2eRf+f+VBu4ts7TafPPkA==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.29.8.tgz", + "integrity": "sha512-qGzuf3vrTbnoY+RjjVVIBYfuWMjn3UMUqyQtdGNZ6ZIIyte7B37exj6LaVkrZiUTvzSadVvO/tJm8AEgbGCBPg==", "dev": true, "dependencies": { "cli-truncate": "^3.1.0", @@ -2850,36 +2626,36 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", - "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz", + "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==", "dependencies": { "@babel/parser": "^7.16.4", - "@vue/shared": "3.2.37", + "@vue/shared": "3.2.47", "estree-walker": "^2.0.2", "source-map": "^0.6.1" } }, "node_modules/@vue/compiler-dom": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", - "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz", + "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==", "dependencies": { - "@vue/compiler-core": "3.2.37", - "@vue/shared": "3.2.37" + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", - "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", + "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", "dependencies": { "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.37", - "@vue/compiler-dom": "3.2.37", - "@vue/compiler-ssr": "3.2.37", - "@vue/reactivity-transform": "3.2.37", - "@vue/shared": "3.2.37", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-ssr": "3.2.47", + "@vue/reactivity-transform": "3.2.47", + "@vue/shared": "3.2.47", "estree-walker": "^2.0.2", "magic-string": "^0.25.7", "postcss": "^8.1.10", @@ -2887,18 +2663,18 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", - "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz", + "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==", "dependencies": { - "@vue/compiler-dom": "3.2.37", - "@vue/shared": "3.2.37" + "@vue/compiler-dom": "3.2.47", + "@vue/shared": "3.2.47" } }, "node_modules/@vue/eslint-config-prettier": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.0.0.tgz", - "integrity": "sha512-/CTc6ML3Wta1tCe1gUeO0EYnVXfo3nJXsIhZ8WJr3sov+cGASr6yuiibJTL6lmIBm7GobopToOuB3B6AWyV0Iw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz", + "integrity": "sha512-Pv/lVr0bAzSIHLd9iz0KnvAr4GKyCEl+h52bc4e5yWuDVtLgFwycF7nrbWTAQAS+FU6q1geVd07lc6EWfJiWKQ==", "dev": true, "dependencies": { "eslint-config-prettier": "^8.3.0", @@ -2928,60 +2704,60 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", - "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.47.tgz", + "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==", "dependencies": { - "@vue/shared": "3.2.37" + "@vue/shared": "3.2.47" } }, "node_modules/@vue/reactivity-transform": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz", - "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz", + "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==", "dependencies": { "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.37", - "@vue/shared": "3.2.37", + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47", "estree-walker": "^2.0.2", "magic-string": "^0.25.7" } }, "node_modules/@vue/runtime-core": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.37.tgz", - "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.47.tgz", + "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==", "dependencies": { - "@vue/reactivity": "3.2.37", - "@vue/shared": "3.2.37" + "@vue/reactivity": "3.2.47", + "@vue/shared": "3.2.47" } }, "node_modules/@vue/runtime-dom": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", - "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz", + "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==", "dependencies": { - "@vue/runtime-core": "3.2.37", - "@vue/shared": "3.2.37", + "@vue/runtime-core": "3.2.47", + "@vue/shared": "3.2.47", "csstype": "^2.6.8" } }, "node_modules/@vue/server-renderer": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.37.tgz", - "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.47.tgz", + "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==", "dependencies": { - "@vue/compiler-ssr": "3.2.37", - "@vue/shared": "3.2.37" + "@vue/compiler-ssr": "3.2.47", + "@vue/shared": "3.2.47" }, "peerDependencies": { - "vue": "3.2.37" + "vue": "3.2.47" } }, "node_modules/@vue/shared": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz", - "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz", + "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==" }, "node_modules/abab": { "version": "2.0.6", @@ -3001,25 +2777,13 @@ } }, "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", "dev": true, "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" } }, "node_modules/acorn-jsx": { @@ -3032,9 +2796,9 @@ } }, "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true, "engines": { "node": ">=0.4.0" @@ -3096,12 +2860,29 @@ "node": ">=4" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -3139,21 +2920,24 @@ "node": ">= 4.0.0" } }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz", - "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", "dependencies": { "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.2", + "@babel/helper-define-polyfill-provider": "^0.3.3", "semver": "^6.1.1" }, "peerDependencies": { @@ -3161,23 +2945,23 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", - "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz", - "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.2" + "@babel/helper-define-polyfill-provider": "^0.3.3" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -3220,16 +3004,10 @@ "node": ">=8" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "node_modules/browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "funding": [ { "type": "opencollective", @@ -3241,10 +3019,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { "browserslist": "cli.js" @@ -3311,9 +3089,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001380", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001380.tgz", - "integrity": "sha512-OO+pPubxx16lkI7TVrbFpde8XHz66SMwstl1YWpg6uMGw56XnhYVwtPIjvX4kYpzwMwQKr4DDce394E03dQPGg==", + "version": "1.0.30001480", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001480.tgz", + "integrity": "sha512-q7cpoPPvZYgtyC4VaBSN0Bt+PJ4c4EYRf0DrduInOz2SkFpHD5p3LnvEpqBp7UnJn+8x1Ogl1s38saUxe+ihQQ==", "funding": [ { "type": "opencollective", @@ -3322,6 +3100,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -3407,9 +3189,12 @@ } }, "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } }, "node_modules/common-tags": { "version": "1.8.2", @@ -3425,12 +3210,9 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/core-js": { "version": "2.6.12", @@ -3440,26 +3222,17 @@ "hasInstallScript": true }, "node_modules/core-js-compat": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.24.1.tgz", - "integrity": "sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw==", + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", + "integrity": "sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==", "dependencies": { - "browserslist": "^4.21.3", - "semver": "7.0.0" + "browserslist": "^4.21.5" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3520,9 +3293,9 @@ "dev": true }, "node_modules/csstype": { - "version": "2.6.20", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", - "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" + "version": "2.6.21", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, "node_modules/data-urls": { "version": "3.0.2", @@ -3555,9 +3328,9 @@ } }, "node_modules/decimal.js": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz", - "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true }, "node_modules/deep-eql": { @@ -3579,17 +3352,17 @@ "dev": true }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "engines": { "node": ">=0.10.0" } }, "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -3668,9 +3441,9 @@ "dev": true }, "node_modules/ejs": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", "dependencies": { "jake": "^10.8.5" }, @@ -3682,9 +3455,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.225", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.225.tgz", - "integrity": "sha512-ICHvGaCIQR3P88uK8aRtx8gmejbVJyC6bB4LEC3anzBrIzdzC7aiZHY4iFfXhN4st6I7lMO0x4sgBHf/7kBvRw==" + "version": "1.4.368", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.368.tgz", + "integrity": "sha512-e2aeCAixCj9M7nJxdB/wDjO6mbYX+lJJxSJCXDzlr5YPGYVofuJwGN9nKg2o6wWInjX6XmxRinn3AeJMK81ltw==" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -3693,9 +3466,9 @@ "dev": true }, "node_modules/entities": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz", - "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "engines": { "node": ">=0.12" @@ -3705,33 +3478,44 @@ } }, "node_modules/es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", + "get-intrinsic": "^1.2.0", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", + "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" }, "engines": { "node": ">= 0.4" @@ -3740,6 +3524,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -3791,276 +3588,6 @@ "esbuild-windows-arm64": "0.14.54" } }, - "node_modules/esbuild-android-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", - "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", - "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", - "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", - "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", - "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", - "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", - "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", - "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", - "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", - "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", - "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", - "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", - "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", - "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", - "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", - "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", - "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", - "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/esbuild-windows-64": { "version": "0.14.54", "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", @@ -4076,21 +3603,6 @@ "node": ">=12" } }, - "node_modules/esbuild-windows-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", - "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -4190,14 +3702,18 @@ } }, "node_modules/eslint": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", - "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.38.0.tgz", + "integrity": "sha512-pIdsD2jwlUGf/U38Jv97t8lq6HpaU/G9NKbYmpWpZGw3LdTNhZLbJePqxOXGB5+JEKfOPU/XLxYxFh03nr1KTg==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.2", + "@eslint/js": "8.38.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -4205,23 +3721,22 @@ "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", - "esquery": "^1.4.0", + "eslint-visitor-keys": "^3.4.0", + "espree": "^9.5.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -4229,11 +3744,9 @@ "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -4246,9 +3759,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -4299,10 +3812,23 @@ "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/eslint-plugin-vue/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/eslint-plugin-vue/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dev": true, "peer": true, "dependencies": { @@ -4315,6 +3841,13 @@ "node": ">=10" } }, + "node_modules/eslint-plugin-vue/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -4333,6 +3866,7 @@ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, + "peer": true, "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -4351,17 +3885,21 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, + "peer": true, "engines": { "node": ">=10" } }, "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", + "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/ansi-styles": { @@ -4426,9 +3964,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -4436,6 +3974,9 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/estraverse": { @@ -4448,9 +3989,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -4496,14 +4037,14 @@ } }, "node_modules/espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", + "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", "dev": true, "dependencies": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4526,9 +4067,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -4607,9 +4148,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -4644,9 +4185,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dependencies": { "reusify": "^1.0.4" } @@ -4680,9 +4221,9 @@ } }, "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4736,6 +4277,14 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -4777,19 +4326,6 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -4812,12 +4348,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -4844,9 +4374,9 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -4920,6 +4450,20 @@ "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -4945,10 +4489,21 @@ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/grapheme-splitter": { "version": "1.0.4", @@ -4994,6 +4549,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -5037,9 +4603,9 @@ } }, "node_modules/html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "engines": { "node": ">=8" }, @@ -5087,14 +4653,14 @@ } }, "node_modules/idb": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.2.tgz", - "integrity": "sha512-jjKrT1EnyZewQ/gCBb/eyiYrhGzws2FeY92Yx8qT9S9GeQAmo4JFVIiWRIfKW/6Ob9A+UDAOW9j9jn58fy2HIg==" + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" @@ -5140,11 +4706,11 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -5152,6 +4718,19 @@ "node": ">= 0.4" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -5179,9 +4758,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "engines": { "node": ">= 0.4" }, @@ -5190,9 +4769,9 @@ } }, "node_modules/is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", + "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", "dependencies": { "has": "^1.0.3" }, @@ -5291,6 +4870,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -5378,6 +4966,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -5514,6 +5120,16 @@ "node": ">=8" } }, + "node_modules/js-sdsl": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", + "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -5532,18 +5148,18 @@ } }, "node_modules/jsdom": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz", - "integrity": "sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==", + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", "dev": true, "dependencies": { "abab": "^2.0.6", - "acorn": "^8.7.1", - "acorn-globals": "^6.0.0", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", "cssom": "^0.5.0", "cssstyle": "^2.3.0", "data-urls": "^3.0.2", - "decimal.js": "^10.3.1", + "decimal.js": "^10.4.2", "domexception": "^4.0.0", "escodegen": "^2.0.0", "form-data": "^4.0.0", @@ -5551,18 +5167,17 @@ "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.1", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "^7.0.0", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^3.0.0", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^2.0.0", "whatwg-mimetype": "^3.0.0", "whatwg-url": "^11.0.0", - "ws": "^8.8.0", + "ws": "^8.11.0", "xml-name-validator": "^4.0.0" }, "engines": { @@ -5606,9 +5221,9 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "bin": { "json5": "lib/cli.js" }, @@ -5670,10 +5285,15 @@ "node": ">= 0.8.0" } }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, "node_modules/local-pkg": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", - "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", "dev": true, "engines": { "node": ">=14" @@ -5728,21 +5348,17 @@ } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "yallist": "^3.0.2" } }, "node_modules/lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "bin": { "lz-string": "bin/bin.js" } @@ -5813,9 +5429,12 @@ } }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/mlly": { "version": "1.2.0", @@ -5834,6 +5453,16 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nanoevents": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/nanoevents/-/nanoevents-6.0.2.tgz", @@ -5843,9 +5472,15 @@ } }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -5859,15 +5494,21 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/ngraph.events": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-1.2.2.tgz", "integrity": "sha512-JsUbEOzANskax+WSYiAPETemLWYXmixuPAlmZmhIbIj6FH/WDgEGCGnRwUQBK0GjOnVm8Ui+e5IJ+5VZ4e32eQ==" }, "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "node_modules/nth-check": { "version": "2.1.1", @@ -5883,15 +5524,23 @@ } }, "node_modules/nwsapi": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", - "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.4.tgz", + "integrity": "sha512-NHj4rzRo0tQdijE9ZqAx6kYDcoRwYwSYzCA8MY3JzfxlrvEU0jhnhJT9BhqhJs7I/dKcrDm6TyulaRqZPIhN5g==", "dev": true }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5999,12 +5648,12 @@ } }, "node_modules/parse5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", - "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dev": true, "dependencies": { - "entities": "^4.3.0" + "entities": "^4.4.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -6081,6 +5730,14 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pirates": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "engines": { + "node": ">= 6" + } + }, "node_modules/pkg-types": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.2.tgz", @@ -6093,9 +5750,9 @@ } }, "node_modules/postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "version": "8.4.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", + "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", "funding": [ { "type": "opencollective", @@ -6104,10 +5761,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -6116,9 +5777,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", "dev": true, "peer": true, "dependencies": { @@ -6139,9 +5800,9 @@ } }, "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -6166,9 +5827,9 @@ } }, "node_modules/pretty-bytes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.0.0.tgz", - "integrity": "sha512-6UqkYefdogmzqAZWzJ7laYeJnaXDy2/J+ZqiiMtS7t7OfpXWTlaeGMwX8U6EFvPV/YWWEKRkS8hKS4k60WHTOg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.0.tgz", + "integrity": "sha512-Rk753HI8f4uivXi4ZCIYdhmG1V+WKzvRMg/X+M42a6t7D07RcmopXJMDNk6N++7Bl75URRGsb40ruvg7Hcp2wQ==", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -6209,9 +5870,9 @@ "dev": true }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "engines": { "node": ">=6" } @@ -6226,6 +5887,12 @@ "node": ">=0.4.x" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6260,13 +5927,14 @@ "dev": true }, "node_modules/recrawl-sync": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recrawl-sync/-/recrawl-sync-2.2.2.tgz", - "integrity": "sha512-E2sI4F25Fu2nrfV+KsnC7/qfk/spQIYXlonfQoS4rwxeNK5BjxnLPbWiRXHVXPwYBOTWtPX5765kTm/zJiL+LQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recrawl-sync/-/recrawl-sync-2.2.3.tgz", + "integrity": "sha512-vSaTR9t+cpxlskkdUFrsEpnf67kSmPk66yAGT1fZPrDudxQjoMzPgQhSMImQ0pAw5k0NPirefQfhopSjhdUtpQ==", "dependencies": { "@cush/relative": "^1.0.0", "glob-regex": "^0.3.0", "slash": "^3.0.0", + "sucrase": "^3.20.3", "tslib": "^1.9.3" } }, @@ -6276,9 +5944,9 @@ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "node_modules/regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dependencies": { "regenerate": "^1.4.2" }, @@ -6287,26 +5955,26 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -6315,43 +5983,26 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dependencies": { + "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" + "unicode-match-property-value-ecmascript": "^2.1.0" }, "engines": { "node": ">=4" } }, - "node_modules/regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" - }, "node_modules/regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dependencies": { "jsesc": "~0.5.0" }, @@ -6375,12 +6026,18 @@ "node": ">=0.10.0" } }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.11.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -6442,6 +6099,7 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", "dependencies": { "@babel/code-frame": "^7.10.4", "jest-worker": "^26.2.1", @@ -6475,9 +6133,36 @@ } }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/safer-buffer": { "version": "2.1.2", @@ -6622,7 +6307,8 @@ "node_modules/sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" }, "node_modules/stackback": { "version": "0.0.2", @@ -6681,44 +6367,60 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", + "regexp.prototype.flags": "^1.4.3", "side-channel": "^1.0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6789,6 +6491,46 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/sucrase": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", + "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -6848,9 +6590,9 @@ } }, "node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.1.tgz", + "integrity": "sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==", "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -6864,22 +6606,46 @@ "node": ">=10" } }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/tinybench": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.3.1.tgz", - "integrity": "sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.4.0.tgz", + "integrity": "sha512-iyziEiyFxX4kyxSp+MtY1oCH/lvjH3PxFN8PGCDeqcZWAJ/i+9y+nL85w99PxVzrIvew/GSkSbDYtiGVa85Afg==", "dev": true }, "node_modules/tinypool": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.1.tgz", - "integrity": "sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.4.0.tgz", + "integrity": "sha512-2ksntHOKf893wSAH4z/+JbPpi92esw8Gn9N2deXX+B0EO92hexAVI9GIZZPx7P5aYo5KULfeOSt3kMOmSOy6uA==", "dev": true, "engines": { "node": ">=14.0.0" @@ -6914,14 +6680,15 @@ } }, "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", "dev": true, "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", - "universalify": "^0.1.2" + "universalify": "^0.2.0", + "url-parse": "^1.5.3" }, "engines": { "node": ">=6" @@ -6939,12 +6706,17 @@ "node": ">=12" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, "node_modules/tsconfig-paths": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", - "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dependencies": { - "json5": "^2.2.1", + "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" }, @@ -7004,6 +6776,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typescript": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", @@ -7058,17 +6843,17 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "engines": { "node": ">=4" } @@ -7085,9 +6870,9 @@ } }, "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, "engines": { "node": ">= 4.0.0" @@ -7103,9 +6888,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", "funding": [ { "type": "opencollective", @@ -7114,6 +6899,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { @@ -7121,7 +6910,7 @@ "picocolors": "^1.0.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -7145,6 +6934,16 @@ "querystring": "0.2.0" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/url/node_modules/punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", @@ -7158,12 +6957,6 @@ "dev": true, "peer": true }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/vite": { "version": "2.9.15", "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.15.tgz", @@ -7201,9 +6994,9 @@ } }, "node_modules/vite-node": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.29.3.tgz", - "integrity": "sha512-QYzYSA4Yt2IiduEjYbccfZQfxKp+T1Do8/HEpSX/G5WIECTFKJADwLs9c94aQH4o0A+UtCKU61lj1m5KvbxxQA==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.29.8.tgz", + "integrity": "sha512-b6OtCXfk65L6SElVM20q5G546yu10/kNrhg08afEoWlFRJXFq9/6glsvSVY+aI6YeC1tu2TtAqI2jHEQmOmsFw==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -7223,26 +7016,10 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/vite-node/node_modules/@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/vite-node/node_modules/esbuild": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", - "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.17.tgz", + "integrity": "sha512-/jUywtAymR8jR4qsa2RujlAF7Krpt5VWi72Q2yuLD4e/hvtNcFQ0I1j8m/bxq238pf3/0KO5yuXNpuLx8BE1KA==", "dev": true, "hasInstallScript": true, "bin": { @@ -7252,34 +7029,34 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" + "@esbuild/android-arm": "0.17.17", + "@esbuild/android-arm64": "0.17.17", + "@esbuild/android-x64": "0.17.17", + "@esbuild/darwin-arm64": "0.17.17", + "@esbuild/darwin-x64": "0.17.17", + "@esbuild/freebsd-arm64": "0.17.17", + "@esbuild/freebsd-x64": "0.17.17", + "@esbuild/linux-arm": "0.17.17", + "@esbuild/linux-arm64": "0.17.17", + "@esbuild/linux-ia32": "0.17.17", + "@esbuild/linux-loong64": "0.17.17", + "@esbuild/linux-mips64el": "0.17.17", + "@esbuild/linux-ppc64": "0.17.17", + "@esbuild/linux-riscv64": "0.17.17", + "@esbuild/linux-s390x": "0.17.17", + "@esbuild/linux-x64": "0.17.17", + "@esbuild/netbsd-x64": "0.17.17", + "@esbuild/openbsd-x64": "0.17.17", + "@esbuild/sunos-x64": "0.17.17", + "@esbuild/win32-arm64": "0.17.17", + "@esbuild/win32-ia32": "0.17.17", + "@esbuild/win32-x64": "0.17.17" } }, "node_modules/vite-node/node_modules/rollup": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.19.1.tgz", - "integrity": "sha512-lAbrdN7neYCg/8WaoWn/ckzCtz+jr70GFfYdlf50OF7387HTg+wiuiqJRFYawwSPpqfqDNYqK7smY/ks2iAudg==", + "version": "3.20.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.6.tgz", + "integrity": "sha512-2yEB3nQXp/tBQDN0hJScJQheXdvU2wFhh6ld7K/aiZ1vYcak6N/BKjY1QrU6BvO2JWYS8bEs14FRaxXosxy2zw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -7293,15 +7070,15 @@ } }, "node_modules/vite-node/node_modules/vite": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.4.tgz", - "integrity": "sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.2.tgz", + "integrity": "sha512-PcNtT5HeDxb3QaSqFYkEum8f5sCVe0R3WK20qxgIvNBZPXU/Obxs/+ubBMeE7nLWeCo2LDzv+8hRYSlcaSehig==", "dev": true, "dependencies": { - "esbuild": "^0.16.14", + "esbuild": "^0.17.5", "postcss": "^8.4.21", "resolve": "^1.22.1", - "rollup": "^3.10.0" + "rollup": "^3.18.0" }, "bin": { "vite": "bin/vite.js" @@ -7342,9 +7119,9 @@ } }, "node_modules/vite-plugin-pwa": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.12.3.tgz", - "integrity": "sha512-gmYdIVXpmBuNjzbJFPZFzxWYrX4lHqwMAlOtjmXBbxApiHjx9QPXKQPJjSpeTeosLKvVbNcKSAAhfxMda0QVNQ==", + "version": "0.12.8", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.12.8.tgz", + "integrity": "sha512-pSiFHmnJGMQJJL8aJzQ8SaraZBSBPMGvGUkCNzheIq9UQCEk/eP3UmANNmS9eupuhIpTK8AdxTOHcaMcAqAbCA==", "dependencies": { "debug": "^4.3.4", "fast-glob": "^3.2.11", @@ -7363,9 +7140,9 @@ } }, "node_modules/vite-tsconfig-paths": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-3.5.0.tgz", - "integrity": "sha512-NKIubr7gXgh/3uniQaOytSg+aKWPrjquP6anAy+zCWEn6h9fB8z2/qdlfQrTgZWaXJ2pHVlllrSdRZltHn9P4g==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-3.6.0.tgz", + "integrity": "sha512-UfsPYonxLqPD633X8cWcPFVuYzx/CMNHAjZTasYwX69sXpa4gNmQkR0XCjj82h7zhLGdTWagMjC1qfb9S+zv0A==", "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", @@ -7377,18 +7154,18 @@ } }, "node_modules/vitest": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.29.3.tgz", - "integrity": "sha512-muMsbXnZsrzDGiyqf/09BKQsGeUxxlyLeLK/sFFM4EXdURPQRv8y7dco32DXaRORYP0bvyN19C835dT23mL0ow==", + "version": "0.29.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.29.8.tgz", + "integrity": "sha512-JIAVi2GK5cvA6awGpH0HvH/gEG9PZ0a/WoxdiV3PmqK+3CjQMf8c+J/Vhv4mdZ2nRyXFw66sAg6qz7VNkaHfDQ==", "dev": true, "dependencies": { "@types/chai": "^4.3.4", "@types/chai-subset": "^1.3.3", "@types/node": "*", - "@vitest/expect": "0.29.3", - "@vitest/runner": "0.29.3", - "@vitest/spy": "0.29.3", - "@vitest/utils": "0.29.3", + "@vitest/expect": "0.29.8", + "@vitest/runner": "0.29.8", + "@vitest/spy": "0.29.8", + "@vitest/utils": "0.29.8", "acorn": "^8.8.1", "acorn-walk": "^8.2.0", "cac": "^6.7.14", @@ -7401,10 +7178,10 @@ "std-env": "^3.3.1", "strip-literal": "^1.0.0", "tinybench": "^2.3.1", - "tinypool": "^0.3.1", + "tinypool": "^0.4.0", "tinyspy": "^1.0.2", "vite": "^3.0.0 || ^4.0.0", - "vite-node": "0.29.3", + "vite-node": "0.29.8", "why-is-node-running": "^2.2.2" }, "bin": { @@ -7421,7 +7198,10 @@ "@vitest/browser": "*", "@vitest/ui": "*", "happy-dom": "*", - "jsdom": "*" + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" }, "peerDependenciesMeta": { "@edge-runtime/vm": { @@ -7438,38 +7218,22 @@ }, "jsdom": { "optional": true + }, + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true } } }, - "node_modules/vitest/node_modules/@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vitest/node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/vitest/node_modules/esbuild": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", - "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "version": "0.17.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.17.tgz", + "integrity": "sha512-/jUywtAymR8jR4qsa2RujlAF7Krpt5VWi72Q2yuLD4e/hvtNcFQ0I1j8m/bxq238pf3/0KO5yuXNpuLx8BE1KA==", "dev": true, "hasInstallScript": true, "bin": { @@ -7479,34 +7243,34 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" + "@esbuild/android-arm": "0.17.17", + "@esbuild/android-arm64": "0.17.17", + "@esbuild/android-x64": "0.17.17", + "@esbuild/darwin-arm64": "0.17.17", + "@esbuild/darwin-x64": "0.17.17", + "@esbuild/freebsd-arm64": "0.17.17", + "@esbuild/freebsd-x64": "0.17.17", + "@esbuild/linux-arm": "0.17.17", + "@esbuild/linux-arm64": "0.17.17", + "@esbuild/linux-ia32": "0.17.17", + "@esbuild/linux-loong64": "0.17.17", + "@esbuild/linux-mips64el": "0.17.17", + "@esbuild/linux-ppc64": "0.17.17", + "@esbuild/linux-riscv64": "0.17.17", + "@esbuild/linux-s390x": "0.17.17", + "@esbuild/linux-x64": "0.17.17", + "@esbuild/netbsd-x64": "0.17.17", + "@esbuild/openbsd-x64": "0.17.17", + "@esbuild/sunos-x64": "0.17.17", + "@esbuild/win32-arm64": "0.17.17", + "@esbuild/win32-ia32": "0.17.17", + "@esbuild/win32-x64": "0.17.17" } }, "node_modules/vitest/node_modules/rollup": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.15.0.tgz", - "integrity": "sha512-F9hrCAhnp5/zx/7HYmftvsNBkMfLfk/dXUh73hPSM2E3CRgap65orDNJbLetoiUFwSAk6iHPLvBrZ5iHYvzqsg==", + "version": "3.20.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.6.tgz", + "integrity": "sha512-2yEB3nQXp/tBQDN0hJScJQheXdvU2wFhh6ld7K/aiZ1vYcak6N/BKjY1QrU6BvO2JWYS8bEs14FRaxXosxy2zw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -7520,15 +7284,15 @@ } }, "node_modules/vitest/node_modules/vite": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.1.tgz", - "integrity": "sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.2.tgz", + "integrity": "sha512-PcNtT5HeDxb3QaSqFYkEum8f5sCVe0R3WK20qxgIvNBZPXU/Obxs/+ubBMeE7nLWeCo2LDzv+8hRYSlcaSehig==", "dev": true, "dependencies": { - "esbuild": "^0.16.14", + "esbuild": "^0.17.5", "postcss": "^8.4.21", "resolve": "^1.22.1", - "rollup": "^3.10.0" + "rollup": "^3.18.0" }, "bin": { "vite": "bin/vite.js" @@ -7569,15 +7333,15 @@ } }, "node_modules/vue": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.37.tgz", - "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.47.tgz", + "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==", "dependencies": { - "@vue/compiler-dom": "3.2.37", - "@vue/compiler-sfc": "3.2.37", - "@vue/runtime-dom": "3.2.37", - "@vue/server-renderer": "3.2.37", - "@vue/shared": "3.2.37" + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-sfc": "3.2.47", + "@vue/runtime-dom": "3.2.47", + "@vue/server-renderer": "3.2.47", + "@vue/shared": "3.2.47" } }, "node_modules/vue-eslint-parser": { @@ -7605,9 +7369,9 @@ } }, "node_modules/vue-eslint-parser/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -7615,6 +7379,9 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/vue-eslint-parser/node_modules/estraverse": { @@ -7626,10 +7393,22 @@ "node": ">=4.0" } }, + "node_modules/vue-eslint-parser/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/vue-eslint-parser/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -7641,12 +7420,18 @@ "node": ">=10" } }, + "node_modules/vue-eslint-parser/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/vue-next-select": { - "version": "2.10.4", - "resolved": "https://registry.npmjs.org/vue-next-select/-/vue-next-select-2.10.4.tgz", - "integrity": "sha512-9Lg1mD2h9w6mm4gkXPyVMWhOdUPtA/JF9VrNyo6mqjkh4ktGLVQpNhygVBCg13RFHdEq3iqawjeFmp3FJq+CUw==", + "version": "2.10.5", + "resolved": "https://registry.npmjs.org/vue-next-select/-/vue-next-select-2.10.5.tgz", + "integrity": "sha512-O77bdbp2wj/Dkpd8XFv21EYXI8UtqgTxnKBsycCd2pUe4SAxKsT1h3MT+b7tuyGQV5udMpBYaUE445Z1VdHyUw==", "engines": { - "node": ">=10" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { "vue": "^3.2.0" @@ -7685,9 +7470,9 @@ } }, "node_modules/vue-transition-expand/node_modules/@vue/compiler-sfc": { - "version": "2.7.9", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.9.tgz", - "integrity": "sha512-TD2FvT0fPUezw5RVP4tfwTZnKHP0QjeEUb39y7tORvOJQTjbOuHJEk4GPHUPsRaTeQ8rjuKjntyrYcEIx+ODxg==", + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", + "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", "dependencies": { "@babel/parser": "^7.18.4", "postcss": "^8.4.14", @@ -7695,16 +7480,16 @@ } }, "node_modules/vue-transition-expand/node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" }, "node_modules/vue-transition-expand/node_modules/vue": { - "version": "2.7.9", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.9.tgz", - "integrity": "sha512-GeWCvAUkjzD5q4A3vgi8ka5r9bM6g8fmNmx/9VnHDKCaEzBcoVw+7UcQktZHrJ2jhlI+Zv8L57pMCIwM4h4MWg==", + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz", + "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", "dependencies": { - "@vue/compiler-sfc": "2.7.9", + "@vue/compiler-sfc": "2.7.14", "csstype": "^3.1.0" } }, @@ -7734,25 +7519,16 @@ "vue": "^3.0.1" } }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, "node_modules/w3c-xmlserializer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", - "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, "dependencies": { "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=14" } }, "node_modules/webidl-conversions": { @@ -7833,6 +7609,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/why-is-node-running": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", @@ -7939,9 +7734,9 @@ } }, "node_modules/workbox-build/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -8120,16 +7915,16 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -8156,10 +7951,9 @@ "dev": true }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yocto-queue": { "version": "0.1.0", @@ -8173,5621 +7967,5 @@ "url": "https://github.com/sponsors/sindresorhus" } } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==" - }, - "@babel/core": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", - "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.10", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.10", - "@babel/types": "^7.18.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", - "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", - "requires": { - "@babel/types": "^7.18.10", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", - "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz", - "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", - "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", - "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", - "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", - "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", - "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==" - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" - }, - "@babel/helper-wrap-function": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz", - "integrity": "sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==", - "requires": { - "@babel/helper-function-name": "^7.18.9", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.11", - "@babel/types": "^7.18.10" - } - }, - "@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", - "requires": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", - "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", - "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", - "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", - "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.8" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", - "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz", - "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-replace-supers": "^7.18.9", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz", - "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz", - "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==", - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", - "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz", - "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.12.tgz", - "integrity": "sha512-2vjjam0cum0miPkenUbQswKowuxs/NjMwIKEq0zwegRxXk12C9YOF9STXnaUptITOtOJHKHpzvvWYOjbm6tc0w==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-typescript": "^7.18.6" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", - "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", - "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.18.10", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", - "@babel/plugin-transform-classes": "^7.18.9", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.9", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.9", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.9", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.10", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.18.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", - "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.11", - "@babel/types": "^7.18.10", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", - "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", - "requires": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - } - }, - "@cush/relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@cush/relative/-/relative-1.0.0.tgz", - "integrity": "sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==" - }, - "@esbuild/android-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", - "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", - "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", - "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", - "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", - "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", - "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", - "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", - "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", - "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", - "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", - "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", - "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", - "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", - "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", - "dev": true, - "optional": true - }, - "@esbuild/linux-s390x": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", - "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", - "dev": true, - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", - "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", - "dev": true, - "optional": true - }, - "@esbuild/netbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", - "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", - "dev": true, - "optional": true - }, - "@esbuild/openbsd-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", - "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", - "dev": true, - "optional": true - }, - "@esbuild/sunos-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", - "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", - "dev": true, - "optional": true - }, - "@esbuild/win32-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", - "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", - "dev": true, - "optional": true - }, - "@esbuild/win32-ia32": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", - "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", - "dev": true, - "optional": true - }, - "@esbuild/win32-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", - "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", - "dev": true, - "optional": true - }, - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "@fontsource/material-icons": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/@fontsource/material-icons/-/material-icons-4.5.4.tgz", - "integrity": "sha512-YGmXkkEdu6EIgpFKNmB/nIXzZocwSmbI01Ninpmml8x8BT0M6RR++V1KqOfpzZ6Cw/FQ2/KYonQ3x4IY/4VRRA==" - }, - "@fontsource/roboto-mono": { - "version": "4.5.8", - "resolved": "https://registry.npmjs.org/@fontsource/roboto-mono/-/roboto-mono-4.5.8.tgz", - "integrity": "sha512-AW44UkbQD0w1CT5mzDbsvhGZ6/bb0YmZzoELj6Sx8vcVEzcbYGUdt2Dtl5zqlOuYMWQFY1mniwWyVv+Bm/lVxw==" - }, - "@humanwhocodes/config-array": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", - "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/gitignore-to-minimatch": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", - "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@ivanv/vue-collapse-transition": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@ivanv/vue-collapse-transition/-/vue-collapse-transition-1.0.2.tgz", - "integrity": "sha512-eWEameFXJM/1khcoKbITvKjYYXDP1WKQ/Xf9ItJVPoEjCiOdocR3AgDAERzDrNNg4oWK28gRGi+0ft8Te27zxw==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@pixi/app": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@pixi/app/-/app-6.3.2.tgz", - "integrity": "sha512-V1jnhL92OPiquXtLxUeSZiVDd1mtjRnYpBKA958w29MrIRBx3Y6dgnvsaFZGGWBvSL//WRYV23iZKVL/jRGmmQ==", - "requires": {} - }, - "@pixi/constants": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-6.3.2.tgz", - "integrity": "sha512-sUE8QEJNl4vWUybS0YqpVUBWoOyLkr5bSj1+3mpmbWJTMVmLB2voFXo7XpSNCBlLH1SBN5flcgJlUWOCgNyATg==" - }, - "@pixi/core": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@pixi/core/-/core-6.3.2.tgz", - "integrity": "sha512-91Fw0CbFpPtMKo5TG1wdaZGgR99lX87l15F7kgge7FM7ZR4EghLiJHU8whQ19f/UNOd8AG7mHD84lUB1VXXfoA==", - "requires": { - "@types/offscreencanvas": "^2019.6.4" - } - }, - "@pixi/display": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@pixi/display/-/display-6.3.2.tgz", - "integrity": "sha512-D+WiM0BcyPK91RYxl7TXXVNz/5lOGs8Q6jtCMcWgTHwCXxWPOHFnNZ4KPJZpUQ7me8Tl2u+c9hfB5Oh1+17r/Q==", - "requires": {} - }, - "@pixi/math": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@pixi/math/-/math-6.3.2.tgz", - "integrity": "sha512-REXrCKQaT2shJ3p2Rpq1ZYV4iUeAOUFKnLN2KteQWtB5HQpB8b+w5xBGI+TcnY0FUhx92fbKPYTTvCftNZF4Jw==" - }, - "@pixi/particle-emitter": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@pixi/particle-emitter/-/particle-emitter-5.0.7.tgz", - "integrity": "sha512-g0vf+z2pFr+znJEzAii6T7CfMAKsCZuRc8bVY2znJDYxEKoAuU+XuqzHtOkGeR/VuiNCuJhMFLh+BDfXN4Fubw==", - "requires": {} - }, - "@pixi/runner": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-6.3.2.tgz", - "integrity": "sha512-Sspv4VTiV51GwoIg+WudHZHpT3ad5ukW20OLOR+eDOSLbgQEMfj4cTVRg27TvM/QZ/5LxeN3FqwWV+kiWpqCnw==", - "peer": true - }, - "@pixi/settings": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-6.3.2.tgz", - "integrity": "sha512-i5cLDUWFnRub3LPa3x7IzkH8MjSwPHyHWzIZKG5t8RiCfbhVfhWGEdKO9AYp8yO/xcf7AqtPK4mikXziL48tXA==", - "peer": true, - "requires": { - "ismobilejs": "^1.1.0" - } - }, - "@pixi/sprite": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-6.3.2.tgz", - "integrity": "sha512-T1KJ8l2f8Otn6Se6h4b2pz2nrUSe59Pnmj2WIzgBisM245h7dGATs05MisMaLV6Lg/3gTBTxsLBmKsbDSQqbNw==", - "requires": {} - }, - "@pixi/ticker": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-6.3.2.tgz", - "integrity": "sha512-Au9IO85zCOOCz50aJALFxJ2C8gbgxvD0dSNm7A5FauanJbxDcctIyrW6I51nNyHyeLIUFEkuD2jE/DmcXsXnpw==", - "requires": {} - }, - "@pixi/utils": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-6.3.2.tgz", - "integrity": "sha512-VpB403kfqwXK9w7Qb6ex0aW0g6pWI/t43F2Z8CA/lAfYcN3O0XoxDucvmkLTQWsMtYn+Yf7YhAcLV5SemKwP0A==", - "peer": true, - "requires": { - "@types/earcut": "^2.1.0", - "earcut": "^2.2.2", - "eventemitter3": "^3.1.0", - "url": "^0.11.0" - } - }, - "@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - } - }, - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - } - } - }, - "@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - } - }, - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - } - } - }, - "@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - } - }, - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - } - } - }, - "@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "@rushstack/eslint-patch": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz", - "integrity": "sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==", - "dev": true - }, - "@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "requires": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", - "dev": true - }, - "@types/chai-subset": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz", - "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==", - "dev": true, - "requires": { - "@types/chai": "*" - } - }, - "@types/earcut": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/earcut/-/earcut-2.1.1.tgz", - "integrity": "sha512-w8oigUCDjElRHRRrMvn/spybSMyX8MTkKA5Dv+tS1IE/TgmNZPqUYtvYBXGY8cieSE66gm+szeK+bnbxC2xHTQ==", - "peer": true - }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/lz-string": { - "version": "1.3.34", - "resolved": "https://registry.npmjs.org/@types/lz-string/-/lz-string-1.3.34.tgz", - "integrity": "sha512-j6G1e8DULJx3ONf6NdR5JiR2ZY3K3PaaqiEuKYkLQO0Czfi1AzrtjfnfCROyWGeDd5IVMKCwsgSmMip9OWijow==", - "dev": true - }, - "@types/node": { - "version": "18.7.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.9.tgz", - "integrity": "sha512-0N5Y1XAdcl865nDdjbO0m3T6FdmQ4ijE89/urOHLREyTXbpMWbSafx9y7XIsgWGtwUP2iYTinLyyW3FatAxBLQ==" - }, - "@types/offscreencanvas": { - "version": "2019.7.0", - "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz", - "integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==" - }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "requires": { - "@types/node": "*" - } - }, - "@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz", - "integrity": "sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/type-utils": "5.33.1", - "@typescript-eslint/utils": "5.33.1", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/parser": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz", - "integrity": "sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/typescript-estree": "5.33.1", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz", - "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/visitor-keys": "5.33.1" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz", - "integrity": "sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g==", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.33.1", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz", - "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz", - "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/visitor-keys": "5.33.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/utils": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.1.tgz", - "integrity": "sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/typescript-estree": "5.33.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz", - "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.33.1", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@vitejs/plugin-vue": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz", - "integrity": "sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==", - "requires": {} - }, - "@vitejs/plugin-vue-jsx": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-1.3.10.tgz", - "integrity": "sha512-Cf5zznh4yNMiEMBfTOztaDVDmK1XXfgxClzOSUVUc8WAmHzogrCUeM8B05ABzuGtg0D1amfng+mUmSIOFGP3Pw==", - "requires": { - "@babel/core": "^7.17.9", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-transform-typescript": "^7.16.8", - "@rollup/pluginutils": "^4.2.0", - "@vue/babel-plugin-jsx": "^1.1.1", - "hash-sum": "^2.0.0" - } - }, - "@vitest/expect": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.29.3.tgz", - "integrity": "sha512-z/0JqBqqrdtrT/wzxNrWC76EpkOHdl+SvuNGxWulLaoluygntYyG5wJul5u/rQs5875zfFz/F+JaDf90SkLUIg==", - "dev": true, - "requires": { - "@vitest/spy": "0.29.3", - "@vitest/utils": "0.29.3", - "chai": "^4.3.7" - } - }, - "@vitest/runner": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.29.3.tgz", - "integrity": "sha512-XLi8ctbvOWhUWmuvBUSIBf8POEDH4zCh6bOuVxm/KGfARpgmVF1ku+vVNvyq85va+7qXxtl+MFmzyXQ2xzhAvw==", - "dev": true, - "requires": { - "@vitest/utils": "0.29.3", - "p-limit": "^4.0.0", - "pathe": "^1.1.0" - }, - "dependencies": { - "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "requires": { - "yocto-queue": "^1.0.0" - } - }, - "yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true - } - } - }, - "@vitest/spy": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.29.3.tgz", - "integrity": "sha512-LLpCb1oOCOZcBm0/Oxbr1DQTuKLRBsSIHyLYof7z4QVE8/v8NcZKdORjMUq645fcfX55+nLXwU/1AQ+c2rND+w==", - "dev": true, - "requires": { - "tinyspy": "^1.0.2" - } - }, - "@vitest/utils": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.29.3.tgz", - "integrity": "sha512-hg4Ff8AM1GtUnLpUJlNMxrf9f4lZr/xRJjh3uJ0QFP+vjaW82HAxKrmeBmLnhc8Os2eRf+f+VBu4ts7TafPPkA==", - "dev": true, - "requires": { - "cli-truncate": "^3.1.0", - "diff": "^5.1.0", - "loupe": "^2.3.6", - "pretty-format": "^27.5.1" - } - }, - "@volar/code-gen": { - "version": "0.38.9", - "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.38.9.tgz", - "integrity": "sha512-n6LClucfA+37rQeskvh9vDoZV1VvCVNy++MAPKj2dT4FT+Fbmty/SDQqnsEBtdEe6E3OQctFvA/IcKsx3Mns0A==", - "dev": true, - "requires": { - "@volar/source-map": "0.38.9" - } - }, - "@volar/source-map": { - "version": "0.38.9", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.38.9.tgz", - "integrity": "sha512-ba0UFoHDYry+vwKdgkWJ6xlQT+8TFtZg1zj9tSjj4PykW1JZDuM0xplMotLun4h3YOoYfY9K1huY5gvxmrNLIw==", - "dev": true - }, - "@volar/vue-code-gen": { - "version": "0.38.9", - "resolved": "https://registry.npmjs.org/@volar/vue-code-gen/-/vue-code-gen-0.38.9.tgz", - "integrity": "sha512-tzj7AoarFBKl7e41MR006ncrEmNPHALuk8aG4WdDIaG387X5//5KhWC5Ff3ZfB2InGSeNT+CVUd74M0gS20rjA==", - "dev": true, - "requires": { - "@volar/code-gen": "0.38.9", - "@volar/source-map": "0.38.9", - "@vue/compiler-core": "^3.2.37", - "@vue/compiler-dom": "^3.2.37", - "@vue/shared": "^3.2.37" - } - }, - "@volar/vue-typescript": { - "version": "0.38.9", - "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-0.38.9.tgz", - "integrity": "sha512-iJMQGU91ADi98u8V1vXd2UBmELDAaeSP0ZJaFjwosClQdKlJQYc6MlxxKfXBZisHqfbhdtrGRyaryulnYtliZw==", - "dev": true, - "requires": { - "@volar/code-gen": "0.38.9", - "@volar/source-map": "0.38.9", - "@volar/vue-code-gen": "0.38.9", - "@vue/compiler-sfc": "^3.2.37", - "@vue/reactivity": "^3.2.37" - } - }, - "@vue/babel-helper-vue-transform-on": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz", - "integrity": "sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==" - }, - "@vue/babel-plugin-jsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz", - "integrity": "sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "@vue/babel-helper-vue-transform-on": "^1.0.2", - "camelcase": "^6.0.0", - "html-tags": "^3.1.0", - "svg-tags": "^1.0.0" - } - }, - "@vue/compiler-core": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", - "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", - "requires": { - "@babel/parser": "^7.16.4", - "@vue/shared": "3.2.37", - "estree-walker": "^2.0.2", - "source-map": "^0.6.1" - } - }, - "@vue/compiler-dom": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", - "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", - "requires": { - "@vue/compiler-core": "3.2.37", - "@vue/shared": "3.2.37" - } - }, - "@vue/compiler-sfc": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", - "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", - "requires": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.37", - "@vue/compiler-dom": "3.2.37", - "@vue/compiler-ssr": "3.2.37", - "@vue/reactivity-transform": "3.2.37", - "@vue/shared": "3.2.37", - "estree-walker": "^2.0.2", - "magic-string": "^0.25.7", - "postcss": "^8.1.10", - "source-map": "^0.6.1" - } - }, - "@vue/compiler-ssr": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", - "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", - "requires": { - "@vue/compiler-dom": "3.2.37", - "@vue/shared": "3.2.37" - } - }, - "@vue/eslint-config-prettier": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.0.0.tgz", - "integrity": "sha512-/CTc6ML3Wta1tCe1gUeO0EYnVXfo3nJXsIhZ8WJr3sov+cGASr6yuiibJTL6lmIBm7GobopToOuB3B6AWyV0Iw==", - "dev": true, - "requires": { - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-prettier": "^4.0.0" - } - }, - "@vue/eslint-config-typescript": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-10.0.0.tgz", - "integrity": "sha512-F94cL8ug3FaYXlCfU5/wiGjk1qeadmoBpRGAOBq+qre3Smdupa59dd6ZJrsfRODpsMPyTG7330juMDsUvpZ3Rw==", - "dev": true, - "requires": { - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", - "vue-eslint-parser": "^8.0.0" - } - }, - "@vue/reactivity": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", - "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", - "requires": { - "@vue/shared": "3.2.37" - } - }, - "@vue/reactivity-transform": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz", - "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==", - "requires": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.37", - "@vue/shared": "3.2.37", - "estree-walker": "^2.0.2", - "magic-string": "^0.25.7" - } - }, - "@vue/runtime-core": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.37.tgz", - "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", - "requires": { - "@vue/reactivity": "3.2.37", - "@vue/shared": "3.2.37" - } - }, - "@vue/runtime-dom": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", - "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", - "requires": { - "@vue/runtime-core": "3.2.37", - "@vue/shared": "3.2.37", - "csstype": "^2.6.8" - } - }, - "@vue/server-renderer": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.37.tgz", - "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", - "requires": { - "@vue/compiler-ssr": "3.2.37", - "@vue/shared": "3.2.37" - } - }, - "@vue/shared": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz", - "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" - }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "amator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/amator/-/amator-1.1.0.tgz", - "integrity": "sha512-V5+aH8pe+Z3u/UG3L3pG3BaFQGXAyXHVQDroRwjPHdh08bcUEchAVsU1MCuJSCaU5o60wTK6KaE6te5memzgYw==", - "requires": { - "bezier-easing": "^2.0.3" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz", - "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==", - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.2", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", - "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz", - "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.2" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "bezier-easing": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bezier-easing/-/bezier-easing-2.1.0.tgz", - "integrity": "sha512-gbIqZ/eslnUFC1tjEvtz0sgx+xTK20wDnYMIA27VA04R7w6xxXQPZDbibjA9DTWZRA2CXtwHykkVzlCaAJAZig==" - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "peer": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", - "requires": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==" - }, - "cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "caniuse-lite": { - "version": "1.0.30001380", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001380.tgz", - "integrity": "sha512-OO+pPubxx16lkI7TVrbFpde8XHz66SMwstl1YWpg6uMGw56XnhYVwtPIjvX4kYpzwMwQKr4DDce394E03dQPGg==" - }, - "chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true - }, - "cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" - }, - "core-js-compat": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.24.1.tgz", - "integrity": "sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw==", - "requires": { - "browserslist": "^4.21.3", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "peer": true - }, - "cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "csstype": { - "version": "2.6.20", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", - "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" - }, - "data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "dev": true, - "requires": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decimal.js": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.0.tgz", - "integrity": "sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==", - "dev": true - }, - "deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "dev": true, - "requires": { - "webidl-conversions": "^7.0.0" - } - }, - "earcut": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", - "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", - "peer": true - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "ejs": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", - "requires": { - "jake": "^10.8.5" - } - }, - "electron-to-chromium": { - "version": "1.4.225", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.225.tgz", - "integrity": "sha512-ICHvGaCIQR3P88uK8aRtx8gmejbVJyC6bB4LEC3anzBrIzdzC7aiZHY4iFfXhN4st6I7lMO0x4sgBHf/7kBvRw==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "entities": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz", - "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==", - "dev": true - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "esbuild": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", - "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", - "requires": { - "@esbuild/linux-loong64": "0.14.54", - "esbuild-android-64": "0.14.54", - "esbuild-android-arm64": "0.14.54", - "esbuild-darwin-64": "0.14.54", - "esbuild-darwin-arm64": "0.14.54", - "esbuild-freebsd-64": "0.14.54", - "esbuild-freebsd-arm64": "0.14.54", - "esbuild-linux-32": "0.14.54", - "esbuild-linux-64": "0.14.54", - "esbuild-linux-arm": "0.14.54", - "esbuild-linux-arm64": "0.14.54", - "esbuild-linux-mips64le": "0.14.54", - "esbuild-linux-ppc64le": "0.14.54", - "esbuild-linux-riscv64": "0.14.54", - "esbuild-linux-s390x": "0.14.54", - "esbuild-netbsd-64": "0.14.54", - "esbuild-openbsd-64": "0.14.54", - "esbuild-sunos-64": "0.14.54", - "esbuild-windows-32": "0.14.54", - "esbuild-windows-64": "0.14.54", - "esbuild-windows-arm64": "0.14.54" - } - }, - "esbuild-android-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", - "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", - "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", - "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", - "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", - "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", - "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", - "optional": true - }, - "esbuild-linux-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", - "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", - "optional": true - }, - "esbuild-linux-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", - "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", - "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", - "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", - "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", - "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", - "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", - "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", - "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", - "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", - "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", - "optional": true - }, - "esbuild-windows-32": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", - "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", - "optional": true - }, - "esbuild-windows-64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", - "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.14.54", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", - "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", - "optional": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", - "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.10.4", - "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "globby": "^11.1.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "globals": { - "version": "13.17.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", - "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } - } - }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "requires": {} - }, - "eslint-plugin-prettier": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", - "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-vue": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz", - "integrity": "sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==", - "dev": true, - "peer": true, - "requires": { - "eslint-utils": "^3.0.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.0.1", - "postcss-selector-parser": "^6.0.9", - "semver": "^7.3.5", - "vue-eslint-parser": "^8.0.1" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", - "peer": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "glob-regex": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/glob-regex/-/glob-regex-0.3.2.tgz", - "integrity": "sha512-m5blUd3/OqDTWwzBBtWBPrGlAzatRywHameHeekAZyZrskYouOGdNB8T/q6JucucvJXtOuyHIn0/Yia7iDasDw==" - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hash-sum": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" - }, - "html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dev": true, - "requires": { - "whatwg-encoding": "^2.0.0" - } - }, - "html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "idb": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.0.2.tgz", - "integrity": "sha512-jjKrT1EnyZewQ/gCBb/eyiYrhGzws2FeY92Yx8qT9S9GeQAmo4JFVIiWRIfKW/6Ob9A+UDAOW9j9jn58fy2HIg==" - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" - }, - "is-core-module": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", - "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" - }, - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "ismobilejs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ismobilejs/-/ismobilejs-1.1.1.tgz", - "integrity": "sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw==", - "peer": true - }, - "jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", - "requires": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsdom": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.0.tgz", - "integrity": "sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==", - "dev": true, - "requires": { - "abab": "^2.0.6", - "acorn": "^8.7.1", - "acorn-globals": "^6.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.3.1", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "^7.0.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^3.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.8.0", - "xml-name-validator": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" - }, - "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - } - } - }, - "jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==" - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "local-pkg": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", - "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" - }, - "loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", - "dev": true, - "requires": { - "get-func-name": "^2.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "lz-string": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", - "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==" - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "mlly": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.2.0.tgz", - "integrity": "sha512-+c7A3CV0KGdKcylsI6khWyts/CYrGTrRVo4R/I7u/cUsy0Conxa6LUhiEzVKIw14lc2L5aiO4+SeVe4TeGRKww==", - "dev": true, - "requires": { - "acorn": "^8.8.2", - "pathe": "^1.1.0", - "pkg-types": "^1.0.2", - "ufo": "^1.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nanoevents": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/nanoevents/-/nanoevents-6.0.2.tgz", - "integrity": "sha512-FRS2otuFcPPYDPYViNWQ42+1iZqbXydinkRHTHFxrF4a1CpBfmydR9zkI44WSXAXCyPrkcGtPk5CnpW6Y3lFKQ==" - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "ngraph.events": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-1.2.2.tgz", - "integrity": "sha512-JsUbEOzANskax+WSYiAPETemLWYXmixuPAlmZmhIbIj6FH/WDgEGCGnRwUQBK0GjOnVm8Ui+e5IJ+5VZ4e32eQ==" - }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "peer": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "nwsapi": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", - "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==", - "dev": true - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "panzoom": { - "version": "9.4.3", - "resolved": "https://registry.npmjs.org/panzoom/-/panzoom-9.4.3.tgz", - "integrity": "sha512-xaxCpElcRbQsUtIdwlrZA90P90+BHip4Vda2BC8MEb4tkI05PmR6cKECdqUCZ85ZvBHjpI9htJrZBxV5Gp/q/w==", - "requires": { - "amator": "^1.1.0", - "ngraph.events": "^1.2.2", - "wheel": "^1.0.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse5": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz", - "integrity": "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==", - "dev": true, - "requires": { - "entities": "^4.3.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pathe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.0.tgz", - "integrity": "sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==", - "dev": true - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pkg-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.2.tgz", - "integrity": "sha512-hM58GKXOcj8WTqUXnsQyJYXdeAPbythQgEF3nTcEo+nkD49chjQ9IKm/QJy9xf6JakXptz86h7ecP2024rrLaQ==", - "dev": true, - "requires": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.1.1", - "pathe": "^1.1.0" - } - }, - "postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "peer": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-bytes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.0.0.tgz", - "integrity": "sha512-6UqkYefdogmzqAZWzJ7laYeJnaXDy2/J+ZqiiMtS7t7OfpXWTlaeGMwX8U6EFvPV/YWWEKRkS8hKS4k60WHTOg==" - }, - "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "peer": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "recrawl-sync": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recrawl-sync/-/recrawl-sync-2.2.2.tgz", - "integrity": "sha512-E2sI4F25Fu2nrfV+KsnC7/qfk/spQIYXlonfQoS4rwxeNK5BjxnLPbWiRXHVXPwYBOTWtPX5765kTm/zJiL+LQ==", - "requires": { - "@cush/relative": "^1.0.0", - "glob-regex": "^0.3.0", - "slash": "^3.0.0", - "tslib": "^1.9.3" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" - }, - "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" - } - } - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.77.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz", - "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - } - } - }, - "sortablejs": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz", - "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" - }, - "stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true - }, - "std-env": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.2.tgz", - "integrity": "sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" - }, - "strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==" - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "strip-literal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.0.1.tgz", - "integrity": "sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==", - "dev": true, - "requires": { - "acorn": "^8.8.2" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==" - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" - }, - "tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "requires": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - } - }, - "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "tinybench": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.3.1.tgz", - "integrity": "sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==", - "dev": true - }, - "tinypool": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.3.1.tgz", - "integrity": "sha512-zLA1ZXlstbU2rlpA4CIeVaqvWq41MTWqLY3FfsAXgC8+f7Pk7zroaJQxDgxn1xNudKW6Kmj4808rPFShUlIRmQ==", - "dev": true - }, - "tinyspy": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.1.1.tgz", - "integrity": "sha512-UVq5AXt/gQlti7oxoIg5oi/9r0WpF7DGEVwXgqWSMmyN16+e3tl5lIvTaOpJ3TAtu5xFzWccFRM4R5NaWHF+4g==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - }, - "tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "tsconfig-paths": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.1.0.tgz", - "integrity": "sha512-AHx4Euop/dXFC+Vx589alFba8QItjF+8hf8LtmuiCwHyI4rHXQtOOENaM8kvYf5fR0dRChy3wzWIZ9WbB7FWow==", - "requires": { - "json5": "^2.2.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==" - }, - "typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", - "dev": true - }, - "ufo": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.1.1.tgz", - "integrity": "sha512-MvlCc4GHrmZdAllBc0iUDowff36Q9Ndw/UzqmEKyrfSzokTd9ZCy1i+IIk5hrYKkjoYVQyNbrw7/F8XJ2rEwTg==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" - }, - "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - }, - "update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "peer": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "peer": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "peer": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "vite": { - "version": "2.9.15", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.15.tgz", - "integrity": "sha512-fzMt2jK4vQ3yK56te3Kqpkaeq9DkcZfBbzHwYpobasvgYmP2SoAr6Aic05CsB4CzCZbsDv4sujX3pkEGhLabVQ==", - "requires": { - "esbuild": "^0.14.27", - "fsevents": "~2.3.2", - "postcss": "^8.4.13", - "resolve": "^1.22.0", - "rollup": ">=2.59.0 <2.78.0" - } - }, - "vite-node": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.29.3.tgz", - "integrity": "sha512-QYzYSA4Yt2IiduEjYbccfZQfxKp+T1Do8/HEpSX/G5WIECTFKJADwLs9c94aQH4o0A+UtCKU61lj1m5KvbxxQA==", - "dev": true, - "requires": { - "cac": "^6.7.14", - "debug": "^4.3.4", - "mlly": "^1.1.0", - "pathe": "^1.1.0", - "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0" - }, - "dependencies": { - "@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", - "dev": true, - "optional": true - }, - "esbuild": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", - "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" - } - }, - "rollup": { - "version": "3.19.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.19.1.tgz", - "integrity": "sha512-lAbrdN7neYCg/8WaoWn/ckzCtz+jr70GFfYdlf50OF7387HTg+wiuiqJRFYawwSPpqfqDNYqK7smY/ks2iAudg==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "vite": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.4.tgz", - "integrity": "sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==", - "dev": true, - "requires": { - "esbuild": "^0.16.14", - "fsevents": "~2.3.2", - "postcss": "^8.4.21", - "resolve": "^1.22.1", - "rollup": "^3.10.0" - } - } - } - }, - "vite-plugin-pwa": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.12.3.tgz", - "integrity": "sha512-gmYdIVXpmBuNjzbJFPZFzxWYrX4lHqwMAlOtjmXBbxApiHjx9QPXKQPJjSpeTeosLKvVbNcKSAAhfxMda0QVNQ==", - "requires": { - "debug": "^4.3.4", - "fast-glob": "^3.2.11", - "pretty-bytes": "^6.0.0", - "rollup": "^2.75.7", - "workbox-build": "^6.5.3", - "workbox-window": "^6.5.3" - } - }, - "vite-tsconfig-paths": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-3.5.0.tgz", - "integrity": "sha512-NKIubr7gXgh/3uniQaOytSg+aKWPrjquP6anAy+zCWEn6h9fB8z2/qdlfQrTgZWaXJ2pHVlllrSdRZltHn9P4g==", - "requires": { - "debug": "^4.1.1", - "globrex": "^0.1.2", - "recrawl-sync": "^2.0.3", - "tsconfig-paths": "^4.0.0" - } - }, - "vitest": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.29.3.tgz", - "integrity": "sha512-muMsbXnZsrzDGiyqf/09BKQsGeUxxlyLeLK/sFFM4EXdURPQRv8y7dco32DXaRORYP0bvyN19C835dT23mL0ow==", - "dev": true, - "requires": { - "@types/chai": "^4.3.4", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "@vitest/expect": "0.29.3", - "@vitest/runner": "0.29.3", - "@vitest/spy": "0.29.3", - "@vitest/utils": "0.29.3", - "acorn": "^8.8.1", - "acorn-walk": "^8.2.0", - "cac": "^6.7.14", - "chai": "^4.3.7", - "debug": "^4.3.4", - "local-pkg": "^0.4.2", - "pathe": "^1.1.0", - "picocolors": "^1.0.0", - "source-map": "^0.6.1", - "std-env": "^3.3.1", - "strip-literal": "^1.0.0", - "tinybench": "^2.3.1", - "tinypool": "^0.3.1", - "tinyspy": "^1.0.2", - "vite": "^3.0.0 || ^4.0.0", - "vite-node": "0.29.3", - "why-is-node-running": "^2.2.2" - }, - "dependencies": { - "@esbuild/linux-loong64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", - "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", - "dev": true, - "optional": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "esbuild": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", - "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.16.17", - "@esbuild/android-arm64": "0.16.17", - "@esbuild/android-x64": "0.16.17", - "@esbuild/darwin-arm64": "0.16.17", - "@esbuild/darwin-x64": "0.16.17", - "@esbuild/freebsd-arm64": "0.16.17", - "@esbuild/freebsd-x64": "0.16.17", - "@esbuild/linux-arm": "0.16.17", - "@esbuild/linux-arm64": "0.16.17", - "@esbuild/linux-ia32": "0.16.17", - "@esbuild/linux-loong64": "0.16.17", - "@esbuild/linux-mips64el": "0.16.17", - "@esbuild/linux-ppc64": "0.16.17", - "@esbuild/linux-riscv64": "0.16.17", - "@esbuild/linux-s390x": "0.16.17", - "@esbuild/linux-x64": "0.16.17", - "@esbuild/netbsd-x64": "0.16.17", - "@esbuild/openbsd-x64": "0.16.17", - "@esbuild/sunos-x64": "0.16.17", - "@esbuild/win32-arm64": "0.16.17", - "@esbuild/win32-ia32": "0.16.17", - "@esbuild/win32-x64": "0.16.17" - } - }, - "rollup": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.15.0.tgz", - "integrity": "sha512-F9hrCAhnp5/zx/7HYmftvsNBkMfLfk/dXUh73hPSM2E3CRgap65orDNJbLetoiUFwSAk6iHPLvBrZ5iHYvzqsg==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "vite": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.1.1.tgz", - "integrity": "sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==", - "dev": true, - "requires": { - "esbuild": "^0.16.14", - "fsevents": "~2.3.2", - "postcss": "^8.4.21", - "resolve": "^1.22.1", - "rollup": "^3.10.0" - } - } - } - }, - "vue": { - "version": "3.2.37", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.37.tgz", - "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", - "requires": { - "@vue/compiler-dom": "3.2.37", - "@vue/compiler-sfc": "3.2.37", - "@vue/runtime-dom": "3.2.37", - "@vue/server-renderer": "3.2.37", - "@vue/shared": "3.2.37" - } - }, - "vue-eslint-parser": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz", - "integrity": "sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==", - "dev": true, - "requires": { - "debug": "^4.3.2", - "eslint-scope": "^7.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.0.0", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.5" - }, - "dependencies": { - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "vue-next-select": { - "version": "2.10.4", - "resolved": "https://registry.npmjs.org/vue-next-select/-/vue-next-select-2.10.4.tgz", - "integrity": "sha512-9Lg1mD2h9w6mm4gkXPyVMWhOdUPtA/JF9VrNyo6mqjkh4ktGLVQpNhygVBCg13RFHdEq3iqawjeFmp3FJq+CUw==", - "requires": {} - }, - "vue-panzoom": { - "version": "git+ssh://git@github.com/thepaperpilot/vue-panzoom.git#fa3cc91f6842cdfbd1bfb433c75cac01f177fe2d", - "from": "vue-panzoom@https://github.com/thepaperpilot/vue-panzoom.git", - "requires": { - "panzoom": "^9.4.1" - } - }, - "vue-textarea-autosize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vue-textarea-autosize/-/vue-textarea-autosize-1.1.1.tgz", - "integrity": "sha512-B33Mg5ZDEfj/whhoPBLg25qqAdGHGM2NjDT99Qi5MXRyeLmXb4C3s6EprAHqy3nU0cooWXFU+IekI5DpoEbnFg==", - "requires": { - "core-js": "^2.6.5" - } - }, - "vue-toastification": { - "version": "2.0.0-rc.5", - "resolved": "https://registry.npmjs.org/vue-toastification/-/vue-toastification-2.0.0-rc.5.tgz", - "integrity": "sha512-q73e5jy6gucEO/U+P48hqX+/qyXDozAGmaGgLFm5tXX4wJBcVsnGp4e/iJqlm9xzHETYOilUuwOUje2Qg1JdwA==", - "requires": {} - }, - "vue-transition-expand": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/vue-transition-expand/-/vue-transition-expand-0.1.0.tgz", - "integrity": "sha512-4UKkK/ILk+Qh3WWJoupt7pXfzpjvb7vTQTaVUhnkr+FeXArndJVDyIn2eWIn7i37cVFXKu2jsDR47QELOCq/gQ==", - "requires": { - "vue": "^2.5.16" - }, - "dependencies": { - "@vue/compiler-sfc": { - "version": "2.7.9", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.9.tgz", - "integrity": "sha512-TD2FvT0fPUezw5RVP4tfwTZnKHP0QjeEUb39y7tORvOJQTjbOuHJEk4GPHUPsRaTeQ8rjuKjntyrYcEIx+ODxg==", - "requires": { - "@babel/parser": "^7.18.4", - "postcss": "^8.4.14", - "source-map": "^0.6.1" - } - }, - "csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" - }, - "vue": { - "version": "2.7.9", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.9.tgz", - "integrity": "sha512-GeWCvAUkjzD5q4A3vgi8ka5r9bM6g8fmNmx/9VnHDKCaEzBcoVw+7UcQktZHrJ2jhlI+Zv8L57pMCIwM4h4MWg==", - "requires": { - "@vue/compiler-sfc": "2.7.9", - "csstype": "^3.1.0" - } - } - } - }, - "vue-tsc": { - "version": "0.38.9", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-0.38.9.tgz", - "integrity": "sha512-Yoy5phgvGqyF98Fb4mYqboR4Q149jrdcGv5kSmufXJUq++RZJ2iMVG0g6zl+v3t4ORVWkQmRpsV4x2szufZ0LQ==", - "dev": true, - "requires": { - "@volar/vue-typescript": "0.38.9" - } - }, - "vuedraggable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz", - "integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==", - "requires": { - "sortablejs": "1.14.0" - } - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", - "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", - "dev": true, - "requires": { - "xml-name-validator": "^4.0.0" - } - }, - "webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "dev": true - }, - "whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dev": true, - "requires": { - "iconv-lite": "0.6.3" - } - }, - "whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "dev": true - }, - "whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", - "dev": true, - "requires": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - } - }, - "wheel": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wheel/-/wheel-1.0.0.tgz", - "integrity": "sha512-XiCMHibOiqalCQ+BaNSwRoZ9FDTAvOsXxGHXChBugewDj7HC8VBIER71dEOiRH1fSdLbRCQzngKTSiZ06ZQzeA==" - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "why-is-node-running": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", - "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", - "dev": true, - "requires": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "workbox-background-sync": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", - "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", - "requires": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "workbox-broadcast-update": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", - "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-build": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", - "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", - "requires": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.5.4", - "workbox-broadcast-update": "6.5.4", - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-google-analytics": "6.5.4", - "workbox-navigation-preload": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-range-requests": "6.5.4", - "workbox-recipes": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4", - "workbox-streams": "6.5.4", - "workbox-sw": "6.5.4", - "workbox-window": "6.5.4" - }, - "dependencies": { - "@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "requires": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - } - }, - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" - }, - "source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "requires": { - "whatwg-url": "^7.0.0" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "requires": { - "punycode": "^2.1.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "workbox-cacheable-response": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", - "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-core": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", - "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==" - }, - "workbox-expiration": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", - "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", - "requires": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "workbox-google-analytics": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", - "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", - "requires": { - "workbox-background-sync": "6.5.4", - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-navigation-preload": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", - "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-precaching": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", - "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", - "requires": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-range-requests": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", - "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-recipes": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", - "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", - "requires": { - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-routing": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", - "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-strategies": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", - "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-streams": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", - "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", - "requires": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4" - } - }, - "workbox-sw": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", - "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==" - }, - "workbox-window": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", - "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", - "requires": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.5.4" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "ws": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", - "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", - "dev": true, - "requires": {} - }, - "xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } } } diff --git a/tests/game/__snapshots__/modifiers.test.ts.snap b/tests/game/__snapshots__/modifiers.test.ts.snap index 2875004..9822ce8 100644 --- a/tests/game/__snapshots__/modifiers.test.ts.snap +++ b/tests/game/__snapshots__/modifiers.test.ts.snap @@ -22,6 +22,7 @@ exports[`Additive Modifiers > applies description correctly > with description 1 "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -44,6 +45,7 @@ exports[`Additive Modifiers > applies description correctly > with description 1 }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -76,6 +78,7 @@ exports[`Additive Modifiers > applies description correctly > with description 1 "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -101,6 +104,7 @@ exports[`Additive Modifiers > applies description correctly > with description 1 }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -147,6 +151,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > with smallerIs "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -169,6 +174,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > with smallerIs }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -201,6 +207,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > with smallerIs "-5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -226,6 +233,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > with smallerIs }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -272,6 +280,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > with smallerIs "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -294,6 +303,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > with smallerIs }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -326,6 +336,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > with smallerIs "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -351,6 +362,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > with smallerIs }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -397,6 +409,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > with smallerIs "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -419,6 +432,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > with smallerIs }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -451,6 +465,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > with smallerIs "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -476,6 +491,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > with smallerIs }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -522,6 +538,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > without smalle "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -544,6 +561,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > without smalle }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -576,6 +594,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > without smalle "-5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -601,6 +620,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > without smalle }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -647,6 +667,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > without smalle "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -669,6 +690,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > without smalle }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -701,6 +723,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > without smalle "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -726,6 +749,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > without smalle }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -772,6 +796,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > without smalle "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -794,6 +819,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > without smalle }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -826,6 +852,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > without smalle "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -851,6 +878,7 @@ exports[`Additive Modifiers > applies smallerIsBetter correctly > without smalle }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -892,6 +920,7 @@ exports[`Create modifier sections > No optional values 1`] = ` null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -919,6 +948,7 @@ exports[`Create modifier sections > No optional values 1`] = ` "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -960,6 +990,7 @@ exports[`Create modifier sections > No optional values 1`] = ` "Base", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -982,6 +1013,7 @@ exports[`Create modifier sections > No optional values 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1014,6 +1046,7 @@ exports[`Create modifier sections > No optional values 1`] = ` undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1038,6 +1071,7 @@ exports[`Create modifier sections > No optional values 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1081,6 +1115,7 @@ exports[`Create modifier sections > No optional values 1`] = ` "Test Desc", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1103,6 +1138,7 @@ exports[`Create modifier sections > No optional values 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1135,6 +1171,7 @@ exports[`Create modifier sections > No optional values 1`] = ` "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1160,6 +1197,7 @@ exports[`Create modifier sections > No optional values 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1189,6 +1227,7 @@ exports[`Create modifier sections > No optional values 1`] = ` "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1228,6 +1267,7 @@ exports[`Create modifier sections > No optional values 1`] = ` "appContext": null, "children": "Total", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1250,6 +1290,7 @@ exports[`Create modifier sections > No optional values 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1282,6 +1323,7 @@ exports[`Create modifier sections > No optional values 1`] = ` undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1307,6 +1349,7 @@ exports[`Create modifier sections > No optional values 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1331,6 +1374,7 @@ exports[`Create modifier sections > No optional values 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1374,6 +1418,7 @@ exports[`Create modifier sections > With base 1`] = ` null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1401,6 +1446,7 @@ exports[`Create modifier sections > With base 1`] = ` "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1442,6 +1488,7 @@ exports[`Create modifier sections > With base 1`] = ` "Base", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1464,6 +1511,7 @@ exports[`Create modifier sections > With base 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1496,6 +1544,7 @@ exports[`Create modifier sections > With base 1`] = ` undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1520,6 +1569,7 @@ exports[`Create modifier sections > With base 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1563,6 +1613,7 @@ exports[`Create modifier sections > With base 1`] = ` "Test Desc", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1585,6 +1636,7 @@ exports[`Create modifier sections > With base 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1617,6 +1669,7 @@ exports[`Create modifier sections > With base 1`] = ` "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1642,6 +1695,7 @@ exports[`Create modifier sections > With base 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1671,6 +1725,7 @@ exports[`Create modifier sections > With base 1`] = ` "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1710,6 +1765,7 @@ exports[`Create modifier sections > With base 1`] = ` "appContext": null, "children": "Total", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1732,6 +1788,7 @@ exports[`Create modifier sections > With base 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1764,6 +1821,7 @@ exports[`Create modifier sections > With base 1`] = ` undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1789,6 +1847,7 @@ exports[`Create modifier sections > With base 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1813,6 +1872,7 @@ exports[`Create modifier sections > With base 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1856,6 +1916,7 @@ exports[`Create modifier sections > With base 2`] = ` null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1883,6 +1944,7 @@ exports[`Create modifier sections > With base 2`] = ` "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1924,6 +1986,7 @@ exports[`Create modifier sections > With base 2`] = ` "Based on", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1946,6 +2009,7 @@ exports[`Create modifier sections > With base 2`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -1978,6 +2042,7 @@ exports[`Create modifier sections > With base 2`] = ` undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2002,6 +2067,7 @@ exports[`Create modifier sections > With base 2`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2045,6 +2111,7 @@ exports[`Create modifier sections > With base 2`] = ` "Test Desc", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2067,6 +2134,7 @@ exports[`Create modifier sections > With base 2`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2099,6 +2167,7 @@ exports[`Create modifier sections > With base 2`] = ` "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2124,6 +2193,7 @@ exports[`Create modifier sections > With base 2`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2153,6 +2223,7 @@ exports[`Create modifier sections > With base 2`] = ` "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2192,6 +2263,7 @@ exports[`Create modifier sections > With base 2`] = ` "appContext": null, "children": "Total", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2214,6 +2286,7 @@ exports[`Create modifier sections > With base 2`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2246,6 +2319,7 @@ exports[`Create modifier sections > With base 2`] = ` undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2271,6 +2345,7 @@ exports[`Create modifier sections > With base 2`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2295,488 +2370,7 @@ exports[`Create modifier sections > With base 2`] = ` }, ], "component": null, - "dirs": null, - "dynamicChildren": null, - "dynamicProps": null, - "el": null, - "key": null, - "patchFlag": 0, - "props": { - "style": { - "--unit": "", - }, - }, - "ref": null, - "scopeId": null, - "shapeFlag": 17, - "slotScopeIds": null, - "ssContent": null, - "ssFallback": null, - "staticCount": 0, - "suspense": null, - "target": null, - "targetAnchor": null, - "transition": null, - "type": "div", -} -`; - -exports[`Create modifier sections > With base 3`] = ` -{ - "__v_isVNode": true, - "__v_skip": true, - "anchor": null, - "appContext": null, - "children": [ - { - "__v_isVNode": true, - "__v_skip": true, - "anchor": null, - "appContext": null, - "children": [ - "Test", - null, - ], - "component": null, - "dirs": null, - "dynamicChildren": null, - "dynamicProps": null, - "el": null, - "key": null, - "patchFlag": 0, - "props": null, - "ref": null, - "scopeId": null, - "shapeFlag": 17, - "slotScopeIds": null, - "ssContent": null, - "ssFallback": null, - "staticCount": 0, - "suspense": null, - "target": null, - "targetAnchor": null, - "transition": null, - "type": "h3", - }, - { - "__v_isVNode": true, - "__v_skip": true, - "anchor": null, - "appContext": null, - "children": null, - "component": null, - "dirs": null, - "dynamicChildren": null, - "dynamicProps": null, - "el": null, - "key": null, - "patchFlag": 0, - "props": null, - "ref": null, - "scopeId": null, - "shapeFlag": 1, - "slotScopeIds": null, - "ssContent": null, - "ssFallback": null, - "staticCount": 0, - "suspense": null, - "target": null, - "targetAnchor": null, - "transition": null, - "type": "br", - }, - { - "__v_isVNode": true, - "__v_skip": true, - "anchor": null, - "appContext": null, - "children": [ - { - "__v_isVNode": true, - "__v_skip": true, - "anchor": null, - "appContext": null, - "children": [ - { - "__v_isVNode": true, - "__v_skip": true, - "anchor": null, - "appContext": null, - "children": [ - "Based on", - ], - "component": null, - "dirs": null, - "dynamicChildren": null, - "dynamicProps": null, - "el": null, - "key": null, - "patchFlag": 0, - "props": null, - "ref": null, - "scopeId": null, - "shapeFlag": 16, - "slotScopeIds": null, - "ssContent": null, - "ssFallback": null, - "staticCount": 0, - "suspense": null, - "target": null, - "targetAnchor": null, - "transition": null, - "type": Symbol(Fragment), - }, - ], - "component": null, - "dirs": null, - "dynamicChildren": null, - "dynamicProps": null, - "el": null, - "key": null, - "patchFlag": 0, - "props": { - "class": "modifier-description", - }, - "ref": null, - "scopeId": null, - "shapeFlag": 17, - "slotScopeIds": null, - "ssContent": null, - "ssFallback": null, - "staticCount": 0, - "suspense": null, - "target": null, - "targetAnchor": null, - "transition": null, - "type": "span", - }, - { - "__v_isVNode": true, - "__v_skip": true, - "anchor": null, - "appContext": null, - "children": [ - "1.00", - undefined, - ], - "component": null, - "dirs": null, - "dynamicChildren": null, - "dynamicProps": null, - "el": null, - "key": null, - "patchFlag": 0, - "props": { - "class": "modifier-amount", - }, - "ref": null, - "scopeId": null, - "shapeFlag": 17, - "slotScopeIds": null, - "ssContent": null, - "ssFallback": null, - "staticCount": 0, - "suspense": null, - "target": null, - "targetAnchor": null, - "transition": null, - "type": "span", - }, - ], - "component": null, - "dirs": null, - "dynamicChildren": null, - "dynamicProps": null, - "el": null, - "key": null, - "patchFlag": 0, - "props": { - "class": "modifier-container", - }, - "ref": null, - "scopeId": null, - "shapeFlag": 17, - "slotScopeIds": null, - "ssContent": null, - "ssFallback": null, - "staticCount": 0, - "suspense": null, - "target": null, - "targetAnchor": null, - "transition": null, - "type": "div", - }, - { - "__v_isVNode": true, - "__v_skip": true, - "anchor": null, - "appContext": null, - "children": [ - { - "__v_isVNode": true, - "__v_skip": true, - "anchor": null, - "appContext": null, - "children": [ - { - "__v_isVNode": true, - "__v_skip": true, - "anchor": null, - "appContext": null, - "children": [ - "Test Desc", - ], - "component": null, - "dirs": null, - "dynamicChildren": null, - "dynamicProps": null, - "el": null, - "key": null, - "patchFlag": 0, - "props": null, - "ref": null, - "scopeId": null, - "shapeFlag": 16, - "slotScopeIds": null, - "ssContent": null, - "ssFallback": null, - "staticCount": 0, - "suspense": null, - "target": null, - "targetAnchor": null, - "transition": null, - "type": Symbol(Fragment), - }, - ], - "component": null, - "dirs": null, - "dynamicChildren": null, - "dynamicProps": null, - "el": null, - "key": null, - "patchFlag": 0, - "props": { - "class": "modifier-description", - }, - "ref": null, - "scopeId": null, - "shapeFlag": 17, - "slotScopeIds": null, - "ssContent": null, - "ssFallback": null, - "staticCount": 0, - "suspense": null, - "target": null, - "targetAnchor": null, - "transition": null, - "type": "span", - }, - { - "__v_isVNode": true, - "__v_skip": true, - "anchor": null, - "appContext": null, - "children": [ - "+", - "5.00", - ], - "component": null, - "dirs": null, - "dynamicChildren": null, - "dynamicProps": null, - "el": null, - "key": null, - "patchFlag": 0, - "props": { - "class": "modifier-amount", - "style": "", - }, - "ref": null, - "scopeId": null, - "shapeFlag": 17, - "slotScopeIds": null, - "ssContent": null, - "ssFallback": null, - "staticCount": 0, - "suspense": null, - "target": null, - "targetAnchor": null, - "transition": null, - "type": "span", - }, - ], - "component": null, - "dirs": null, - "dynamicChildren": null, - "dynamicProps": null, - "el": null, - "key": null, - "patchFlag": 0, - "props": { - "class": "modifier-container", - }, - "ref": null, - "scopeId": null, - "shapeFlag": 17, - "slotScopeIds": null, - "ssContent": null, - "ssFallback": null, - "staticCount": 0, - "suspense": null, - "target": null, - "targetAnchor": null, - "transition": null, - "type": "div", - }, - { - "__v_isVNode": true, - "__v_skip": true, - "anchor": null, - "appContext": null, - "children": null, - "component": null, - "dirs": null, - "dynamicChildren": null, - "dynamicProps": null, - "el": null, - "key": null, - "patchFlag": 0, - "props": null, - "ref": null, - "scopeId": null, - "shapeFlag": 1, - "slotScopeIds": null, - "ssContent": null, - "ssFallback": null, - "staticCount": 0, - "suspense": null, - "target": null, - "targetAnchor": null, - "transition": null, - "type": "hr", - }, - { - "__v_isVNode": true, - "__v_skip": true, - "anchor": null, - "appContext": null, - "children": [ - { - "__v_isVNode": true, - "__v_skip": true, - "anchor": null, - "appContext": null, - "children": [ - { - "__v_isVNode": true, - "__v_skip": true, - "anchor": null, - "appContext": null, - "children": "Total", - "component": null, - "dirs": null, - "dynamicChildren": null, - "dynamicProps": null, - "el": null, - "key": null, - "patchFlag": 0, - "props": null, - "ref": null, - "scopeId": null, - "shapeFlag": 8, - "slotScopeIds": null, - "ssContent": null, - "ssFallback": null, - "staticCount": 0, - "suspense": null, - "target": null, - "targetAnchor": null, - "transition": null, - "type": Symbol(Text), - }, - ], - "component": null, - "dirs": null, - "dynamicChildren": null, - "dynamicProps": null, - "el": null, - "key": null, - "patchFlag": 0, - "props": { - "class": "modifier-description", - }, - "ref": null, - "scopeId": null, - "shapeFlag": 17, - "slotScopeIds": null, - "ssContent": null, - "ssFallback": null, - "staticCount": 0, - "suspense": null, - "target": null, - "targetAnchor": null, - "transition": null, - "type": "span", - }, - { - "__v_isVNode": true, - "__v_skip": true, - "anchor": null, - "appContext": null, - "children": [ - "6.00", - undefined, - ], - "component": null, - "dirs": null, - "dynamicChildren": null, - "dynamicProps": null, - "el": null, - "key": null, - "patchFlag": 0, - "props": { - "class": "modifier-amount", - "style": "", - }, - "ref": null, - "scopeId": null, - "shapeFlag": 17, - "slotScopeIds": null, - "ssContent": null, - "ssFallback": null, - "staticCount": 0, - "suspense": null, - "target": null, - "targetAnchor": null, - "transition": null, - "type": "span", - }, - ], - "component": null, - "dirs": null, - "dynamicChildren": null, - "dynamicProps": null, - "el": null, - "key": null, - "patchFlag": 0, - "props": { - "class": "modifier-container", - }, - "ref": null, - "scopeId": null, - "shapeFlag": 17, - "slotScopeIds": null, - "ssContent": null, - "ssFallback": null, - "staticCount": 0, - "suspense": null, - "target": null, - "targetAnchor": null, - "transition": null, - "type": "div", - }, - ], - "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2820,6 +2414,7 @@ exports[`Create modifier sections > With baseText 1`] = ` null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2847,6 +2442,7 @@ exports[`Create modifier sections > With baseText 1`] = ` "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2888,6 +2484,7 @@ exports[`Create modifier sections > With baseText 1`] = ` "Based on", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2910,6 +2507,7 @@ exports[`Create modifier sections > With baseText 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2942,6 +2540,7 @@ exports[`Create modifier sections > With baseText 1`] = ` undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -2966,6 +2565,7 @@ exports[`Create modifier sections > With baseText 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3009,6 +2609,7 @@ exports[`Create modifier sections > With baseText 1`] = ` "Test Desc", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3031,6 +2632,7 @@ exports[`Create modifier sections > With baseText 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3063,6 +2665,7 @@ exports[`Create modifier sections > With baseText 1`] = ` "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3088,6 +2691,7 @@ exports[`Create modifier sections > With baseText 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3117,6 +2721,7 @@ exports[`Create modifier sections > With baseText 1`] = ` "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3156,6 +2761,7 @@ exports[`Create modifier sections > With baseText 1`] = ` "appContext": null, "children": "Total", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3178,6 +2784,7 @@ exports[`Create modifier sections > With baseText 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3210,6 +2817,7 @@ exports[`Create modifier sections > With baseText 1`] = ` undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3235,6 +2843,7 @@ exports[`Create modifier sections > With baseText 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3259,6 +2868,7 @@ exports[`Create modifier sections > With baseText 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3312,6 +2922,7 @@ exports[`Create modifier sections > With everything 1`] = ` "appContext": null, "children": " (", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3340,6 +2951,7 @@ exports[`Create modifier sections > With everything 1`] = ` "appContext": null, "children": ")", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3362,6 +2974,7 @@ exports[`Create modifier sections > With everything 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3386,6 +2999,7 @@ exports[`Create modifier sections > With everything 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3413,6 +3027,7 @@ exports[`Create modifier sections > With everything 1`] = ` "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3454,6 +3069,7 @@ exports[`Create modifier sections > With everything 1`] = ` "Based on", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3476,6 +3092,7 @@ exports[`Create modifier sections > With everything 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3508,6 +3125,7 @@ exports[`Create modifier sections > With everything 1`] = ` "/s", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3532,6 +3150,7 @@ exports[`Create modifier sections > With everything 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3575,6 +3194,7 @@ exports[`Create modifier sections > With everything 1`] = ` "Test Desc", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3597,6 +3217,7 @@ exports[`Create modifier sections > With everything 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3629,6 +3250,7 @@ exports[`Create modifier sections > With everything 1`] = ` "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3654,6 +3276,7 @@ exports[`Create modifier sections > With everything 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3683,6 +3306,7 @@ exports[`Create modifier sections > With everything 1`] = ` "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3722,6 +3346,7 @@ exports[`Create modifier sections > With everything 1`] = ` "appContext": null, "children": "Total", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3744,6 +3369,7 @@ exports[`Create modifier sections > With everything 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3776,6 +3402,7 @@ exports[`Create modifier sections > With everything 1`] = ` "/s", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3801,6 +3428,7 @@ exports[`Create modifier sections > With everything 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3825,6 +3453,7 @@ exports[`Create modifier sections > With everything 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3868,6 +3497,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3895,6 +3525,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3936,6 +3567,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "Base", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3958,6 +3590,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -3990,6 +3623,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4014,6 +3648,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4057,6 +3692,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "Test Desc", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4079,6 +3715,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4111,6 +3748,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "-5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4136,6 +3774,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4165,6 +3804,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4204,6 +3844,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "appContext": null, "children": "Total", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4226,6 +3867,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4258,6 +3900,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4283,6 +3926,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4307,6 +3951,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4350,6 +3995,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4377,6 +4023,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4418,6 +4065,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "Base", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4440,6 +4088,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4472,6 +4121,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4496,6 +4146,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4539,6 +4190,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "Test Desc", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4561,6 +4213,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4593,6 +4246,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4618,6 +4272,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4647,6 +4302,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4686,6 +4342,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "appContext": null, "children": "Total", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4708,6 +4365,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4740,6 +4398,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4765,6 +4424,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4789,6 +4449,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4832,6 +4493,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4859,6 +4521,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4900,6 +4563,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "Base", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4922,6 +4586,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4954,6 +4619,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -4978,6 +4644,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5021,6 +4688,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "Test Desc", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5043,6 +4711,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5075,6 +4744,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5100,6 +4770,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5129,6 +4800,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5168,6 +4840,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal "appContext": null, "children": "Total", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5190,6 +4863,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5222,6 +4896,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5247,6 +4922,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5271,6 +4947,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = fal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5314,6 +4991,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5341,6 +5019,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5382,6 +5061,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "Base", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5404,6 +5084,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5436,6 +5117,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5460,6 +5142,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5503,6 +5186,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "Test Desc", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5525,6 +5209,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5557,6 +5242,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "-5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5582,6 +5268,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5611,6 +5298,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5650,6 +5338,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "appContext": null, "children": "Total", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5672,6 +5361,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5704,6 +5394,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5729,6 +5420,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5753,6 +5445,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5796,6 +5489,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5823,6 +5517,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5864,6 +5559,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "Base", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5886,6 +5582,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5918,6 +5615,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5942,6 +5640,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -5985,6 +5684,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "Test Desc", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6007,6 +5707,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6039,6 +5740,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6064,6 +5766,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6093,6 +5796,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6132,6 +5836,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "appContext": null, "children": "Total", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6154,6 +5859,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6186,6 +5892,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6211,6 +5918,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6235,6 +5943,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6278,6 +5987,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6305,6 +6015,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6346,6 +6057,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "Base", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6368,6 +6080,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6400,6 +6113,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6424,6 +6138,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6467,6 +6182,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "Test Desc", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6489,6 +6205,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6521,6 +6238,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6546,6 +6264,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6575,6 +6294,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6614,6 +6334,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru "appContext": null, "children": "Total", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6636,6 +6357,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6668,6 +6390,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6693,6 +6416,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6717,6 +6441,7 @@ exports[`Create modifier sections > With smallerIsBetter > smallerIsBetter = tru }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6770,6 +6495,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` "appContext": null, "children": " (", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6798,6 +6524,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` "appContext": null, "children": ")", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6820,6 +6547,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6844,6 +6572,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6871,6 +6600,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6912,6 +6642,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` "Base", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6934,6 +6665,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6966,6 +6698,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -6990,6 +6723,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7033,6 +6767,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` "Test Desc", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7055,6 +6790,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7087,6 +6823,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7112,6 +6849,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7141,6 +6879,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7180,6 +6919,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` "appContext": null, "children": "Total", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7202,6 +6942,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7234,6 +6975,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` undefined, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7259,6 +7001,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7283,6 +7026,7 @@ exports[`Create modifier sections > With subtitle 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7326,6 +7070,7 @@ exports[`Create modifier sections > With unit 1`] = ` null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7353,6 +7098,7 @@ exports[`Create modifier sections > With unit 1`] = ` "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7394,6 +7140,7 @@ exports[`Create modifier sections > With unit 1`] = ` "Base", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7416,6 +7163,7 @@ exports[`Create modifier sections > With unit 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7448,6 +7196,7 @@ exports[`Create modifier sections > With unit 1`] = ` "/s", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7472,6 +7221,7 @@ exports[`Create modifier sections > With unit 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7515,6 +7265,7 @@ exports[`Create modifier sections > With unit 1`] = ` "Test Desc", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7537,6 +7288,7 @@ exports[`Create modifier sections > With unit 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7569,6 +7321,7 @@ exports[`Create modifier sections > With unit 1`] = ` "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7594,6 +7347,7 @@ exports[`Create modifier sections > With unit 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7623,6 +7377,7 @@ exports[`Create modifier sections > With unit 1`] = ` "appContext": null, "children": null, "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7662,6 +7417,7 @@ exports[`Create modifier sections > With unit 1`] = ` "appContext": null, "children": "Total", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7684,6 +7440,7 @@ exports[`Create modifier sections > With unit 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7716,6 +7473,7 @@ exports[`Create modifier sections > With unit 1`] = ` "/s", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7741,6 +7499,7 @@ exports[`Create modifier sections > With unit 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7765,6 +7524,7 @@ exports[`Create modifier sections > With unit 1`] = ` }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7813,6 +7573,7 @@ exports[`Exponential Modifiers > applies description correctly > with descriptio "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7836,6 +7597,7 @@ exports[`Exponential Modifiers > applies description correctly > with descriptio null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7871,6 +7633,7 @@ exports[`Exponential Modifiers > applies description correctly > with descriptio "appContext": null, "children": "^", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7894,6 +7657,7 @@ exports[`Exponential Modifiers > applies description correctly > with descriptio "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7919,6 +7683,7 @@ exports[`Exponential Modifiers > applies description correctly > with descriptio }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7965,6 +7730,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smalle "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -7988,6 +7754,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smalle null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8023,6 +7790,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smalle "appContext": null, "children": "^", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8046,6 +7814,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smalle "-5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8071,6 +7840,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smalle }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8117,6 +7887,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smalle "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8140,6 +7911,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smalle null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8175,6 +7947,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smalle "appContext": null, "children": "^", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8198,6 +7971,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smalle "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8223,6 +7997,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smalle }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8269,6 +8044,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smalle "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8292,6 +8068,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smalle null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8327,6 +8104,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smalle "appContext": null, "children": "^", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8350,6 +8128,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smalle "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8375,6 +8154,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > with smalle }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8421,6 +8201,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > without sma "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8444,6 +8225,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > without sma null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8479,6 +8261,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > without sma "appContext": null, "children": "^", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8502,6 +8285,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > without sma "-5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8527,6 +8311,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > without sma }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8573,6 +8358,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > without sma "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8596,6 +8382,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > without sma null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8631,6 +8418,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > without sma "appContext": null, "children": "^", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8654,6 +8442,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > without sma "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8679,6 +8468,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > without sma }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8725,6 +8515,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > without sma "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8748,6 +8539,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > without sma null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8783,6 +8575,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > without sma "appContext": null, "children": "^", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8806,6 +8599,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > without sma "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8831,6 +8625,7 @@ exports[`Exponential Modifiers > applies smallerIsBetter correctly > without sma }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8877,6 +8672,7 @@ exports[`Multiplicative Modifiers > applies description correctly > with descrip "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8899,6 +8695,7 @@ exports[`Multiplicative Modifiers > applies description correctly > with descrip }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8934,6 +8731,7 @@ exports[`Multiplicative Modifiers > applies description correctly > with descrip "appContext": null, "children": "×", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8957,6 +8755,7 @@ exports[`Multiplicative Modifiers > applies description correctly > with descrip "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -8982,6 +8781,7 @@ exports[`Multiplicative Modifiers > applies description correctly > with descrip }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9028,6 +8828,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with sma "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9050,6 +8851,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with sma }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9085,6 +8887,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with sma "appContext": null, "children": "×", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9108,6 +8911,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with sma "-5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9133,6 +8937,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with sma }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9179,6 +8984,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with sma "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9201,6 +9007,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with sma }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9236,6 +9043,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with sma "appContext": null, "children": "×", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9259,6 +9067,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with sma "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9284,6 +9093,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with sma }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9330,6 +9140,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with sma "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9352,6 +9163,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with sma }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9387,6 +9199,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with sma "appContext": null, "children": "×", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9410,6 +9223,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with sma "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9435,6 +9249,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > with sma }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9481,6 +9296,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9503,6 +9319,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9538,6 +9355,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without "appContext": null, "children": "×", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9561,6 +9379,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without "-5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9586,6 +9405,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9632,6 +9452,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9654,6 +9475,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9689,6 +9511,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without "appContext": null, "children": "×", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9712,6 +9535,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9737,6 +9561,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9783,6 +9608,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9805,6 +9631,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9840,6 +9667,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without "appContext": null, "children": "×", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9863,6 +9691,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9888,6 +9717,7 @@ exports[`Multiplicative Modifiers > applies smallerIsBetter correctly > without }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9941,6 +9771,7 @@ exports[`Sequential Modifiers > applies description correctly > with both 1`] = "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9963,6 +9794,7 @@ exports[`Sequential Modifiers > applies description correctly > with both 1`] = }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -9998,6 +9830,7 @@ exports[`Sequential Modifiers > applies description correctly > with both 1`] = "appContext": null, "children": "×", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10021,6 +9854,7 @@ exports[`Sequential Modifiers > applies description correctly > with both 1`] = "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10046,6 +9880,7 @@ exports[`Sequential Modifiers > applies description correctly > with both 1`] = }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10071,6 +9906,7 @@ exports[`Sequential Modifiers > applies description correctly > with both 1`] = ], ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10122,6 +9958,7 @@ exports[`Sequential Modifiers > applies description correctly > with description "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10144,6 +9981,7 @@ exports[`Sequential Modifiers > applies description correctly > with description }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10176,6 +10014,7 @@ exports[`Sequential Modifiers > applies description correctly > with description "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10201,6 +10040,7 @@ exports[`Sequential Modifiers > applies description correctly > with description }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10244,6 +10084,7 @@ exports[`Sequential Modifiers > applies description correctly > with description "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10266,6 +10107,7 @@ exports[`Sequential Modifiers > applies description correctly > with description }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10301,6 +10143,7 @@ exports[`Sequential Modifiers > applies description correctly > with description "appContext": null, "children": "×", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10324,6 +10167,7 @@ exports[`Sequential Modifiers > applies description correctly > with description "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10349,6 +10193,7 @@ exports[`Sequential Modifiers > applies description correctly > with description }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10392,6 +10237,7 @@ exports[`Sequential Modifiers > applies description correctly > with description "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10415,6 +10261,7 @@ exports[`Sequential Modifiers > applies description correctly > with description null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10450,6 +10297,7 @@ exports[`Sequential Modifiers > applies description correctly > with description "appContext": null, "children": "^", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10473,6 +10321,7 @@ exports[`Sequential Modifiers > applies description correctly > with description "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10498,6 +10347,7 @@ exports[`Sequential Modifiers > applies description correctly > with description }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10523,6 +10373,7 @@ exports[`Sequential Modifiers > applies description correctly > with description ], ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10574,6 +10425,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10596,6 +10448,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10628,6 +10481,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > "-5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10653,6 +10507,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10696,6 +10551,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10718,6 +10574,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10750,6 +10607,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > "-5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10775,6 +10633,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10800,6 +10659,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > ], ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10851,6 +10711,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10873,6 +10734,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10905,6 +10767,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10930,6 +10793,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10973,6 +10837,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -10995,6 +10860,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11027,6 +10893,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11052,6 +10919,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11077,6 +10945,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > ], ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11128,6 +10997,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11150,6 +11020,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11182,6 +11053,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11207,6 +11079,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11250,6 +11123,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11272,6 +11146,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11304,6 +11179,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11329,6 +11205,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11354,6 +11231,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with both > ], ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11405,6 +11283,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11427,6 +11306,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11459,6 +11339,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "-5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11484,6 +11365,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11527,6 +11409,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11549,6 +11432,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11584,6 +11468,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "appContext": null, "children": "×", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11607,6 +11492,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "-5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11632,6 +11518,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11675,6 +11562,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11698,6 +11586,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11733,6 +11622,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "appContext": null, "children": "^", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11756,6 +11646,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "-5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11781,6 +11672,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11806,6 +11698,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller ], ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11857,6 +11750,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11879,6 +11773,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11911,6 +11806,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11936,6 +11832,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -11979,6 +11876,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12001,6 +11899,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12036,6 +11935,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "appContext": null, "children": "×", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12059,6 +11959,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12084,6 +11985,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12127,6 +12029,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12150,6 +12053,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12185,6 +12089,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "appContext": null, "children": "^", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12208,6 +12113,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12233,6 +12139,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12258,6 +12165,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller ], ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12309,6 +12217,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12331,6 +12240,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12363,6 +12273,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12388,6 +12299,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12431,6 +12343,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12453,6 +12366,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12488,6 +12402,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "appContext": null, "children": "×", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12511,6 +12426,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12536,6 +12452,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12579,6 +12496,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12602,6 +12520,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12637,6 +12556,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "appContext": null, "children": "^", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12660,6 +12580,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12685,6 +12606,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12710,6 +12632,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > with smaller ], ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12761,6 +12684,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12783,6 +12707,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12815,6 +12740,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "-5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12840,6 +12766,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12883,6 +12810,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12905,6 +12833,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12940,6 +12869,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "appContext": null, "children": "×", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12963,6 +12893,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "-5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -12988,6 +12919,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13031,6 +12963,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13054,6 +12987,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13089,6 +13023,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "appContext": null, "children": "^", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13112,6 +13047,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "-5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13137,6 +13073,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13162,6 +13099,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal ], ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13213,6 +13151,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13235,6 +13174,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13267,6 +13207,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13292,6 +13233,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13335,6 +13277,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13357,6 +13300,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13392,6 +13336,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "appContext": null, "children": "×", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13415,6 +13360,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13440,6 +13386,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13483,6 +13430,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13506,6 +13454,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13541,6 +13490,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "appContext": null, "children": "^", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13564,6 +13514,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "5.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13589,6 +13540,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13614,6 +13566,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal ], ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13665,6 +13618,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13687,6 +13641,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13719,6 +13674,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13744,6 +13700,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13787,6 +13744,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13809,6 +13767,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13844,6 +13803,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "appContext": null, "children": "×", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13867,6 +13827,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13892,6 +13853,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13935,6 +13897,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "test", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13958,6 +13921,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal null, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -13993,6 +13957,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "appContext": null, "children": "^", "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -14016,6 +13981,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal "0.00", ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -14041,6 +14007,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal }, ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, @@ -14066,6 +14033,7 @@ exports[`Sequential Modifiers > applies smallerIsBetter correctly > without smal ], ], "component": null, + "ctx": null, "dirs": null, "dynamicChildren": null, "dynamicProps": null, From 27d678a30b938e77380a0ebcbac850b0d88be2ef Mon Sep 17 00:00:00 2001 From: Seth Posner <smartseth@hotmail.com> Date: Wed, 19 Apr 2023 17:49:15 -0700 Subject: [PATCH 032/134] Change decorator varargs to Generic variants --- src/features/achievements/achievement.tsx | 4 ++-- src/features/action.tsx | 4 ++-- src/features/bars/bar.ts | 4 ++-- src/features/challenges/challenge.tsx | 4 ++-- src/features/clickables/clickable.ts | 4 ++-- src/features/conversion.ts | 4 ++-- src/features/decorators/bonusDecorator.ts | 7 +++++-- src/features/decorators/common.ts | 6 ++++-- src/features/repeatable.tsx | 6 +++--- src/features/trees/tree.ts | 4 ++-- src/features/upgrades/upgrade.ts | 2 +- 11 files changed, 27 insertions(+), 22 deletions(-) diff --git a/src/features/achievements/achievement.tsx b/src/features/achievements/achievement.tsx index 3af6650..eb7ad60 100644 --- a/src/features/achievements/achievement.tsx +++ b/src/features/achievements/achievement.tsx @@ -2,7 +2,7 @@ import { computed } from "@vue/reactivity"; import { isArray } from "@vue/shared"; import Select from "components/fields/Select.vue"; import AchievementComponent from "features/achievements/Achievement.vue"; -import { Decorator } from "features/decorators/common"; +import { Decorator, GenericDecorator } from "features/decorators/common"; import { CoercableComponent, Component, @@ -139,7 +139,7 @@ export type GenericAchievement = Replace< */ export function createAchievement<T extends AchievementOptions>( optionsFunc?: OptionsFunc<T, BaseAchievement, GenericAchievement>, - ...decorators: Decorator<T, BaseAchievement, GenericAchievement>[] + ...decorators: GenericDecorator[] ): Achievement<T> { const earned = persistent<boolean>(false, false); const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); diff --git a/src/features/action.tsx b/src/features/action.tsx index 3b15756..1dc9498 100644 --- a/src/features/action.tsx +++ b/src/features/action.tsx @@ -31,7 +31,7 @@ import { coerceComponent, isCoercableComponent, render } from "util/vue"; import { computed, Ref, ref, unref } from "vue"; import { BarOptions, createBar, GenericBar } from "./bars/bar"; import { ClickableOptions } from "./clickables/clickable"; -import { Decorator } from "./decorators/common"; +import { Decorator, GenericDecorator } from "./decorators/common"; /** A symbol used to identify {@link Action} features. */ export const ActionType = Symbol("Action"); @@ -104,7 +104,7 @@ export type GenericAction = Replace< */ export function createAction<T extends ActionOptions>( optionsFunc?: OptionsFunc<T, BaseAction, GenericAction>, - ...decorators: Decorator<T, BaseAction, GenericAction>[] + ...decorators: GenericDecorator[] ): Action<T> { const progress = persistent<DecimalSource>(0); const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); diff --git a/src/features/bars/bar.ts b/src/features/bars/bar.ts index 32e45c6..e2be951 100644 --- a/src/features/bars/bar.ts +++ b/src/features/bars/bar.ts @@ -1,5 +1,5 @@ import BarComponent from "features/bars/Bar.vue"; -import { Decorator } from "features/decorators/common"; +import { Decorator, GenericDecorator } from "features/decorators/common"; import type { CoercableComponent, GenericComponent, @@ -103,7 +103,7 @@ export type GenericBar = Replace< */ export function createBar<T extends BarOptions>( optionsFunc: OptionsFunc<T, BaseBar, GenericBar>, - ...decorators: Decorator<T, BaseBar, GenericBar>[] + ...decorators: GenericDecorator[] ): Bar<T> { const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); return createLazyProxy(feature => { diff --git a/src/features/challenges/challenge.tsx b/src/features/challenges/challenge.tsx index 095b15a..ad6ca6a 100644 --- a/src/features/challenges/challenge.tsx +++ b/src/features/challenges/challenge.tsx @@ -1,7 +1,7 @@ import { isArray } from "@vue/shared"; import Toggle from "components/fields/Toggle.vue"; import ChallengeComponent from "features/challenges/Challenge.vue"; -import { Decorator } from "features/decorators/common"; +import { Decorator, GenericDecorator } from "features/decorators/common"; import type { CoercableComponent, GenericComponent, @@ -150,7 +150,7 @@ export type GenericChallenge = Replace< */ export function createChallenge<T extends ChallengeOptions>( optionsFunc: OptionsFunc<T, BaseChallenge, GenericChallenge>, - ...decorators: Decorator<T, BaseChallenge, GenericChallenge>[] + ...decorators: GenericDecorator[] ): Challenge<T> { const completions = persistent(0); const active = persistent(false, false); diff --git a/src/features/clickables/clickable.ts b/src/features/clickables/clickable.ts index 0da6fda..4e3dfcf 100644 --- a/src/features/clickables/clickable.ts +++ b/src/features/clickables/clickable.ts @@ -1,5 +1,5 @@ import ClickableComponent from "features/clickables/Clickable.vue"; -import { Decorator } from "features/decorators/common"; +import { Decorator, GenericDecorator } from "features/decorators/common"; import type { CoercableComponent, GenericComponent, @@ -97,7 +97,7 @@ export type GenericClickable = Replace< */ export function createClickable<T extends ClickableOptions>( optionsFunc?: OptionsFunc<T, BaseClickable, GenericClickable>, - ...decorators: Decorator<T, BaseClickable, GenericClickable>[] + ...decorators: GenericDecorator[] ): Clickable<T> { const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); return createLazyProxy(feature => { diff --git a/src/features/conversion.ts b/src/features/conversion.ts index 41b7f32..c9c22c2 100644 --- a/src/features/conversion.ts +++ b/src/features/conversion.ts @@ -15,7 +15,7 @@ import { convertComputable, processComputable } from "util/computed"; import { createLazyProxy } from "util/proxies"; import type { Ref } from "vue"; import { computed, unref } from "vue"; -import { Decorator } from "./decorators/common"; +import { GenericDecorator } from "./decorators/common"; /** An object that configures a {@link Conversion}. */ export interface ConversionOptions { @@ -125,7 +125,7 @@ export type GenericConversion = Replace< */ export function createConversion<T extends ConversionOptions>( optionsFunc: OptionsFunc<T, BaseConversion, GenericConversion>, - ...decorators: Decorator<T, BaseConversion, GenericConversion>[] + ...decorators: GenericDecorator[] ): Conversion<T> { return createLazyProxy(feature => { const conversion = optionsFunc.call(feature, feature); diff --git a/src/features/decorators/bonusDecorator.ts b/src/features/decorators/bonusDecorator.ts index d019010..1c26b14 100644 --- a/src/features/decorators/bonusDecorator.ts +++ b/src/features/decorators/bonusDecorator.ts @@ -15,11 +15,13 @@ export interface BonusCompletionsFeatureOptions { export interface BaseBonusAmountFeature { amount: Ref<DecimalSource>; - totalAmount: Ref<DecimalSource>; + bonusAmount: ProcessedComputable<DecimalSource>; + totalAmount?: Ref<DecimalSource>; } export interface BaseBonusCompletionsFeature { completions: Ref<DecimalSource>; - totalCompletions: Ref<DecimalSource>; + bonusCompletions: ProcessedComputable<DecimalSource>; + totalCompletions?: Ref<DecimalSource>; } export type BonusAmountFeature<T extends BonusAmountFeatureOptions> = Replace< @@ -47,6 +49,7 @@ export type GenericBonusCompletionsFeature = Replace< /** * Allows the addition of "bonus levels" to the decorated feature, with an accompanying "total amount". * To function properly, the `createFeature()` function must have its generic type extended by {@linkcode BonusAmountFeatureOptions}. + * Additionally, the base feature must have an `amount` property. * To allow access to the decorated values outside the `createFeature()` function, the output type must be extended by {@linkcode GenericBonusAmountFeature}. * @example ```ts * createRepeatable<RepeatableOptions & BonusAmountFeatureOptions>(() => ({ diff --git a/src/features/decorators/common.ts b/src/features/decorators/common.ts index 362d787..a4656d3 100644 --- a/src/features/decorators/common.ts +++ b/src/features/decorators/common.ts @@ -2,13 +2,15 @@ import { Replace, OptionsObject } from "../feature"; import { Computable, GetComputableType, processComputable, ProcessedComputable } from "util/computed"; import { Persistent, State } from "game/persistence"; -export type Decorator<FeatureOptions, BaseFeature = {}, GenericFeature = BaseFeature, S extends State = State> = { +export type Decorator<FeatureOptions, BaseFeature = Object, GenericFeature = BaseFeature, S extends State = State> = { getPersistentData?(): Record<string, Persistent<S>>; preConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): void; postConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): void; getGatheredProps?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): Partial<OptionsObject<FeatureOptions,BaseFeature,GenericFeature>> } +export type GenericDecorator = Decorator<unknown>; + export interface EffectFeatureOptions { effect: Computable<any>; } @@ -33,7 +35,7 @@ export type GenericEffectFeature = Replace< * }), effectDecorator) as GenericUpgrade & GenericEffectFeature; * ``` */ -export const effectDecorator: Decorator<EffectFeatureOptions, {}, GenericEffectFeature> = { +export const effectDecorator: Decorator<EffectFeatureOptions, unknown, GenericEffectFeature> = { postConstruct(feature) { processComputable(feature, "effect"); } diff --git a/src/features/repeatable.tsx b/src/features/repeatable.tsx index 1a4774c..bc486e4 100644 --- a/src/features/repeatable.tsx +++ b/src/features/repeatable.tsx @@ -30,7 +30,7 @@ import { createLazyProxy } from "util/proxies"; import { coerceComponent, isCoercableComponent } from "util/vue"; import type { Ref } from "vue"; import { computed, unref } from "vue"; -import { Decorator } from "./decorators/common"; +import { Decorator, GenericDecorator } from "./decorators/common"; /** A symbol used to identify {@link Repeatable} features. */ export const RepeatableType = Symbol("Repeatable"); @@ -131,11 +131,11 @@ export type GenericRepeatable = Replace< */ export function createRepeatable<T extends RepeatableOptions>( optionsFunc: OptionsFunc<T, BaseRepeatable, GenericRepeatable>, - ...decorators: Decorator<T, BaseRepeatable, GenericRepeatable>[] + ...decorators: GenericDecorator[] ): Repeatable<T> { const amount = persistent<DecimalSource>(0); const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); - return createLazyProxy(feature => { + return createLazyProxy<Repeatable<T>, Repeatable<T>>(feature => { const repeatable = optionsFunc.call(feature, feature); repeatable.id = getUniqueID("repeatable-"); diff --git a/src/features/trees/tree.ts b/src/features/trees/tree.ts index 22aa627..b773ff9 100644 --- a/src/features/trees/tree.ts +++ b/src/features/trees/tree.ts @@ -1,4 +1,4 @@ -import { Decorator } from "features/decorators/common"; +import { Decorator, GenericDecorator } from "features/decorators/common"; import type { CoercableComponent, GenericComponent, @@ -103,7 +103,7 @@ export type GenericTreeNode = Replace< */ export function createTreeNode<T extends TreeNodeOptions>( optionsFunc?: OptionsFunc<T, BaseTreeNode, GenericTreeNode>, - ...decorators: Decorator<T, BaseTreeNode, GenericTreeNode>[] + ...decorators: GenericDecorator[] ): TreeNode<T> { const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); return createLazyProxy(feature => { diff --git a/src/features/upgrades/upgrade.ts b/src/features/upgrades/upgrade.ts index 08fd2e6..d64131a 100644 --- a/src/features/upgrades/upgrade.ts +++ b/src/features/upgrades/upgrade.ts @@ -119,7 +119,7 @@ export type GenericUpgrade = Replace< */ export function createUpgrade<T extends UpgradeOptions>( optionsFunc: OptionsFunc<T, BaseUpgrade, GenericUpgrade>, - ...decorators: Decorator<T, BaseUpgrade, GenericUpgrade>[] + ...decorators: GenericDecorator[] ): Upgrade<T> { const bought = persistent<boolean>(false, false); const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); From 6043d0c414a3816675edbdd8438fbcdec46c24e3 Mon Sep 17 00:00:00 2001 From: Seth Posner <smartseth@hotmail.com> Date: Wed, 19 Apr 2023 17:55:02 -0700 Subject: [PATCH 033/134] Add missing import --- src/features/upgrades/upgrade.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/upgrades/upgrade.ts b/src/features/upgrades/upgrade.ts index d64131a..b8aa90f 100644 --- a/src/features/upgrades/upgrade.ts +++ b/src/features/upgrades/upgrade.ts @@ -1,5 +1,5 @@ import { isArray } from "@vue/shared"; -import { Decorator } from "features/decorators/common"; +import { Decorator, GenericDecorator } from "features/decorators/common"; import type { CoercableComponent, GenericComponent, From 24fcd3468e3b613e904ba2f06ee0ad3e73774fce Mon Sep 17 00:00:00 2001 From: Seth Posner <smartseth@hotmail.com> Date: Wed, 19 Apr 2023 18:21:00 -0700 Subject: [PATCH 034/134] Print an error if decorator is missing required property --- src/features/decorators/bonusDecorator.ts | 5 +++++ src/features/decorators/common.ts | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/features/decorators/bonusDecorator.ts b/src/features/decorators/bonusDecorator.ts index 1c26b14..b1c38cf 100644 --- a/src/features/decorators/bonusDecorator.ts +++ b/src/features/decorators/bonusDecorator.ts @@ -58,6 +58,11 @@ export type GenericBonusCompletionsFeature = Replace< * }), bonusAmountDecorator) as GenericRepeatable & GenericBonusAmountFeature */ export const bonusAmountDecorator: Decorator<BonusAmountFeatureOptions, BaseBonusAmountFeature, GenericBonusAmountFeature> = { + preConstruct(feature) { + if (feature.amount === undefined) { + console.error(`Decorated feature ${feature.id} does not contain the required 'amount' property"`); + } + }, postConstruct(feature) { processComputable(feature, "bonusAmount"); if (feature.totalAmount === undefined) { diff --git a/src/features/decorators/common.ts b/src/features/decorators/common.ts index a4656d3..fb084db 100644 --- a/src/features/decorators/common.ts +++ b/src/features/decorators/common.ts @@ -2,11 +2,11 @@ import { Replace, OptionsObject } from "../feature"; import { Computable, GetComputableType, processComputable, ProcessedComputable } from "util/computed"; import { Persistent, State } from "game/persistence"; -export type Decorator<FeatureOptions, BaseFeature = Object, GenericFeature = BaseFeature, S extends State = State> = { +export type Decorator<FeatureOptions, BaseFeature = object, GenericFeature = BaseFeature, S extends State = State> = { getPersistentData?(): Record<string, Persistent<S>>; - preConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): void; - postConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): void; - getGatheredProps?(feature: OptionsObject<FeatureOptions,BaseFeature,GenericFeature>): Partial<OptionsObject<FeatureOptions,BaseFeature,GenericFeature>> + preConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature & {id:string},GenericFeature>): void; + postConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature & {id:string},GenericFeature>): void; + getGatheredProps?(feature: OptionsObject<FeatureOptions,BaseFeature & {id:string},GenericFeature>): Partial<OptionsObject<FeatureOptions,BaseFeature & {id:string},GenericFeature>> } export type GenericDecorator = Decorator<unknown>; From 98f18fef43df6d77231b0eba0a1c65e9dec01731 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 19 Apr 2023 20:39:25 -0500 Subject: [PATCH 035/134] Ran prettier --- src/features/achievements/achievement.tsx | 10 +++- src/features/action.tsx | 9 +++- src/features/bars/bar.ts | 10 +++- src/features/challenges/challenge.tsx | 10 +++- src/features/clickables/clickable.ts | 10 +++- src/features/decorators/bonusDecorator.ts | 63 +++++++++++++++-------- src/features/decorators/common.ts | 40 +++++++++----- src/features/feature.ts | 2 +- src/features/repeatable.tsx | 18 ++++--- src/features/trees/tree.ts | 10 +++- src/features/upgrades/upgrade.ts | 12 +++-- 11 files changed, 139 insertions(+), 55 deletions(-) diff --git a/src/features/achievements/achievement.tsx b/src/features/achievements/achievement.tsx index eb7ad60..f55d6ea 100644 --- a/src/features/achievements/achievement.tsx +++ b/src/features/achievements/achievement.tsx @@ -142,7 +142,10 @@ export function createAchievement<T extends AchievementOptions>( ...decorators: GenericDecorator[] ): Achievement<T> { const earned = persistent<boolean>(false, false); - const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); + const decoratedData = decorators.reduce( + (current, next) => Object.assign(current, next.getPersistentData?.()), + {} + ); return createLazyProxy(feature => { const achievement = optionsFunc?.call(feature, feature) ?? @@ -232,7 +235,10 @@ export function createAchievement<T extends AchievementOptions>( decorator.postConstruct?.(achievement); } - const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(achievement)), {}); + const decoratedProps = decorators.reduce( + (current, next) => Object.assign(current, next.getGatheredProps?.(achievement)), + {} + ); achievement[GatherProps] = function (this: GenericAchievement) { const { visibility, diff --git a/src/features/action.tsx b/src/features/action.tsx index 1dc9498..a58a762 100644 --- a/src/features/action.tsx +++ b/src/features/action.tsx @@ -107,7 +107,10 @@ export function createAction<T extends ActionOptions>( ...decorators: GenericDecorator[] ): Action<T> { const progress = persistent<DecimalSource>(0); - const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); + const decoratedData = decorators.reduce( + (current, next) => Object.assign(current, next.getPersistentData?.()), + {} + ); return createLazyProxy(feature => { const action = optionsFunc?.call(feature, feature) ?? @@ -241,7 +244,9 @@ export function createAction<T extends ActionOptions>( decorator.postConstruct?.(action); } - const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(action))); + const decoratedProps = decorators.reduce((current, next) => + Object.assign(current, next.getGatheredProps?.(action)) + ); action[GatherProps] = function (this: GenericAction) { const { display, diff --git a/src/features/bars/bar.ts b/src/features/bars/bar.ts index e2be951..100a3c3 100644 --- a/src/features/bars/bar.ts +++ b/src/features/bars/bar.ts @@ -105,7 +105,10 @@ export function createBar<T extends BarOptions>( optionsFunc: OptionsFunc<T, BaseBar, GenericBar>, ...decorators: GenericDecorator[] ): Bar<T> { - const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); + const decoratedData = decorators.reduce( + (current, next) => Object.assign(current, next.getPersistentData?.()), + {} + ); return createLazyProxy(feature => { const bar = optionsFunc.call(feature, feature); bar.id = getUniqueID("bar-"); @@ -137,7 +140,10 @@ export function createBar<T extends BarOptions>( decorator.postConstruct?.(bar); } - const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(bar)), {}); + const decoratedProps = decorators.reduce( + (current, next) => Object.assign(current, next.getGatheredProps?.(bar)), + {} + ); bar[GatherProps] = function (this: GenericBar) { const { progress, diff --git a/src/features/challenges/challenge.tsx b/src/features/challenges/challenge.tsx index ad6ca6a..16ed080 100644 --- a/src/features/challenges/challenge.tsx +++ b/src/features/challenges/challenge.tsx @@ -154,7 +154,10 @@ export function createChallenge<T extends ChallengeOptions>( ): Challenge<T> { const completions = persistent(0); const active = persistent(false, false); - const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); + const decoratedData = decorators.reduce( + (current, next) => Object.assign(current, next.getPersistentData?.()), + {} + ); return createLazyProxy(feature => { const challenge = optionsFunc.call(feature, feature); @@ -271,7 +274,10 @@ export function createChallenge<T extends ChallengeOptions>( decorator.postConstruct?.(challenge); } - const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(challenge)), {}); + const decoratedProps = decorators.reduce( + (current, next) => Object.assign(current, next.getGatheredProps?.(challenge)), + {} + ); challenge[GatherProps] = function (this: GenericChallenge) { const { active, diff --git a/src/features/clickables/clickable.ts b/src/features/clickables/clickable.ts index 4e3dfcf..170e7b7 100644 --- a/src/features/clickables/clickable.ts +++ b/src/features/clickables/clickable.ts @@ -99,7 +99,10 @@ export function createClickable<T extends ClickableOptions>( optionsFunc?: OptionsFunc<T, BaseClickable, GenericClickable>, ...decorators: GenericDecorator[] ): Clickable<T> { - const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); + const decoratedData = decorators.reduce( + (current, next) => Object.assign(current, next.getPersistentData?.()), + {} + ); return createLazyProxy(feature => { const clickable = optionsFunc?.call(feature, feature) ?? @@ -144,7 +147,10 @@ export function createClickable<T extends ClickableOptions>( decorator.postConstruct?.(clickable); } - const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(clickable)), {}); + const decoratedProps = decorators.reduce( + (current, next) => Object.assign(current, next.getGatheredProps?.(clickable)), + {} + ); clickable[GatherProps] = function (this: GenericClickable) { const { display, diff --git a/src/features/decorators/bonusDecorator.ts b/src/features/decorators/bonusDecorator.ts index b1c38cf..ac02c07 100644 --- a/src/features/decorators/bonusDecorator.ts +++ b/src/features/decorators/bonusDecorator.ts @@ -1,6 +1,11 @@ import { Replace } from "features/feature"; import Decimal, { DecimalSource } from "util/bignum"; -import { Computable, GetComputableType, ProcessedComputable, processComputable } from "util/computed"; +import { + Computable, + GetComputableType, + ProcessedComputable, + processComputable +} from "util/computed"; import { Ref, computed, unref } from "vue"; import { Decorator } from "./common"; @@ -25,10 +30,12 @@ export interface BaseBonusCompletionsFeature { } export type BonusAmountFeature<T extends BonusAmountFeatureOptions> = Replace< - T, { bonusAmount: GetComputableType<T["bonusAmount"]>; } + T, + { bonusAmount: GetComputableType<T["bonusAmount"]> } >; export type BonusCompletionsFeature<T extends BonusCompletionsFeatureOptions> = Replace< - T, { bonusAmount: GetComputableType<T["bonusCompletions"]>; } + T, + { bonusAmount: GetComputableType<T["bonusCompletions"]> } >; export type GenericBonusAmountFeature = Replace< @@ -47,9 +54,9 @@ export type GenericBonusCompletionsFeature = Replace< >; /** - * Allows the addition of "bonus levels" to the decorated feature, with an accompanying "total amount". - * To function properly, the `createFeature()` function must have its generic type extended by {@linkcode BonusAmountFeatureOptions}. - * Additionally, the base feature must have an `amount` property. + * Allows the addition of "bonus levels" to the decorated feature, with an accompanying "total amount". + * To function properly, the `createFeature()` function must have its generic type extended by {@linkcode BonusAmountFeatureOptions}. + * Additionally, the base feature must have an `amount` property. * To allow access to the decorated values outside the `createFeature()` function, the output type must be extended by {@linkcode GenericBonusAmountFeature}. * @example ```ts * createRepeatable<RepeatableOptions & BonusAmountFeatureOptions>(() => ({ @@ -57,26 +64,34 @@ export type GenericBonusCompletionsFeature = Replace< * ... * }), bonusAmountDecorator) as GenericRepeatable & GenericBonusAmountFeature */ -export const bonusAmountDecorator: Decorator<BonusAmountFeatureOptions, BaseBonusAmountFeature, GenericBonusAmountFeature> = { +export const bonusAmountDecorator: Decorator< + BonusAmountFeatureOptions, + BaseBonusAmountFeature, + GenericBonusAmountFeature +> = { preConstruct(feature) { if (feature.amount === undefined) { - console.error(`Decorated feature ${feature.id} does not contain the required 'amount' property"`); + console.error( + `Decorated feature ${feature.id} does not contain the required 'amount' property"` + ); } }, postConstruct(feature) { processComputable(feature, "bonusAmount"); if (feature.totalAmount === undefined) { - feature.totalAmount = computed(() => Decimal.add( - unref(feature.amount ?? 0), - unref(feature.bonusAmount as ProcessedComputable<DecimalSource>) - )); + feature.totalAmount = computed(() => + Decimal.add( + unref(feature.amount ?? 0), + unref(feature.bonusAmount as ProcessedComputable<DecimalSource>) + ) + ); } } -} +}; /** - * Allows the addition of "bonus levels" to the decorated feature, with an accompanying "total amount". - * To function properly, the `createFeature()` function must have its generic type extended by {@linkcode BonusCompletionFeatureOptions}. + * Allows the addition of "bonus levels" to the decorated feature, with an accompanying "total amount". + * To function properly, the `createFeature()` function must have its generic type extended by {@linkcode BonusCompletionFeatureOptions}. * To allow access to the decorated values outside the `createFeature()` function, the output type must be extended by {@linkcode GenericBonusCompletionFeature}. * @example ```ts * createChallenge<ChallengeOptions & BonusCompletionFeatureOptions>(() => ({ @@ -84,14 +99,20 @@ export const bonusAmountDecorator: Decorator<BonusAmountFeatureOptions, BaseBonu * ... * }), bonusCompletionDecorator) as GenericChallenge & GenericBonusCompletionFeature */ -export const bonusCompletionsDecorator: Decorator<BonusCompletionsFeatureOptions, BaseBonusCompletionsFeature, GenericBonusCompletionsFeature> = { +export const bonusCompletionsDecorator: Decorator< + BonusCompletionsFeatureOptions, + BaseBonusCompletionsFeature, + GenericBonusCompletionsFeature +> = { postConstruct(feature) { processComputable(feature, "bonusCompletions"); if (feature.totalCompletions === undefined) { - feature.totalCompletions = computed(() => Decimal.add( - unref(feature.completions ?? 0), - unref(feature.bonusCompletions as ProcessedComputable<DecimalSource>) - )); + feature.totalCompletions = computed(() => + Decimal.add( + unref(feature.completions ?? 0), + unref(feature.bonusCompletions as ProcessedComputable<DecimalSource>) + ) + ); } } -} +}; diff --git a/src/features/decorators/common.ts b/src/features/decorators/common.ts index fb084db..899f29e 100644 --- a/src/features/decorators/common.ts +++ b/src/features/decorators/common.ts @@ -1,13 +1,29 @@ import { Replace, OptionsObject } from "../feature"; -import { Computable, GetComputableType, processComputable, ProcessedComputable } from "util/computed"; +import { + Computable, + GetComputableType, + processComputable, + ProcessedComputable +} from "util/computed"; import { Persistent, State } from "game/persistence"; -export type Decorator<FeatureOptions, BaseFeature = object, GenericFeature = BaseFeature, S extends State = State> = { +export type Decorator< + FeatureOptions, + BaseFeature = object, + GenericFeature = BaseFeature, + S extends State = State +> = { getPersistentData?(): Record<string, Persistent<S>>; - preConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature & {id:string},GenericFeature>): void; - postConstruct?(feature: OptionsObject<FeatureOptions,BaseFeature & {id:string},GenericFeature>): void; - getGatheredProps?(feature: OptionsObject<FeatureOptions,BaseFeature & {id:string},GenericFeature>): Partial<OptionsObject<FeatureOptions,BaseFeature & {id:string},GenericFeature>> -} + preConstruct?( + feature: OptionsObject<FeatureOptions, BaseFeature & { id: string }, GenericFeature> + ): void; + postConstruct?( + feature: OptionsObject<FeatureOptions, BaseFeature & { id: string }, GenericFeature> + ): void; + getGatheredProps?( + feature: OptionsObject<FeatureOptions, BaseFeature & { id: string }, GenericFeature> + ): Partial<OptionsObject<FeatureOptions, BaseFeature & { id: string }, GenericFeature>>; +}; export type GenericDecorator = Decorator<unknown>; @@ -16,17 +32,18 @@ export interface EffectFeatureOptions { } export type EffectFeature<T extends EffectFeatureOptions> = Replace< - T, { effect: GetComputableType<T["effect"]>; } + T, + { effect: GetComputableType<T["effect"]> } >; export type GenericEffectFeature = Replace< EffectFeature<EffectFeatureOptions>, - { effect: ProcessedComputable<any>; } + { effect: ProcessedComputable<any> } >; /** - * Allows the usage of an `effect` field in the decorated feature. - * To function properly, the `createFeature()` function must have its generic type extended by {@linkcode EffectFeatureOptions}. + * Allows the usage of an `effect` field in the decorated feature. + * To function properly, the `createFeature()` function must have its generic type extended by {@linkcode EffectFeatureOptions}. * To allow access to the decorated values outside the `createFeature()` function, the output type must be extended by {@linkcode GenericEffectFeature}. * @example ```ts * createRepeatable<RepeatableOptions & EffectFeatureOptions>(() => ({ @@ -39,5 +56,4 @@ export const effectDecorator: Decorator<EffectFeatureOptions, unknown, GenericEf postConstruct(feature) { processComputable(feature, "effect"); } -} - +}; diff --git a/src/features/feature.ts b/src/features/feature.ts index 2bd1fad..429629a 100644 --- a/src/features/feature.ts +++ b/src/features/feature.ts @@ -42,7 +42,7 @@ export type Replace<T, S> = S & Omit<T, keyof S>; * with "this" bound to what the type will eventually be processed into. * Intended for making lazily evaluated objects. */ -export type OptionsFunc<T, R = unknown, S = R> = (obj: R) => OptionsObject<T,R,S>; +export type OptionsFunc<T, R = unknown, S = R> = (obj: R) => OptionsObject<T, R, S>; export type OptionsObject<T, R = unknown, S = R> = T & Partial<R> & ThisType<T & S>; diff --git a/src/features/repeatable.tsx b/src/features/repeatable.tsx index bc486e4..b15fe0f 100644 --- a/src/features/repeatable.tsx +++ b/src/features/repeatable.tsx @@ -134,7 +134,10 @@ export function createRepeatable<T extends RepeatableOptions>( ...decorators: GenericDecorator[] ): Repeatable<T> { const amount = persistent<DecimalSource>(0); - const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); + const decoratedData = decorators.reduce( + (current, next) => Object.assign(current, next.getPersistentData?.()), + {} + ); return createLazyProxy<Repeatable<T>, Repeatable<T>>(feature => { const repeatable = optionsFunc.call(feature, feature); @@ -233,10 +236,10 @@ export function createRepeatable<T extends RepeatableOptions>( <div> <br /> joinJSX( - <>Amount: {formatWhole(genericRepeatable.amount.value)}</>, - {unref(genericRepeatable.limit) !== Decimal.dInf ? ( - <> / {formatWhole(unref(genericRepeatable.limit))}</> - ) : undefined} + <>Amount: {formatWhole(genericRepeatable.amount.value)}</>, + {unref(genericRepeatable.limit) !== Decimal.dInf ? ( + <> / {formatWhole(unref(genericRepeatable.limit))}</> + ) : undefined} ) </div> )} @@ -274,7 +277,10 @@ export function createRepeatable<T extends RepeatableOptions>( decorator.postConstruct?.(repeatable); } - const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(repeatable)), {}); + const decoratedProps = decorators.reduce( + (current, next) => Object.assign(current, next.getGatheredProps?.(repeatable)), + {} + ); repeatable[GatherProps] = function (this: GenericRepeatable) { const { display, visibility, style, classes, onClick, canClick, small, mark, id } = this; diff --git a/src/features/trees/tree.ts b/src/features/trees/tree.ts index b773ff9..da77f60 100644 --- a/src/features/trees/tree.ts +++ b/src/features/trees/tree.ts @@ -105,7 +105,10 @@ export function createTreeNode<T extends TreeNodeOptions>( optionsFunc?: OptionsFunc<T, BaseTreeNode, GenericTreeNode>, ...decorators: GenericDecorator[] ): TreeNode<T> { - const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); + const decoratedData = decorators.reduce( + (current, next) => Object.assign(current, next.getPersistentData?.()), + {} + ); return createLazyProxy(feature => { const treeNode = optionsFunc?.call(feature, feature) ?? @@ -152,7 +155,10 @@ export function createTreeNode<T extends TreeNodeOptions>( }; } - const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(treeNode)), {}); + const decoratedProps = decorators.reduce( + (current, next) => Object.assign(current, next.getGatheredProps?.(treeNode)), + {} + ); treeNode[GatherProps] = function (this: GenericTreeNode) { const { display, diff --git a/src/features/upgrades/upgrade.ts b/src/features/upgrades/upgrade.ts index b8aa90f..094c641 100644 --- a/src/features/upgrades/upgrade.ts +++ b/src/features/upgrades/upgrade.ts @@ -21,7 +21,7 @@ import type { GenericLayer } from "game/layers"; import type { Persistent } from "game/persistence"; import { persistent } from "game/persistence"; import { -createCostRequirement, + createCostRequirement, createVisibilityRequirement, payRequirements, Requirements, @@ -122,7 +122,10 @@ export function createUpgrade<T extends UpgradeOptions>( ...decorators: GenericDecorator[] ): Upgrade<T> { const bought = persistent<boolean>(false, false); - const decoratedData = decorators.reduce((current, next) => Object.assign(current, next.getPersistentData?.()), {}); + const decoratedData = decorators.reduce( + (current, next) => Object.assign(current, next.getPersistentData?.()), + {} + ); return createLazyProxy(feature => { const upgrade = optionsFunc.call(feature, feature); upgrade.id = getUniqueID("upgrade-"); @@ -165,7 +168,10 @@ export function createUpgrade<T extends UpgradeOptions>( decorator.preConstruct?.(upgrade); } - const decoratedProps = decorators.reduce((current, next) => Object.assign(current, next.getGatheredProps?.(upgrade)), {}); + const decoratedProps = decorators.reduce( + (current, next) => Object.assign(current, next.getGatheredProps?.(upgrade)), + {} + ); upgrade[GatherProps] = function (this: GenericUpgrade) { const { display, From 8806910f5e9d4ca102116cab444a6a09f39acc7b Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 19 Apr 2023 21:37:28 -0500 Subject: [PATCH 036/134] Resolving problems --- src/features/achievements/achievement.tsx | 12 ++++++------ src/features/bars/bar.ts | 4 ++-- src/features/challenges/challenge.tsx | 8 ++++---- src/features/clickables/clickable.ts | 4 ++-- src/features/decorators/common.ts | 4 ++-- src/features/particles/Particles.vue | 2 +- src/features/repeatable.tsx | 6 +++--- src/features/upgrades/upgrade.ts | 12 +++++------- src/game/requirements.tsx | 2 ++ tests/features/conversions.test.ts | 8 ++++---- tests/game/formulas.test.ts | 9 ++++----- 11 files changed, 35 insertions(+), 36 deletions(-) diff --git a/src/features/achievements/achievement.tsx b/src/features/achievements/achievement.tsx index f55d6ea..007dd0c 100644 --- a/src/features/achievements/achievement.tsx +++ b/src/features/achievements/achievement.tsx @@ -2,19 +2,19 @@ import { computed } from "@vue/reactivity"; import { isArray } from "@vue/shared"; import Select from "components/fields/Select.vue"; import AchievementComponent from "features/achievements/Achievement.vue"; -import { Decorator, GenericDecorator } from "features/decorators/common"; +import { GenericDecorator } from "features/decorators/common"; import { CoercableComponent, Component, GatherProps, GenericComponent, - getUniqueID, - jsx, OptionsFunc, Replace, - setDefault, StyleValue, - Visibility + Visibility, + getUniqueID, + jsx, + setDefault } from "features/feature"; import { globalBus } from "game/events"; import "game/notifications"; @@ -22,10 +22,10 @@ import type { Persistent } from "game/persistence"; import { persistent } from "game/persistence"; import player from "game/player"; import { + Requirements, createBooleanRequirement, createVisibilityRequirement, displayRequirements, - Requirements, requirementsMet } from "game/requirements"; import settings, { registerSettingField } from "game/settings"; diff --git a/src/features/bars/bar.ts b/src/features/bars/bar.ts index 100a3c3..8179001 100644 --- a/src/features/bars/bar.ts +++ b/src/features/bars/bar.ts @@ -1,5 +1,5 @@ import BarComponent from "features/bars/Bar.vue"; -import { Decorator, GenericDecorator } from "features/decorators/common"; +import { GenericDecorator } from "features/decorators/common"; import type { CoercableComponent, GenericComponent, @@ -7,7 +7,7 @@ import type { Replace, StyleValue } from "features/feature"; -import { Component, GatherProps, getUniqueID, setDefault, Visibility } from "features/feature"; +import { Component, GatherProps, Visibility, getUniqueID, setDefault } from "features/feature"; import type { DecimalSource } from "util/bignum"; import { Direction } from "util/common"; import type { diff --git a/src/features/challenges/challenge.tsx b/src/features/challenges/challenge.tsx index 16ed080..d9fc04d 100644 --- a/src/features/challenges/challenge.tsx +++ b/src/features/challenges/challenge.tsx @@ -1,7 +1,7 @@ import { isArray } from "@vue/shared"; import Toggle from "components/fields/Toggle.vue"; import ChallengeComponent from "features/challenges/Challenge.vue"; -import { Decorator, GenericDecorator } from "features/decorators/common"; +import { GenericDecorator } from "features/decorators/common"; import type { CoercableComponent, GenericComponent, @@ -12,17 +12,17 @@ import type { import { Component, GatherProps, + Visibility, getUniqueID, isVisible, jsx, - setDefault, - Visibility + setDefault } from "features/feature"; import type { GenericReset } from "features/reset"; import { globalBus } from "game/events"; import type { Persistent } from "game/persistence"; import { persistent } from "game/persistence"; -import { maxRequirementsMet, Requirements } from "game/requirements"; +import { Requirements, maxRequirementsMet } from "game/requirements"; import settings, { registerSettingField } from "game/settings"; import type { DecimalSource } from "util/bignum"; import Decimal from "util/bignum"; diff --git a/src/features/clickables/clickable.ts b/src/features/clickables/clickable.ts index 170e7b7..cfd578e 100644 --- a/src/features/clickables/clickable.ts +++ b/src/features/clickables/clickable.ts @@ -1,5 +1,5 @@ import ClickableComponent from "features/clickables/Clickable.vue"; -import { Decorator, GenericDecorator } from "features/decorators/common"; +import { GenericDecorator } from "features/decorators/common"; import type { CoercableComponent, GenericComponent, @@ -7,7 +7,7 @@ import type { Replace, StyleValue } from "features/feature"; -import { Component, GatherProps, getUniqueID, setDefault, Visibility } from "features/feature"; +import { Component, GatherProps, Visibility, getUniqueID, setDefault } from "features/feature"; import type { BaseLayer } from "game/layers"; import type { Unsubscribe } from "nanoevents"; import type { diff --git a/src/features/decorators/common.ts b/src/features/decorators/common.ts index 899f29e..8d76b37 100644 --- a/src/features/decorators/common.ts +++ b/src/features/decorators/common.ts @@ -28,7 +28,7 @@ export type Decorator< export type GenericDecorator = Decorator<unknown>; export interface EffectFeatureOptions { - effect: Computable<any>; + effect: Computable<unknown>; } export type EffectFeature<T extends EffectFeatureOptions> = Replace< @@ -38,7 +38,7 @@ export type EffectFeature<T extends EffectFeatureOptions> = Replace< export type GenericEffectFeature = Replace< EffectFeature<EffectFeatureOptions>, - { effect: ProcessedComputable<any> } + { effect: ProcessedComputable<unknown> } >; /** diff --git a/src/features/particles/Particles.vue b/src/features/particles/Particles.vue index 1f7de78..6fee1e9 100644 --- a/src/features/particles/Particles.vue +++ b/src/features/particles/Particles.vue @@ -14,7 +14,7 @@ import { globalBus } from "game/events"; import "lib/pixi"; import { processedPropType } from "util/vue"; import type { PropType } from "vue"; -import { defineComponent, nextTick, onBeforeUnmount, onMounted, ref, shallowRef, unref } from "vue"; +import { defineComponent, nextTick, onBeforeUnmount, onMounted, shallowRef, unref } from "vue"; // TODO get typing support on the Particles component export default defineComponent({ diff --git a/src/features/repeatable.tsx b/src/features/repeatable.tsx index b15fe0f..d9bf372 100644 --- a/src/features/repeatable.tsx +++ b/src/features/repeatable.tsx @@ -7,14 +7,14 @@ import type { Replace, StyleValue } from "features/feature"; -import { Component, GatherProps, getUniqueID, jsx, setDefault, Visibility } from "features/feature"; +import { Component, GatherProps, Visibility, getUniqueID, jsx, setDefault } from "features/feature"; import { DefaultValue, Persistent, persistent } from "game/persistence"; import { + Requirements, createVisibilityRequirement, displayRequirements, maxRequirementsMet, payRequirements, - Requirements, requirementsMet } from "game/requirements"; import type { DecimalSource } from "util/bignum"; @@ -30,7 +30,7 @@ import { createLazyProxy } from "util/proxies"; import { coerceComponent, isCoercableComponent } from "util/vue"; import type { Ref } from "vue"; import { computed, unref } from "vue"; -import { Decorator, GenericDecorator } from "./decorators/common"; +import { GenericDecorator } from "./decorators/common"; /** A symbol used to identify {@link Repeatable} features. */ export const RepeatableType = Symbol("Repeatable"); diff --git a/src/features/upgrades/upgrade.ts b/src/features/upgrades/upgrade.ts index 094c641..5de63f1 100644 --- a/src/features/upgrades/upgrade.ts +++ b/src/features/upgrades/upgrade.ts @@ -1,5 +1,5 @@ import { isArray } from "@vue/shared"; -import { Decorator, GenericDecorator } from "features/decorators/common"; +import { GenericDecorator } from "features/decorators/common"; import type { CoercableComponent, GenericComponent, @@ -9,22 +9,20 @@ import type { } from "features/feature"; import { Component, - findFeatures, GatherProps, + Visibility, + findFeatures, getUniqueID, - setDefault, - Visibility + setDefault } from "features/feature"; -import { createResource } from "features/resources/resource"; import UpgradeComponent from "features/upgrades/Upgrade.vue"; import type { GenericLayer } from "game/layers"; import type { Persistent } from "game/persistence"; import { persistent } from "game/persistence"; import { - createCostRequirement, + Requirements, createVisibilityRequirement, payRequirements, - Requirements, requirementsMet } from "game/requirements"; import { isFunction } from "util/common"; diff --git a/src/game/requirements.tsx b/src/game/requirements.tsx index 35504b6..ac0f551 100644 --- a/src/game/requirements.tsx +++ b/src/game/requirements.tsx @@ -267,6 +267,7 @@ export function displayRequirements(requirements: Requirements, amount: DecimalS <div> Costs:{" "} {joinJSX( + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion withCosts.map(r => r.partialDisplay!(amount)), <>, </> )} @@ -276,6 +277,7 @@ export function displayRequirements(requirements: Requirements, amount: DecimalS <div> Requires:{" "} {joinJSX( + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion withoutCosts.map(r => r.partialDisplay!(amount)), <>, </> )} diff --git a/tests/features/conversions.test.ts b/tests/features/conversions.test.ts index c94df0a..dc89ac0 100644 --- a/tests/features/conversions.test.ts +++ b/tests/features/conversions.test.ts @@ -8,7 +8,7 @@ import { createResource, Resource } from "features/resources/resource"; import { GenericFormula } from "game/formulas/types"; import { createLayer, GenericLayer } from "game/layers"; import Decimal from "util/bignum"; -import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import { ref, unref } from "vue"; import "../utils"; @@ -472,15 +472,15 @@ describe("Passive generation", () => { setupPassiveGeneration(layer, conversion); layer.emit("preUpdate", 1); expect(gainResource.value).compare_tolerance(2); - }) + }); test("Rate is 100", () => { setupPassiveGeneration(layer, conversion, () => 100); layer.emit("preUpdate", 1); expect(gainResource.value).compare_tolerance(101); - }) + }); test("Obeys cap", () => { setupPassiveGeneration(layer, conversion, 100, () => 100); layer.emit("preUpdate", 1); expect(gainResource.value).compare_tolerance(100); - }) + }); }); diff --git a/tests/game/formulas.test.ts b/tests/game/formulas.test.ts index 7da6226..86ec8c4 100644 --- a/tests/game/formulas.test.ts +++ b/tests/game/formulas.test.ts @@ -2,11 +2,10 @@ import { createResource, Resource } from "features/resources/resource"; import Formula, { calculateCost, calculateMaxAffordable, - printFormula, unrefFormulaSource } from "game/formulas/formulas"; import type { GenericFormula, InvertibleFormula } from "game/formulas/types"; -import Decimal, { DecimalSource, format } from "util/bignum"; +import Decimal, { DecimalSource } from "util/bignum"; import { beforeAll, describe, expect, test } from "vitest"; import { ref } from "vue"; import "../utils"; @@ -151,7 +150,7 @@ describe("Formula Equality Checking", () => { describe("Formula aliases", () => { function testAliases<T extends FormulaFunctions>( aliases: T[], - args: Parameters<typeof Formula[T]> + args: Parameters<(typeof Formula)[T]> ) { describe(aliases[0], () => { let formula: GenericFormula; @@ -239,7 +238,7 @@ describe("Creating Formulas", () => { function checkFormula<T extends FormulaFunctions>( functionName: T, - args: Readonly<Parameters<typeof Formula[T]>> + args: Readonly<Parameters<(typeof Formula)[T]>> ) { let formula: GenericFormula; beforeAll(() => { @@ -261,7 +260,7 @@ describe("Creating Formulas", () => { // It's a lot of tests, but I'd rather be exhaustive function testFormulaCall<T extends FormulaFunctions>( functionName: T, - args: Readonly<Parameters<typeof Formula[T]>> + args: Readonly<Parameters<(typeof Formula)[T]>> ) { if ((functionName === "slog" || functionName === "layeradd") && args[0] === -1) { // These cases in particular take a long time, so skip them From 87a2d6bdc91e03d3b6222e3b0932b28b6e2eee26 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 19 Apr 2023 21:40:34 -0500 Subject: [PATCH 037/134] Close example --- src/features/decorators/bonusDecorator.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/features/decorators/bonusDecorator.ts b/src/features/decorators/bonusDecorator.ts index ac02c07..636bfbe 100644 --- a/src/features/decorators/bonusDecorator.ts +++ b/src/features/decorators/bonusDecorator.ts @@ -98,6 +98,7 @@ export const bonusAmountDecorator: Decorator< * bonusCompletions: noPersist(otherChallenge.completions), * ... * }), bonusCompletionDecorator) as GenericChallenge & GenericBonusCompletionFeature + * ``` */ export const bonusCompletionsDecorator: Decorator< BonusCompletionsFeatureOptions, From 5ce2c65560821f936c8d9801e6006d5313f30604 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Thu, 20 Apr 2023 17:05:32 -0500 Subject: [PATCH 038/134] Update discord link --- src/components/Info.vue | 2 +- src/components/NaNScreen.vue | 2 +- src/components/Nav.vue | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/Info.vue b/src/components/Info.vue index 24a15e8..9dd0c2d 100644 --- a/src/components/Info.vue +++ b/src/components/Info.vue @@ -33,7 +33,7 @@ </div> <div> <a - href="https://discord.gg/WzejVAx" + href="https://discord.gg/yJ4fjnjU54" class="info-modal-discord-link" target="_blank" > diff --git a/src/components/NaNScreen.vue b/src/components/NaNScreen.vue index 511d1b6..de69d5b 100644 --- a/src/components/NaNScreen.vue +++ b/src/components/NaNScreen.vue @@ -15,7 +15,7 @@ <br /> <div> <a - :href="discordLink || 'https://discord.gg/WzejVAx'" + :href="discordLink || 'https://discord.gg/yJ4fjnjU54'" class="nan-modal-discord-link" > <span class="material-icons nan-modal-discord">discord</span> diff --git a/src/components/Nav.vue b/src/components/Nav.vue index b265635..a71f15d 100644 --- a/src/components/Nav.vue +++ b/src/components/Nav.vue @@ -15,7 +15,7 @@ <a :href="discordLink" target="_blank">{{ discordName }}</a> </li> <li> - <a href="https://discord.gg/WzejVAx" target="_blank" + <a href="https://discord.gg/yJ4fjnjU54" target="_blank" >The Paper Pilot Community</a > </li> @@ -82,7 +82,7 @@ <a :href="discordLink" target="_blank">{{ discordName }}</a> </li> <li> - <a href="https://discord.gg/WzejVAx" target="_blank" + <a href="https://discord.gg/yJ4fjnjU54" target="_blank" >The Paper Pilot Community</a > </li> From b5e7e77a2ac57c2ab99766cf854e60d9251e8591 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Thu, 20 Apr 2023 17:07:23 -0500 Subject: [PATCH 039/134] Version Bump --- CHANGELOG.md | 1 + package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4fa0c76..41df500 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.6.0] - 2023-04-20 ### Added - **BREAKING** New requirements system - Replaces many features' existing requirements with new generic form diff --git a/package-lock.json b/package-lock.json index 02de79c..3e7acae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "profectus", - "version": "0.5.2", + "version": "0.6.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "profectus", - "version": "0.5.2", + "version": "0.6.0", "dependencies": { "@fontsource/material-icons": "^4.5.4", "@fontsource/roboto-mono": "^4.5.8", diff --git a/package.json b/package.json index 9285057..4aa9568 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "profectus", - "version": "0.5.2", + "version": "0.6.0", "private": true, "scripts": { "start": "vite", From 6cff4eca823520097cd422c609c178e9b25bcdd0 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Thu, 20 Apr 2023 17:29:33 -0500 Subject: [PATCH 040/134] Ooops --- src/features/upgrades/upgrade.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/upgrades/upgrade.ts b/src/features/upgrades/upgrade.ts index 5de63f1..3861c5e 100644 --- a/src/features/upgrades/upgrade.ts +++ b/src/features/upgrades/upgrade.ts @@ -163,7 +163,7 @@ export function createUpgrade<T extends UpgradeOptions>( processComputable(upgrade as T, "mark"); for (const decorator of decorators) { - decorator.preConstruct?.(upgrade); + decorator.postConstruct?.(upgrade); } const decoratedProps = decorators.reduce( From 4160986a4d7d968d50aa70e336af9a500e1949d0 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Fri, 21 Apr 2023 19:49:21 -0500 Subject: [PATCH 041/134] Fix issues with boards --- src/features/bars/Bar.vue | 1 + src/features/boards/Board.vue | 16 +-- src/features/boards/BoardLink.vue | 4 + src/features/boards/BoardNode.vue | 135 ++++++++---------------- src/features/boards/BoardNodeAction.vue | 109 +++++++++++++++++++ src/features/boards/board.ts | 4 +- 6 files changed, 171 insertions(+), 98 deletions(-) create mode 100644 src/features/boards/BoardNodeAction.vue diff --git a/src/features/bars/Bar.vue b/src/features/bars/Bar.vue index 3c4b91c..89315bb 100644 --- a/src/features/bars/Bar.vue +++ b/src/features/bars/Bar.vue @@ -179,5 +179,6 @@ export default defineComponent({ margin-left: -0.5px; transition-duration: 0.2s; z-index: 2; + transition-duration: 0.05s; } </style> diff --git a/src/features/boards/Board.vue b/src/features/boards/Board.vue index f1f8b83..2605aaa 100644 --- a/src/features/boards/Board.vue +++ b/src/features/boards/Board.vue @@ -1,7 +1,6 @@ <template> <panZoom v-if="isVisible(visibility)" - v-show="isHidden(visibility)" :style="[ { width, @@ -25,7 +24,10 @@ <svg class="stage" width="100%" height="100%"> <g class="g1"> <transition-group name="link" appear> - <g v-for="(link, i) in unref(links) || []" :key="i"> + <g + v-for="link in unref(links) || []" + :key="`${link.startNode.id}-${link.endNode.id}`" + > <BoardLinkVue :link="link" /> </g> </transition-group> @@ -35,7 +37,7 @@ :node="node" :nodeType="types[node.type]" :dragging="draggingNode" - :dragged="dragged" + :dragged="draggingNode === node ? dragged : undefined" :hasDragged="hasDragged" :receivingNode="receivingNode?.id === node.id" :selectedNode="unref(selectedNode)" @@ -60,9 +62,9 @@ import type { } from "features/boards/board"; import { getNodeProperty } from "features/boards/board"; import type { StyleValue } from "features/feature"; -import { isHidden, isVisible, Visibility } from "features/feature"; +import { Visibility, isVisible } from "features/feature"; import type { ProcessedComputable } from "util/computed"; -import { computed, ref, Ref, toRefs, unref } from "vue"; +import { Ref, computed, ref, toRefs, unref } from "vue"; import BoardLinkVue from "./BoardLink.vue"; import BoardNodeVue from "./BoardNode.vue"; @@ -138,6 +140,7 @@ const receivingNode = computed(() => { // eslint-disable-next-line @typescript-eslint/no-explicit-any function onInit(panzoomInstance: any) { panzoomInstance.setTransformOrigin(null); + panzoomInstance.moveTo(stage.value.$el.clientWidth / 2, stage.value.$el.clientHeight / 2); } function mouseDown(e: MouseEvent | TouchEvent, nodeID: number | null = null, draggable = false) { @@ -222,8 +225,7 @@ function endDragging(nodeID: number | null) { draggingNode.value.position.y += Math.round(dragged.value.y / 25) * 25; const nodes = props.nodes.value; - nodes.splice(nodes.indexOf(draggingNode.value), 1); - nodes.push(draggingNode.value); + nodes.push(nodes.splice(nodes.indexOf(draggingNode.value), 1)[0]); if (receivingNode.value) { props.types.value[receivingNode.value.type].onDrop?.( diff --git a/src/features/boards/BoardLink.vue b/src/features/boards/BoardLink.vue index cb61914..441d996 100644 --- a/src/features/boards/BoardLink.vue +++ b/src/features/boards/BoardLink.vue @@ -39,6 +39,10 @@ const endPosition = computed(() => { </script> <style scoped> +.link { + transition-duration: 0s; +} + .link.pulsing { animation: pulsing 2s ease-in infinite; } diff --git a/src/features/boards/BoardNode.vue b/src/features/boards/BoardNode.vue index 931c6ee..e493f93 100644 --- a/src/features/boards/BoardNode.vue +++ b/src/features/boards/BoardNode.vue @@ -1,50 +1,19 @@ <template> <g class="boardnode" - :class="node.type" + :class="{ [node.type]: true, isSelected, isDraggable }" :style="{ opacity: dragging?.id === node.id && hasDragged ? 0.5 : 1 }" :transform="`translate(${position.x},${position.y})`" > - <transition name="actions" appear> - <g v-if="isSelected && actions"> - <!-- TODO move to separate file --> - <g - v-for="(action, index) in actions" - :key="action.id" - class="action" - :class="{ selected: selectedAction?.id === action.id }" - :transform="`translate( - ${ - (-size - 30) * - Math.sin(((actions.length - 1) / 2 - index) * actionDistance) - }, - ${ - (size + 30) * - Math.cos(((actions.length - 1) / 2 - index) * actionDistance) - } - )`" - @mousedown="e => performAction(e, action)" - @touchstart="e => performAction(e, action)" - @mouseup="e => actionMouseUp(e, action)" - @touchend.stop="e => actionMouseUp(e, action)" - > - <circle - :fill="getNodeProperty(action.fillColor, node)" - r="20" - :stroke-width="selectedAction?.id === action.id ? 4 : 0" - :stroke="outlineColor" - /> - <text :fill="titleColor" class="material-icons">{{ - getNodeProperty(action.icon, node) - }}</text> - </g> - </g> - </transition> + <BoardNodeAction + :actions="actions ?? []" + :is-selected="isSelected" + :node="node" + :node-type="nodeType" + /> <g class="node-container" - @mouseenter="isHovering = true" - @mouseleave="isHovering = false" @mousedown="mouseDown" @touchstart.passive="mouseDown" @mouseup="mouseUp" @@ -69,7 +38,7 @@ /> <circle - class="progressFill" + class="progress progressFill" v-if="progressDisplay === ProgressDisplay.Fill" :r="Math.max(size * progress - 2, 0)" :fill="progressColor" @@ -77,7 +46,7 @@ <circle v-else :r="size + 4.5" - class="progressRing" + class="progress progressRing" fill="transparent" :stroke-dasharray="(size + 4.5) * 2 * Math.PI" :stroke-width="5" @@ -113,7 +82,7 @@ <rect v-if="progressDisplay === ProgressDisplay.Fill" - class="progressFill" + class="progress progressFill" :width="Math.max(size * sqrtTwo * progress - 2, 0)" :height="Math.max(size * sqrtTwo * progress - 2, 0)" :transform="`translate(${-Math.max(size * sqrtTwo * progress - 2, 0) / 2}, ${ @@ -123,7 +92,7 @@ /> <rect v-else - class="progressDiamond" + class="progress progressDiamond" :width="size * sqrtTwo + 9" :height="size * sqrtTwo + 9" :transform="`translate(${-(size * sqrtTwo + 9) / 2}, ${ @@ -173,6 +142,7 @@ import { ProgressDisplay, getNodeProperty, Shape } from "features/boards/board"; import { isVisible } from "features/feature"; import settings from "game/settings"; import { computed, ref, toRefs, unref, watch } from "vue"; +import BoardNodeAction from "./BoardNodeAction.vue"; const sqrtTwo = Math.sqrt(2); @@ -195,7 +165,6 @@ const emit = defineEmits<{ (e: "endDragging", node: number): void; }>(); -const isHovering = ref(false); const isSelected = computed(() => unref(props.selectedNode) === unref(props.node)); const isDraggable = computed(() => getNodeProperty(props.nodeType.value.draggable, unref(props.node)) @@ -217,16 +186,20 @@ const actions = computed(() => { const position = computed(() => { const node = unref(props.node); - const dragged = unref(props.dragged); - return getNodeProperty(props.nodeType.value.draggable, node) && + if ( + getNodeProperty(props.nodeType.value.draggable, node) && unref(props.dragging)?.id === node.id && - dragged - ? { - x: node.position.x + Math.round(dragged.x / 25) * 25, - y: node.position.y + Math.round(dragged.y / 25) * 25 - } - : node.position; + unref(props.dragged) != null + ) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const { x, y } = unref(props.dragged)!; + return { + x: node.position.x + Math.round(x / 25) * 25, + y: node.position.y + Math.round(y / 25) * 25 + }; + } + return node.position; }); const shape = computed(() => getNodeProperty(props.nodeType.value.shape, unref(props.node))); @@ -264,32 +237,14 @@ const canAccept = computed( unref(props.hasDragged) && getNodeProperty(props.nodeType.value.canAccept, unref(props.node)) ); -const actionDistance = computed(() => - getNodeProperty(props.nodeType.value.actionDistance, unref(props.node)) -); function mouseDown(e: MouseEvent | TouchEvent) { emit("mouseDown", e, props.node.value.id, isDraggable.value); } -function mouseUp() { +function mouseUp(e: MouseEvent | TouchEvent) { if (!props.hasDragged?.value) { props.nodeType.value.onClick?.(props.node.value); - } -} - -function performAction(e: MouseEvent | TouchEvent, action: GenericBoardNodeAction) { - // If the onClick function made this action selected, - // don't propagate the event (which will deselect everything) - if (action.onClick(unref(props.node)) || unref(props.selectedAction)?.id === action.id) { - e.preventDefault(); - e.stopPropagation(); - } -} - -function actionMouseUp(e: MouseEvent | TouchEvent, action: GenericBoardNodeAction) { - if (unref(props.selectedAction)?.id === action.id) { - e.preventDefault(); e.stopPropagation(); } } @@ -301,6 +256,22 @@ function actionMouseUp(e: MouseEvent | TouchEvent, action: GenericBoardNodeActio transition-duration: 0s; } +.boardnode:hover .body { + fill: var(--highlighted); +} + +.boardnode.isSelected { + transform: scale(1.2); +} + +.boardnode.isSelected .body { + fill: var(--accent1) !important; +} + +.boardnode:not(.isDraggable) .body { + fill: var(--locked); +} + .node-title { text-anchor: middle; dominant-baseline: middle; @@ -309,25 +280,14 @@ function actionMouseUp(e: MouseEvent | TouchEvent, action: GenericBoardNodeActio pointer-events: none; } +.progress { + transition-duration: 0.05s; +} + .progressRing { transform: rotate(-90deg); } -.action:not(.boardnode):hover circle, -.action:not(.boardnode).selected circle { - r: 25; -} - -.action:not(.boardnode):hover text, -.action:not(.boardnode).selected text { - font-size: 187.5%; /* 150% * 1.25 */ -} - -.action:not(.boardnode) text { - text-anchor: middle; - dominant-baseline: central; -} - .fade-enter-from, .fade-leave-to { opacity: 0; @@ -353,11 +313,6 @@ function actionMouseUp(e: MouseEvent | TouchEvent, action: GenericBoardNodeActio </style> <style> -.actions-enter-from .action, -.actions-leave-to .action { - transform: translate(0, 0); -} - .grow-enter-from .node-container, .grow-leave-to .node-container { transform: scale(0); diff --git a/src/features/boards/BoardNodeAction.vue b/src/features/boards/BoardNodeAction.vue new file mode 100644 index 0000000..c67a802 --- /dev/null +++ b/src/features/boards/BoardNodeAction.vue @@ -0,0 +1,109 @@ +<template> + <transition name="actions" appear> + <g v-if="isSelected && actions"> + <!-- TODO move to separate file --> + <g + v-for="(action, index) in actions" + :key="action.id" + class="action" + :class="{ selected: selectedAction?.id === action.id }" + :transform="`translate( + ${ + (-size - 30) * + Math.sin(((actions.length - 1) / 2 - index) * actionDistance) + }, + ${ + (size + 30) * + Math.cos(((actions.length - 1) / 2 - index) * actionDistance) + } + )`" + @mousedown="e => performAction(e, action)" + @touchstart="e => performAction(e, action)" + @mouseup="e => actionMouseUp(e, action)" + @touchend.stop="e => actionMouseUp(e, action)" + > + <circle + :fill="getNodeProperty(action.fillColor, node)" + r="20" + :stroke-width="selectedAction?.id === action.id ? 4 : 0" + :stroke="outlineColor" + /> + <text :fill="titleColor" class="material-icons">{{ + getNodeProperty(action.icon, node) + }}</text> + </g> + </g> + </transition> +</template> + +<script setup lang="ts"> +import themes from "data/themes"; +import type { BoardNode, GenericBoardNodeAction, GenericNodeType } from "features/boards/board"; +import { getNodeProperty } from "features/boards/board"; +import settings from "game/settings"; +import { computed, toRefs, unref } from "vue"; + +const _props = defineProps<{ + node: BoardNode; + nodeType: GenericNodeType; + actions?: GenericBoardNodeAction[]; + isSelected: boolean; + selectedAction?: GenericBoardNodeAction; +}>(); +const props = toRefs(_props); + +const size = computed(() => getNodeProperty(props.nodeType.value.size, unref(props.node))); +const outlineColor = computed( + () => + getNodeProperty(props.nodeType.value.outlineColor, unref(props.node)) ?? + themes[settings.theme].variables["--outline"] +); +const titleColor = computed( + () => + getNodeProperty(props.nodeType.value.titleColor, unref(props.node)) ?? + themes[settings.theme].variables["--foreground"] +); +const actionDistance = computed(() => + getNodeProperty(props.nodeType.value.actionDistance, unref(props.node)) +); + +function performAction(e: MouseEvent | TouchEvent, action: GenericBoardNodeAction) { + // If the onClick function made this action selected, + // don't propagate the event (which will deselect everything) + if (action.onClick(unref(props.node)) || unref(props.selectedAction)?.id === action.id) { + e.preventDefault(); + e.stopPropagation(); + } +} + +function actionMouseUp(e: MouseEvent | TouchEvent, action: GenericBoardNodeAction) { + if (unref(props.selectedAction)?.id === action.id) { + e.preventDefault(); + e.stopPropagation(); + } +} +</script> + +<style scoped> +.action:not(.boardnode):hover circle, +.action:not(.boardnode).selected circle { + r: 25; +} + +.action:not(.boardnode):hover text, +.action:not(.boardnode).selected text { + font-size: 187.5%; /* 150% * 1.25 */ +} + +.action:not(.boardnode) text { + text-anchor: middle; + dominant-baseline: central; +} +</style> + +<style> +.actions-enter-from .action, +.actions-leave-to .action { + transform: translate(0, 0); +} +</style> diff --git a/src/features/boards/board.ts b/src/features/boards/board.ts index e10bf67..e26be13 100644 --- a/src/features/boards/board.ts +++ b/src/features/boards/board.ts @@ -63,6 +63,8 @@ export interface BoardNode { export interface BoardNodeLink extends Omit<Link, "startNode" | "endNode"> { startNode: BoardNode; endNode: BoardNode; + stroke: string; + strokeWidth: number; pulsing?: boolean; } @@ -365,7 +367,7 @@ export function createBoard<T extends BoardOptions>( processComputable(board as T, "width"); setDefault(board, "width", "100%"); processComputable(board as T, "height"); - setDefault(board, "height", "400px"); + setDefault(board, "height", "100%"); processComputable(board as T, "classes"); processComputable(board as T, "style"); From b6317a47e8c515ac85168cce699f986de252a2e8 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Fri, 21 Apr 2023 23:47:33 -0500 Subject: [PATCH 042/134] Fix calculate max affordable edge case --- src/game/formulas/formulas.ts | 4 ++-- tests/game/formulas.test.ts | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index 9f6ad5a..cdc4b0e 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -1426,14 +1426,14 @@ export function calculateMaxAffordable( summedPurchases = 0; } } - if (summedPurchases > 0) { + if (summedPurchases > 0 && Decimal.lt(calculateCost(formula, affordable, true, 0), 1e308)) { affordable = affordable.sub(summedPurchases).clampMin(0); let summedCost = calculateCost(formula, affordable, true, 0); while (true) { const nextCost = formula.evaluate( affordable.add(unref(formula.innermostVariable) ?? 0) ); - if (Decimal.add(summedCost, nextCost).lt(resource.value)) { + if (Decimal.add(summedCost, nextCost).lte(resource.value)) { affordable = affordable.add(1); summedCost = Decimal.add(summedCost, nextCost); } else { diff --git a/tests/game/formulas.test.ts b/tests/game/formulas.test.ts index 86ec8c4..69254cf 100644 --- a/tests/game/formulas.test.ts +++ b/tests/game/formulas.test.ts @@ -1174,6 +1174,24 @@ describe("Buy Max", () => { // Since we're summing all the purchases this should be equivalent expect(calculatedCost).compare_tolerance(actualCost); }); + test("Handles summing purchases when making very few purchases", () => { + const purchases = ref(0); + const variable = Formula.variable(purchases); + const formula = variable.add(1); + const resource = createResource(ref(3)); + const maxAffordable = calculateMaxAffordable(formula, resource, true); + expect(maxAffordable.value).compare_tolerance(2); + + const actualCost = new Array(2) + .fill(null) + .reduce( + (acc, _, i) => acc.add(formula.evaluate(i + purchases.value)), + new Decimal(0) + ); + const calculatedCost = calculateCost(formula, maxAffordable.value, true); + // Since we're summing all the purchases this should be equivalent + expect(calculatedCost).compare_tolerance(actualCost); + }); test("Handles summing purchases when over e308 purchases", () => { resource.value = "1ee308"; const purchases = ref(0); From 80c66135b2123edd61ff04cd48f769daa8caee18 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 22 Apr 2023 00:33:20 -0500 Subject: [PATCH 043/134] Fix nodes appearing in center when selected --- src/features/boards/BoardNode.vue | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/features/boards/BoardNode.vue b/src/features/boards/BoardNode.vue index e493f93..1b3298a 100644 --- a/src/features/boards/BoardNode.vue +++ b/src/features/boards/BoardNode.vue @@ -3,7 +3,7 @@ class="boardnode" :class="{ [node.type]: true, isSelected, isDraggable }" :style="{ opacity: dragging?.id === node.id && hasDragged ? 0.5 : 1 }" - :transform="`translate(${position.x},${position.y})`" + :transform="`translate(${position.x},${position.y})${isSelected ? ' scale(1.2)' : ''}`" > <BoardNodeAction :actions="actions ?? []" @@ -244,6 +244,7 @@ function mouseDown(e: MouseEvent | TouchEvent) { function mouseUp(e: MouseEvent | TouchEvent) { if (!props.hasDragged?.value) { + emit("endDragging", props.node.value.id); props.nodeType.value.onClick?.(props.node.value); e.stopPropagation(); } @@ -260,10 +261,6 @@ function mouseUp(e: MouseEvent | TouchEvent) { fill: var(--highlighted); } -.boardnode.isSelected { - transform: scale(1.2); -} - .boardnode.isSelected .body { fill: var(--accent1) !important; } From 97fcd28fe2bbbd8bf6ff1f8b6de64049de56ee0d Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 22 Apr 2023 17:48:44 -0500 Subject: [PATCH 044/134] Change formula typing to work better --- src/game/formulas/formulas.ts | 487 ++++++++++++++++++---------------- src/game/formulas/types.d.ts | 28 +- tests/game/formulas.test.ts | 38 ++- 3 files changed, 307 insertions(+), 246 deletions(-) diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index cdc4b0e..e8557b2 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -22,11 +22,13 @@ import type { } from "./types"; export function hasVariable(value: FormulaSource): value is InvertibleFormula { - return value instanceof Formula && value.hasVariable(); + return value instanceof InternalFormula && value.hasVariable(); } export function unrefFormulaSource(value: FormulaSource, variable?: DecimalSource) { - return value instanceof Formula ? value.evaluate(variable) : unref(value); + return value instanceof InternalFormula + ? value.evaluate(variable) + : (unref(value) as DecimalSource); } function integrateVariable(this: GenericFormula) { @@ -37,26 +39,27 @@ function integrateVariableInner(this: GenericFormula) { return this; } -/** - * A class that can be used for cost/goal functions. It can be evaluated similar to a cost function, but also provides extra features for supported formulas. For example, a lot of math functions can be inverted. - * Typically, the use of these extra features is to support cost/goal functions that have multiple levels purchased/completed at once efficiently. - * @see {@link calculateMaxAffordable} - * @see {@link game/requirements.createCostRequirement} - */ -export default class Formula<T extends [FormulaSource] | FormulaSource[]> { +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export interface InternalFormula<T extends [FormulaSource] | FormulaSource[]> { + invert?(value: DecimalSource): DecimalSource; + evaluateIntegral?(variable?: DecimalSource): DecimalSource; + getIntegralFormula?(stack?: SubstitutionStack): GenericFormula; + calculateConstantOfIntegration?(): Decimal; + invertIntegral?(value: DecimalSource): DecimalSource; +} + +export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[]> { readonly inputs: T; - private readonly internalEvaluate: EvaluateFunction<T> | undefined; - private readonly internalInvert: InvertFunction<T> | undefined; - private readonly internalIntegrate: IntegrateFunction<T> | undefined; - private readonly internalIntegrateInner: IntegrateFunction<T> | undefined; - private readonly applySubstitution: SubstitutionFunction<T> | undefined; - private readonly internalVariables: number; + protected readonly internalEvaluate: EvaluateFunction<T> | undefined; + protected readonly internalInvert: InvertFunction<T> | undefined; + protected readonly internalIntegrate: IntegrateFunction<T> | undefined; + protected readonly internalIntegrateInner: IntegrateFunction<T> | undefined; + protected readonly applySubstitution: SubstitutionFunction<T> | undefined; + protected readonly internalVariables: number; public readonly innermostVariable: ProcessedComputable<DecimalSource> | undefined; - private integralFormula: GenericFormula | undefined; - constructor(options: FormulaOptions<T>) { let readonlyProperties; if ("inputs" in options) { @@ -112,12 +115,12 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { private setupFormula(options: GeneralFormulaOptions<T>): InternalFormulaProperties<T> { const { inputs, evaluate, invert, integrate, integrateInner, applySubstitution } = options; const numVariables = inputs.reduce<number>( - (acc, input) => acc + (input instanceof Formula ? input.internalVariables : 0), + (acc, input) => acc + (input instanceof InternalFormula ? input.internalVariables : 0), 0 ); - const variable = inputs.find(input => input instanceof Formula && input.hasVariable()) as - | GenericFormula - | undefined; + const variable = inputs.find( + input => input instanceof InternalFormula && input.hasVariable() + ) as GenericFormula | undefined; const innermostVariable = numVariables === 1 ? variable?.innermostVariable : undefined; @@ -133,14 +136,6 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { }; } - /** Calculates C for the implementation of the integral formula for this formula. */ - calculateConstantOfIntegration() { - // Calculate C based on the knowledge that at x=1, the integral should be the average between f(0) and f(1) - const integral = this.getIntegralFormula().evaluate(1); - const actualCost = Decimal.add(this.evaluate(0), this.evaluate(1)).div(2); - return Decimal.sub(actualCost, integral); - } - /** Type predicate that this formula can be inverted. */ isInvertible(): this is InvertibleFormula { return this.hasVariable() && (this.internalInvert != null || this.internalEvaluate == null); @@ -181,108 +176,6 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { ); } - /** - * Takes a potential result of the formula, and calculates what value the variable inside the formula would have to be for that result to occur. Only works if there's a single variable and if the formula is invertible. - * @param value The result of the formula - * @see {@link isInvertible} - */ - invert(value: DecimalSource): DecimalSource { - if (this.internalInvert && this.hasVariable()) { - return this.internalInvert.call(this, value, ...this.inputs); - } else if (this.inputs.length === 1 && this.hasVariable()) { - return value; - } - throw new Error("Cannot invert non-invertible formula"); - } - - /** - * Evaluate the result of the indefinite integral (sans the constant of integration). Only works if there's a single variable and the formula is integrable. The formula can only have one "complex" operation (anything besides +,-,*,/). - * @param variable Optionally override the value of the variable while evaluating - * @see {@link isIntegrable} - */ - evaluateIntegral(variable?: DecimalSource): DecimalSource { - if (!this.isIntegrable()) { - throw new Error("Cannot evaluate integral of formula without integral"); - } - return this.getIntegralFormula().evaluate(variable); - } - - /** - * Given the potential result of the formula's integral (and the constant of integration), calculate what value the variable inside the formula would have to be for that result to occur. Only works if there's a single variable and if the formula's integral is invertible. - * @param value The result of the integral. - * @see {@link isIntegralInvertible} - */ - invertIntegral(value: DecimalSource): DecimalSource { - if (!this.isIntegrable() || !this.getIntegralFormula().isInvertible()) { - throw new Error("Cannot invert integral of formula without invertible integral"); - } - return this.getIntegralFormula().invert(value); - } - - /** - * Get a formula that will evaluate to the integral of this formula. May also be invertible. - * @param stack For nested formulas, a stack of operations that occur outside the complex operation. - */ - getIntegralFormula(stack?: SubstitutionStack): GenericFormula { - if (this.integralFormula != null && stack == null) { - return this.integralFormula; - } - if (stack == null) { - // "Outer" part of the formula - if (this.applySubstitution == null) { - // We're the complex operation of this formula - stack = []; - if (this.internalIntegrate == null) { - throw new Error("Cannot integrate formula with non-integrable operation"); - } - let value = this.internalIntegrate.call(this, stack, ...this.inputs); - stack.forEach(func => (value = func(value))); - this.integralFormula = value; - } else { - // Continue digging into the formula - if (this.internalIntegrate) { - this.integralFormula = this.internalIntegrate.call( - this, - undefined, - ...this.inputs - ); - } else if ( - this.inputs.length === 1 && - this.internalEvaluate == null && - this.hasVariable() - ) { - // eslint-disable-next-line @typescript-eslint/no-this-alias - this.integralFormula = this; - } else { - throw new Error("Cannot integrate formula without variable"); - } - } - return this.integralFormula; - } else { - // "Inner" part of the formula - if (this.applySubstitution == null) { - throw new Error("Cannot have two complex operations in an integrable formula"); - } - stack.push((variable: GenericFormula) => - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - this.applySubstitution!.call(this, variable, ...this.inputs) - ); - if (this.internalIntegrateInner) { - return this.internalIntegrateInner.call(this, stack, ...this.inputs); - } else if (this.internalIntegrate) { - return this.internalIntegrate.call(this, stack, ...this.inputs); - } else if ( - this.inputs.length === 1 && - this.internalEvaluate == null && - this.hasVariable() - ) { - return this; - } else { - throw new Error("Cannot integrate formula without variable"); - } - } - } - /** * Compares if two formulas are equivalent to each other. Note that function contexts can lead to false negatives. * @param other The formula to compare to this one. @@ -291,11 +184,11 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { return ( this.inputs.length === other.inputs.length && this.inputs.every((input, i) => - input instanceof Formula && other.inputs[i] instanceof Formula - ? input.equals(other.inputs[i]) - : !(input instanceof Formula) && - !(other.inputs[i] instanceof Formula) && - Decimal.eq(unref(input), unref(other.inputs[i])) + input instanceof InternalFormula && other.inputs[i] instanceof InternalFormula + ? input.equals(other.inputs[i] as GenericFormula) + : !(input instanceof InternalFormula) && + !(other.inputs[i] instanceof InternalFormula) && + Decimal.eq(unref(input), unref(other.inputs[i] as DecimalSource)) ) && this.internalEvaluate === other.internalEvaluate && this.internalInvert === other.internalInvert && @@ -311,7 +204,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { public static constant( value: ProcessedComputable<DecimalSource> ): InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula { - return new Formula({ inputs: [value] }) as InvertibleFormula; + return new Formula({ inputs: [value] }); } /** @@ -321,7 +214,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { public static variable( value: ProcessedComputable<DecimalSource> ): InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula { - return new Formula({ variable: value }) as InvertibleFormula; + return new Formula({ variable: value }); } // TODO add integration support to step-wise functions @@ -338,7 +231,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { formulaModifier: ( value: InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula ) => GenericFormula - ): GenericFormula { + ) { const lhsRef = ref<DecimalSource>(0); const formula = formulaModifier(Formula.variable(lhsRef)); const processedStart = convertComputable(start); @@ -350,7 +243,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { return Decimal.add(formula.evaluate(), unref(processedStart)); } function invertStep(value: DecimalSource, lhs: FormulaSource) { - if (hasVariable(lhs)) { + if (hasVariable(lhs) && formula.isInvertible()) { if (Decimal.gt(value, unref(processedStart))) { value = Decimal.add( formula.invert(Decimal.sub(value, unref(processedStart))), @@ -384,7 +277,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { elseFormulaModifier?: ( value: InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula ) => GenericFormula - ): GenericFormula { + ) { const lhsRef = ref<DecimalSource>(0); const variable = Formula.variable(lhsRef); const formula = formulaModifier(variable); @@ -402,7 +295,11 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } } function invertStep(value: DecimalSource, lhs: FormulaSource) { - if (!hasVariable(lhs)) { + if ( + !hasVariable(lhs) || + !formula.isInvertible() || + (elseFormula != null && !elseFormula.isInvertible()) + ) { throw new Error("Could not invert due to no input being a variable"); } if (unref(processedCondition)) { @@ -432,7 +329,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { return Formula.if(value, condition, formulaModifier, elseFormulaModifier); } - public static abs(value: FormulaSource): GenericFormula { + public static abs(value: FormulaSource) { return new Formula({ inputs: [value], evaluate: Decimal.abs }); } @@ -447,33 +344,36 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { integrate: ops.integrateNeg }); } - public static negate = Formula.neg; - public static negated = Formula.neg; + public static negate = InternalFormula.neg; + public static negated = InternalFormula.neg; - public static sign(value: FormulaSource): GenericFormula { + public static sign(value: FormulaSource) { return new Formula({ inputs: [value], evaluate: Decimal.sign }); } - public static sgn = Formula.sign; + public static sgn = InternalFormula.sign; - public static round(value: FormulaSource): GenericFormula { + public static round(value: FormulaSource) { return new Formula({ inputs: [value], evaluate: Decimal.round }); } - public static floor(value: FormulaSource): GenericFormula { + public static floor(value: FormulaSource) { return new Formula({ inputs: [value], evaluate: Decimal.floor }); } - public static ceil(value: FormulaSource): GenericFormula { + public static ceil(value: FormulaSource) { return new Formula({ inputs: [value], evaluate: Decimal.ceil }); } - public static trunc(value: FormulaSource): GenericFormula { + public static trunc(value: FormulaSource) { return new Formula({ inputs: [value], evaluate: Decimal.trunc }); } public static add<T extends GenericFormula>(value: T, other: FormulaSource): T; public static add<T extends GenericFormula>(value: FormulaSource, other: T): T; - public static add(value: FormulaSource, other: FormulaSource): GenericFormula; + public static add( + value: FormulaSource, + other: FormulaSource + ): InternalFormula<[FormulaSource, FormulaSource]>; public static add(value: FormulaSource, other: FormulaSource) { return new Formula({ inputs: [value, other], @@ -484,11 +384,14 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { applySubstitution: ops.passthrough }); } - public static plus = Formula.add; + public static plus = InternalFormula.add; public static sub<T extends GenericFormula>(value: T, other: FormulaSource): T; public static sub<T extends GenericFormula>(value: FormulaSource, other: T): T; - public static sub(value: FormulaSource, other: FormulaSource): GenericFormula; + public static sub( + value: FormulaSource, + other: FormulaSource + ): Formula<[FormulaSource, FormulaSource]>; public static sub(value: FormulaSource, other: FormulaSource) { return new Formula({ inputs: [value, other], @@ -499,12 +402,15 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { applySubstitution: ops.passthrough }); } - public static subtract = Formula.sub; - public static minus = Formula.sub; + public static subtract = InternalFormula.sub; + public static minus = InternalFormula.sub; public static mul<T extends GenericFormula>(value: T, other: FormulaSource): T; public static mul<T extends GenericFormula>(value: FormulaSource, other: T): T; - public static mul(value: FormulaSource, other: FormulaSource): GenericFormula; + public static mul( + value: FormulaSource, + other: FormulaSource + ): Formula<[FormulaSource, FormulaSource]>; public static mul(value: FormulaSource, other: FormulaSource) { return new Formula({ inputs: [value, other], @@ -514,12 +420,15 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { applySubstitution: ops.applySubstitutionMul }); } - public static multiply = Formula.mul; - public static times = Formula.mul; + public static multiply = InternalFormula.mul; + public static times = InternalFormula.mul; public static div<T extends GenericFormula>(value: T, other: FormulaSource): T; public static div<T extends GenericFormula>(value: FormulaSource, other: T): T; - public static div(value: FormulaSource, other: FormulaSource): GenericFormula; + public static div( + value: FormulaSource, + other: FormulaSource + ): Formula<[FormulaSource, FormulaSource]>; public static div(value: FormulaSource, other: FormulaSource) { return new Formula({ inputs: [value, other], @@ -529,12 +438,12 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { applySubstitution: ops.applySubstitutionDiv }); } - public static divide = Formula.div; - public static divideBy = Formula.div; - public static dividedBy = Formula.div; + public static divide = InternalFormula.div; + public static divideBy = InternalFormula.div; + public static dividedBy = InternalFormula.div; public static recip<T extends GenericFormula>(value: T): T; - public static recip(value: FormulaSource): GenericFormula; + public static recip(value: FormulaSource): Formula<[FormulaSource]>; public static recip(value: FormulaSource) { return new Formula({ inputs: [value], @@ -543,8 +452,8 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { integrate: ops.integrateRecip }); } - public static reciprocal = Formula.recip; - public static reciprocate = Formula.recip; + public static reciprocal = InternalFormula.recip; + public static reciprocate = InternalFormula.recip; // TODO these functions should ostensibly be integrable, and the integrals should be invertible public static max = ops.createPassthroughBinaryFormula(Decimal.max); @@ -554,11 +463,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { public static clampMin = ops.createPassthroughBinaryFormula(Decimal.clampMin); public static clampMax = ops.createPassthroughBinaryFormula(Decimal.clampMax); - public static clamp( - value: FormulaSource, - min: FormulaSource, - max: FormulaSource - ): GenericFormula { + public static clamp(value: FormulaSource, min: FormulaSource, max: FormulaSource) { return new Formula({ inputs: [value, min, max], evaluate: Decimal.clamp, @@ -566,16 +471,16 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { }); } - public static pLog10(value: FormulaSource): GenericFormula { + public static pLog10(value: FormulaSource) { return new Formula({ inputs: [value], evaluate: Decimal.pLog10 }); } - public static absLog10(value: FormulaSource): GenericFormula { + public static absLog10(value: FormulaSource) { return new Formula({ inputs: [value], evaluate: Decimal.absLog10 }); } public static log10<T extends GenericFormula>(value: T): T; - public static log10(value: FormulaSource): GenericFormula; + public static log10(value: FormulaSource): Formula<[FormulaSource]>; public static log10(value: FormulaSource) { return new Formula({ inputs: [value], @@ -587,7 +492,10 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { public static log<T extends GenericFormula>(value: T, base: FormulaSource): T; public static log<T extends GenericFormula>(value: FormulaSource, base: T): T; - public static log(value: FormulaSource, base: FormulaSource): GenericFormula; + public static log( + value: FormulaSource, + base: FormulaSource + ): Formula<[FormulaSource, FormulaSource]>; public static log(value: FormulaSource, base: FormulaSource) { return new Formula({ inputs: [value, base], @@ -596,10 +504,10 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { integrate: ops.integrateLog }); } - public static logarithm = Formula.log; + public static logarithm = InternalFormula.log; public static log2<T extends GenericFormula>(value: T): T; - public static log2(value: FormulaSource): GenericFormula; + public static log2(value: FormulaSource): Formula<[FormulaSource]>; public static log2(value: FormulaSource) { return new Formula({ inputs: [value], @@ -610,7 +518,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } public static ln<T extends GenericFormula>(value: T): T; - public static ln(value: FormulaSource): GenericFormula; + public static ln(value: FormulaSource): Formula<[FormulaSource]>; public static ln(value: FormulaSource) { return new Formula({ inputs: [value], @@ -622,7 +530,10 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { public static pow<T extends GenericFormula>(value: T, other: FormulaSource): T; public static pow<T extends GenericFormula>(value: FormulaSource, other: T): T; - public static pow(value: FormulaSource, other: FormulaSource): GenericFormula; + public static pow( + value: FormulaSource, + other: FormulaSource + ): Formula<[FormulaSource, FormulaSource]>; public static pow(value: FormulaSource, other: FormulaSource) { return new Formula({ inputs: [value, other], @@ -645,7 +556,10 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { public static pow_base<T extends GenericFormula>(value: T, other: FormulaSource): T; public static pow_base<T extends GenericFormula>(value: FormulaSource, other: T): T; - public static pow_base(value: FormulaSource, other: FormulaSource): GenericFormula; + public static pow_base( + value: FormulaSource, + other: FormulaSource + ): Formula<[FormulaSource, FormulaSource]>; public static pow_base(value: FormulaSource, other: FormulaSource) { return new Formula({ inputs: [value, other], @@ -657,7 +571,10 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { public static root<T extends GenericFormula>(value: T, other: FormulaSource): T; public static root<T extends GenericFormula>(value: FormulaSource, other: T): T; - public static root(value: FormulaSource, other: FormulaSource): GenericFormula; + public static root( + value: FormulaSource, + other: FormulaSource + ): Formula<[FormulaSource, FormulaSource]>; public static root(value: FormulaSource, other: FormulaSource) { return new Formula({ inputs: [value, other], @@ -680,7 +597,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } public static exp<T extends GenericFormula>(value: T): T; - public static exp(value: FormulaSource): GenericFormula; + public static exp(value: FormulaSource): Formula<[FormulaSource]>; public static exp(value: FormulaSource) { return new Formula({ inputs: [value], @@ -691,25 +608,25 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } public static sqr<T extends GenericFormula>(value: T): T; - public static sqr(value: FormulaSource): GenericFormula; + public static sqr(value: FormulaSource): Formula<[FormulaSource, FormulaSource]>; public static sqr(value: FormulaSource) { return Formula.pow(value, 2); } public static sqrt<T extends GenericFormula>(value: T): T; - public static sqrt(value: FormulaSource): GenericFormula; + public static sqrt(value: FormulaSource): Formula<[FormulaSource, FormulaSource]>; public static sqrt(value: FormulaSource) { return Formula.root(value, 2); } public static cube<T extends GenericFormula>(value: T): T; - public static cube(value: FormulaSource): GenericFormula; + public static cube(value: FormulaSource): Formula<[FormulaSource, FormulaSource]>; public static cube(value: FormulaSource) { return Formula.pow(value, 3); } public static cbrt<T extends GenericFormula>(value: T): T; - public static cbrt(value: FormulaSource): GenericFormula; + public static cbrt(value: FormulaSource): Formula<[FormulaSource, FormulaSource]>; public static cbrt(value: FormulaSource) { return Formula.root(value, 3); } @@ -718,12 +635,12 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { value: T, height?: FormulaSource, payload?: FormulaSource - ): Omit<T, "integrate">; + ): InvertibleFormula; public static tetrate( value: FormulaSource, height?: FormulaSource, payload?: FormulaSource - ): GenericFormula; + ): Formula<[FormulaSource, FormulaSource, FormulaSource]>; public static tetrate( value: FormulaSource, height: FormulaSource = 2, @@ -740,12 +657,12 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { value: T, height?: FormulaSource, payload?: FormulaSource - ): Omit<T, "integrate">; + ): InvertibleFormula; public static iteratedexp( value: FormulaSource, height?: FormulaSource, payload?: FormulaSource - ): GenericFormula; + ): Formula<[FormulaSource, FormulaSource, FormulaSource]>; public static iteratedexp( value: FormulaSource, height: FormulaSource = 2, @@ -762,15 +679,15 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { value: FormulaSource, base: FormulaSource = 10, times: FormulaSource = 1 - ): GenericFormula { + ) { return new Formula({ inputs: [value, base, times], evaluate: ops.iteratedLog }); } - public static slog<T extends GenericFormula>( - value: T, + public static slog<T extends GenericFormula>(value: T, base?: FormulaSource): InvertibleFormula; + public static slog( + value: FormulaSource, base?: FormulaSource - ): Omit<T, "integrate">; - public static slog(value: FormulaSource, base?: FormulaSource): GenericFormula; + ): Formula<[FormulaSource, FormulaSource]>; public static slog(value: FormulaSource, base: FormulaSource = 10) { return new Formula({ inputs: [value, base], evaluate: ops.slog, invert: ops.invertSlog }); } @@ -783,12 +700,12 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { value: T, diff: FormulaSource, base?: FormulaSource - ): Omit<T, "integrate">; + ): InvertibleFormula; public static layeradd( value: FormulaSource, diff: FormulaSource, base?: FormulaSource - ): GenericFormula; + ): Formula<[FormulaSource, FormulaSource, FormulaSource]>; public static layeradd(value: FormulaSource, diff: FormulaSource, base: FormulaSource = 10) { return new Formula({ inputs: [value, diff, base], @@ -797,8 +714,8 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { }); } - public static lambertw<T extends GenericFormula>(value: T): Omit<T, "integrate">; - public static lambertw(value: FormulaSource): GenericFormula; + public static lambertw<T extends GenericFormula>(value: T): InvertibleFormula; + public static lambertw(value: FormulaSource): Formula<[FormulaSource]>; public static lambertw(value: FormulaSource) { return new Formula({ inputs: [value], @@ -807,8 +724,8 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { }); } - public static ssqrt<T extends GenericFormula>(value: T): Omit<T, "integrate">; - public static ssqrt(value: FormulaSource): GenericFormula; + public static ssqrt<T extends GenericFormula>(value: T): InvertibleFormula; + public static ssqrt(value: FormulaSource): Formula<[FormulaSource]>; public static ssqrt(value: FormulaSource) { return new Formula({ inputs: [value], evaluate: Decimal.ssqrt, invert: ops.invertSsqrt }); } @@ -817,12 +734,12 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { value: FormulaSource, height: FormulaSource = 2, payload: FormulaSource = Decimal.fromComponents_noNormalize(1, 0, 1) - ): GenericFormula { + ) { return new Formula({ inputs: [value, height, payload], evaluate: ops.pentate }); } public static sin<T extends GenericFormula>(value: T): T; - public static sin(value: FormulaSource): GenericFormula; + public static sin(value: FormulaSource): Formula<[FormulaSource]>; public static sin(value: FormulaSource) { return new Formula({ inputs: [value], @@ -833,7 +750,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } public static cos<T extends GenericFormula>(value: T): T; - public static cos(value: FormulaSource): GenericFormula; + public static cos(value: FormulaSource): Formula<[FormulaSource]>; public static cos(value: FormulaSource) { return new Formula({ inputs: [value], @@ -844,7 +761,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } public static tan<T extends GenericFormula>(value: T): T; - public static tan(value: FormulaSource): GenericFormula; + public static tan(value: FormulaSource): Formula<[FormulaSource]>; public static tan(value: FormulaSource) { return new Formula({ inputs: [value], @@ -855,7 +772,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } public static asin<T extends GenericFormula>(value: T): T; - public static asin(value: FormulaSource): GenericFormula; + public static asin(value: FormulaSource): Formula<[FormulaSource]>; public static asin(value: FormulaSource) { return new Formula({ inputs: [value], @@ -866,7 +783,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } public static acos<T extends GenericFormula>(value: T): T; - public static acos(value: FormulaSource): GenericFormula; + public static acos(value: FormulaSource): Formula<[FormulaSource]>; public static acos(value: FormulaSource) { return new Formula({ inputs: [value], @@ -877,7 +794,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } public static atan<T extends GenericFormula>(value: T): T; - public static atan(value: FormulaSource): GenericFormula; + public static atan(value: FormulaSource): Formula<[FormulaSource]>; public static atan(value: FormulaSource) { return new Formula({ inputs: [value], @@ -888,7 +805,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } public static sinh<T extends GenericFormula>(value: T): T; - public static sinh(value: FormulaSource): GenericFormula; + public static sinh(value: FormulaSource): Formula<[FormulaSource]>; public static sinh(value: FormulaSource) { return new Formula({ inputs: [value], @@ -899,7 +816,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } public static cosh<T extends GenericFormula>(value: T): T; - public static cosh(value: FormulaSource): GenericFormula; + public static cosh(value: FormulaSource): Formula<[FormulaSource]>; public static cosh(value: FormulaSource) { return new Formula({ inputs: [value], @@ -910,7 +827,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } public static tanh<T extends GenericFormula>(value: T): T; - public static tanh(value: FormulaSource): GenericFormula; + public static tanh(value: FormulaSource): Formula<[FormulaSource]>; public static tanh(value: FormulaSource) { return new Formula({ inputs: [value], @@ -921,7 +838,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } public static asinh<T extends GenericFormula>(value: T): T; - public static asinh(value: FormulaSource): GenericFormula; + public static asinh(value: FormulaSource): Formula<[FormulaSource]>; public static asinh(value: FormulaSource) { return new Formula({ inputs: [value], @@ -932,7 +849,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } public static acosh<T extends GenericFormula>(value: T): T; - public static acosh(value: FormulaSource): GenericFormula; + public static acosh(value: FormulaSource): Formula<[FormulaSource]>; public static acosh(value: FormulaSource) { return new Formula({ inputs: [value], @@ -943,7 +860,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } public static atanh<T extends GenericFormula>(value: T): T; - public static atanh(value: FormulaSource): GenericFormula; + public static atanh(value: FormulaSource): Formula<[FormulaSource]>; public static atanh(value: FormulaSource) { return new Formula({ inputs: [value], @@ -1189,7 +1106,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { this: T, height?: FormulaSource, payload?: FormulaSource - ): Omit<T, "integrate">; + ): InvertibleFormula; public tetrate( this: FormulaSource, height?: FormulaSource, @@ -1207,7 +1124,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { this: T, height?: FormulaSource, payload?: FormulaSource - ): Omit<T, "integrate">; + ): InvertibleFormula; public iteratedexp( this: FormulaSource, height?: FormulaSource, @@ -1225,7 +1142,7 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { return Formula.iteratedlog(this, base, times); } - public slog<T extends GenericFormula>(this: T, base?: FormulaSource): Omit<T, "integrate">; + public slog<T extends GenericFormula>(this: T, base?: FormulaSource): InvertibleFormula; public slog(this: FormulaSource, base?: FormulaSource): GenericFormula; public slog(this: FormulaSource, base: FormulaSource = 10) { return Formula.slog(this, base); @@ -1235,23 +1152,23 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { return Formula.layeradd10(this, diff); } - public layeradd<T extends GenericFormula>( + public layeradd<T extends InvertibleFormula>( this: T, diff: FormulaSource, base?: FormulaSource - ): Omit<T, "integrate">; + ): InvertibleFormula; public layeradd(this: FormulaSource, diff: FormulaSource, base?: FormulaSource): GenericFormula; public layeradd(this: FormulaSource, diff: FormulaSource, base: FormulaSource) { return Formula.layeradd(this, diff, base); } - public lambertw<T extends GenericFormula>(this: T): Omit<T, "integrate">; + public lambertw<T extends InvertibleFormula>(this: T): InvertibleFormula; public lambertw(this: FormulaSource): GenericFormula; public lambertw(this: FormulaSource) { return Formula.lambertw(this); } - public ssqrt<T extends GenericFormula>(this: T): Omit<T, "integrate">; + public ssqrt<T extends InvertibleFormula>(this: T): InvertibleFormula; public ssqrt(this: FormulaSource): GenericFormula; public ssqrt(this: FormulaSource) { return Formula.ssqrt(this); @@ -1337,6 +1254,127 @@ export default class Formula<T extends [FormulaSource] | FormulaSource[]> { } } +/** + * A class that can be used for cost/goal functions. It can be evaluated similar to a cost function, but also provides extra features for supported formulas. For example, a lot of math functions can be inverted. + * Typically, the use of these extra features is to support cost/goal functions that have multiple levels purchased/completed at once efficiently. + * @see {@link calculateMaxAffordable} + * @see {@link /game/requirements.createCostRequirement} + */ +export default class Formula< + T extends [FormulaSource] | FormulaSource[] +> extends InternalFormula<T> { + private integralFormula: GenericFormula | undefined; + + /** + * Takes a potential result of the formula, and calculates what value the variable inside the formula would have to be for that result to occur. Only works if there's a single variable and if the formula is invertible. + * @param value The result of the formula + * @see {@link isInvertible} + */ + invert(value: DecimalSource): DecimalSource { + if (this.internalInvert && this.hasVariable()) { + return this.internalInvert.call(this, value, ...this.inputs); + } else if (this.inputs.length === 1 && this.hasVariable()) { + return value; + } + throw new Error("Cannot invert non-invertible formula"); + } + + /** + * Evaluate the result of the indefinite integral (sans the constant of integration). Only works if there's a single variable and the formula is integrable. The formula can only have one "complex" operation (anything besides +,-,*,/). + * @param variable Optionally override the value of the variable while evaluating + * @see {@link isIntegrable} + */ + evaluateIntegral(variable?: DecimalSource): DecimalSource { + if (!this.isIntegrable()) { + throw new Error("Cannot evaluate integral of formula without integral"); + } + return this.getIntegralFormula().evaluate(variable); + } + + /** + * Given the potential result of the formula's integral (and the constant of integration), calculate what value the variable inside the formula would have to be for that result to occur. Only works if there's a single variable and if the formula's integral is invertible. + * @param value The result of the integral. + * @see {@link isIntegralInvertible} + */ + invertIntegral(value: DecimalSource): DecimalSource { + if (!this.isIntegrable() || !this.getIntegralFormula().isInvertible()) { + throw new Error("Cannot invert integral of formula without invertible integral"); + } + return (this.getIntegralFormula() as InvertibleFormula).invert(value); + } + + /** Calculates C for the implementation of the integral formula for this formula. */ + calculateConstantOfIntegration() { + // Calculate C based on the knowledge that at x=1, the integral should be the average between f(0) and f(1) + const integral = this.getIntegralFormula().evaluate(1); + const actualCost = Decimal.add(this.evaluate(0), this.evaluate(1)).div(2); + return Decimal.sub(actualCost, integral); + } + + /** + * Get a formula that will evaluate to the integral of this formula. May also be invertible. + * @param stack For nested formulas, a stack of operations that occur outside the complex operation. + */ + getIntegralFormula(stack?: SubstitutionStack): GenericFormula { + if (this.integralFormula != null && stack == null) { + return this.integralFormula; + } + if (stack == null) { + // "Outer" part of the formula + if (this.applySubstitution == null) { + // We're the complex operation of this formula + stack = []; + if (this.internalIntegrate == null) { + throw new Error("Cannot integrate formula with non-integrable operation"); + } + let value = this.internalIntegrate.call(this, stack, ...this.inputs); + stack.forEach(func => (value = func(value))); + this.integralFormula = value; + } else { + // Continue digging into the formula + if (this.internalIntegrate) { + this.integralFormula = this.internalIntegrate.call( + this, + undefined, + ...this.inputs + ); + } else if ( + this.inputs.length === 1 && + this.internalEvaluate == null && + this.hasVariable() + ) { + this.integralFormula = this; + } else { + throw new Error("Cannot integrate formula without variable"); + } + } + return this.integralFormula; + } else { + // "Inner" part of the formula + if (this.applySubstitution == null) { + throw new Error("Cannot have two complex operations in an integrable formula"); + } + stack.push((variable: GenericFormula) => + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + this.applySubstitution!.call(this, variable, ...this.inputs) + ); + if (this.internalIntegrateInner) { + return this.internalIntegrateInner.call(this, stack, ...this.inputs); + } else if (this.internalIntegrate) { + return this.internalIntegrate.call(this, stack, ...this.inputs); + } else if ( + this.inputs.length === 1 && + this.internalEvaluate == null && + this.hasVariable() + ) { + return this; + } else { + throw new Error("Cannot integrate formula without variable"); + } + } + } +} + /** * Utility for recursively searching through a formula for the cause of non-invertibility. * @param formula The formula to search for a non-invertible formula within @@ -1360,7 +1398,7 @@ export function findNonInvertible(formula: GenericFormula): GenericFormula | nul * @param formula The formula to print */ export function printFormula(formula: FormulaSource): string { - if (formula instanceof Formula) { + if (formula instanceof InternalFormula) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore return formula.internalEvaluate == null @@ -1472,6 +1510,11 @@ export function calculateCost( ) { let newValue = Decimal.add(amountToBuy, unref(formula.innermostVariable) ?? 0); if (spendResources) { + if (!formula.isIntegrable()) { + throw new Error( + "Cannot calculate cost with spending resources of non-integrable formula" + ); + } const targetValue = newValue; newValue = newValue .sub(summedPurchases ?? 10) diff --git a/src/game/formulas/types.d.ts b/src/game/formulas/types.d.ts index 96d7757..88efd92 100644 --- a/src/game/formulas/types.d.ts +++ b/src/game/formulas/types.d.ts @@ -1,32 +1,38 @@ -import Formula from "game/formulas/formulas"; +import { InternalFormula } from "game/formulas/formulas"; import { DecimalSource } from "util/bignum"; import { ProcessedComputable } from "util/computed"; // eslint-disable-next-line @typescript-eslint/no-explicit-any -type GenericFormula = Formula<any>; +type GenericFormula = InternalFormula<any>; type FormulaSource = ProcessedComputable<DecimalSource> | GenericFormula; type InvertibleFormula = GenericFormula & { - invert: (value: DecimalSource) => DecimalSource; + invert: NonNullable<GenericFormula["invert"]>; }; -type IntegrableFormula = GenericFormula & { - evaluateIntegral: (variable?: DecimalSource) => DecimalSource; +type IntegrableFormula = InvertibleFormula & { + evaluateIntegral: NonNullable<GenericFormula["evaluateIntegral"]>; + getIntegralFormula: NonNullable<GenericFormula["getIntegralFormula"]>; + calculateConstantOfIntegration: NonNullable<GenericFormula["calculateConstantOfIntegration"]>; }; -type InvertibleIntegralFormula = GenericFormula & { - invertIntegral: (value: DecimalSource) => DecimalSource; +type InvertibleIntegralFormula = IntegrableFormula & { + invertIntegral: NonNullable<GenericFormula["invertIntegral"]>; }; type EvaluateFunction<T> = ( - this: Formula<T>, + this: InternalFormula<T>, ...inputs: GuardedFormulasToDecimals<T> ) => DecimalSource; -type InvertFunction<T> = (this: Formula<T>, value: DecimalSource, ...inputs: T) => DecimalSource; +type InvertFunction<T> = ( + this: InternalFormula<T>, + value: DecimalSource, + ...inputs: T +) => DecimalSource; type IntegrateFunction<T> = ( - this: Formula<T>, + this: InternalFormula<T>, stack: SubstitutionStack | undefined, ...inputs: T ) => GenericFormula; type SubstitutionFunction<T> = ( - this: Formula<T>, + this: InternalFormula<T>, variable: GenericFormula, ...inputs: T ) => GenericFormula; diff --git a/tests/game/formulas.test.ts b/tests/game/formulas.test.ts index 69254cf..db020a5 100644 --- a/tests/game/formulas.test.ts +++ b/tests/game/formulas.test.ts @@ -4,11 +4,12 @@ import Formula, { calculateMaxAffordable, unrefFormulaSource } from "game/formulas/formulas"; -import type { GenericFormula, InvertibleFormula } from "game/formulas/types"; +import type { GenericFormula, IntegrableFormula, InvertibleFormula } from "game/formulas/types"; import Decimal, { DecimalSource } from "util/bignum"; import { beforeAll, describe, expect, test } from "vitest"; import { ref } from "vue"; import "../utils"; +import { InvertibleIntegralFormula } from "game/formulas/types"; type FormulaFunctions = keyof GenericFormula & keyof typeof Formula & keyof typeof Decimal; @@ -224,9 +225,15 @@ describe("Creating Formulas", () => { expect(formula.hasVariable()).toBe(false)); test("Evaluates correctly", () => expect(formula.evaluate()).compare_tolerance(expectedValue)); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + /* @ts-ignore */ test("Invert throws", () => expect(() => formula.invert(25)).toThrow()); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + /* @ts-ignore */ test("Integrate throws", () => expect(() => formula.evaluateIntegral()).toThrow()); test("Invert integral throws", () => + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + /* @ts-ignore */ expect(() => formula.invertIntegral(25)).toThrow()); }); } @@ -250,6 +257,8 @@ describe("Creating Formulas", () => { test("Is not marked as having a variable", () => expect(formula.hasVariable()).toBe(false)); test("Is not invertible", () => expect(formula.isInvertible()).toBe(false)); test(`Formula throws if trying to invert`, () => + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + /* @ts-ignore */ expect(() => formula.invert(10)).toThrow()); test("Is not integrable", () => expect(formula.isIntegrable()).toBe(false)); test("Has a non-invertible integral", () => @@ -361,7 +370,7 @@ describe("Variables", () => { }); describe("Inverting", () => { - let variable: GenericFormula; + let variable: IntegrableFormula; let constant: GenericFormula; beforeAll(() => { variable = Formula.variable(10); @@ -437,8 +446,8 @@ describe("Inverting", () => { }); describe("Inverting calculates the value of the variable", () => { - let variable: GenericFormula; - let constant: GenericFormula; + let variable: IntegrableFormula; + let constant: IntegrableFormula; beforeAll(() => { variable = Formula.variable(2); constant = Formula.constant(3); @@ -448,7 +457,8 @@ describe("Inverting", () => { test(`${name}(var, const).invert()`, () => { const formula = Formula[name](variable, constant); const result = formula.evaluate(); - expect(formula.invert(result)).compare_tolerance(2); + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + expect(formula.invert!(result)).compare_tolerance(2); }); if (name !== "layeradd") { test(`${name}(const, var).invert()`, () => { @@ -489,8 +499,8 @@ describe("Inverting", () => { }); describe("Integrating", () => { - let variable: GenericFormula; - let constant: GenericFormula; + let variable: IntegrableFormula; + let constant: IntegrableFormula; beforeAll(() => { variable = Formula.variable(ref(10)); constant = Formula.constant(10); @@ -502,7 +512,7 @@ describe("Integrating", () => { expect(variable.evaluateIntegral(20)).compare_tolerance(Decimal.pow(20, 2).div(2))); describe("Integrable functions marked as such", () => { - function checkFormula(formula: GenericFormula) { + function checkFormula(formula: IntegrableFormula) { expect(formula.isIntegrable()).toBe(true); expect(() => formula.evaluateIntegral()).to.not.throw(); } @@ -612,8 +622,8 @@ describe("Integrating", () => { }); describe("Inverting integrals", () => { - let variable: GenericFormula; - let constant: GenericFormula; + let variable: InvertibleIntegralFormula; + let constant: InvertibleIntegralFormula; beforeAll(() => { variable = Formula.variable(10); constant = Formula.constant(10); @@ -625,7 +635,7 @@ describe("Inverting integrals", () => { )); describe("Invertible Integral functions marked as such", () => { - function checkFormula(formula: GenericFormula) { + function checkFormula(formula: InvertibleIntegralFormula) { expect(formula.isIntegralInvertible()).toBe(true); expect(() => formula.invertIntegral(10)).to.not.throw(); } @@ -918,7 +928,7 @@ describe("Conditionals", () => { }); describe("Custom Formulas", () => { - let variable: GenericFormula; + let variable: InvertibleIntegralFormula; beforeAll(() => { variable = Formula.variable(1); }); @@ -1020,7 +1030,7 @@ describe("Custom Formulas", () => { }); describe("Formula as input", () => { - let customFormula: GenericFormula; + let customFormula: InvertibleIntegralFormula; beforeAll(() => { customFormula = new Formula({ inputs: [variable], @@ -1045,6 +1055,8 @@ describe("Buy Max", () => { }); describe("Without spending", () => { test("Throws on formula with non-invertible integral", () => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + /* @ts-ignore */ const maxAffordable = calculateMaxAffordable(Formula.neg(10), resource, false); expect(() => maxAffordable.value).toThrow(); }); From f7f4d0aa9fbde2653c2362fd839b24898c64a3f9 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 22 Apr 2023 17:58:31 -0500 Subject: [PATCH 045/134] Fix non-integrable requirements crashing in cost requirements with spendResources true (Which should be valid in the event the dev doesn't want to maximize) --- src/game/requirements.tsx | 28 +++++++++++-- tests/game/requirements.test.ts | 72 ++++++++++++++++++++++++++++++--- 2 files changed, 90 insertions(+), 10 deletions(-) diff --git a/src/game/requirements.tsx b/src/game/requirements.tsx index ac0f551..0b00192 100644 --- a/src/game/requirements.tsx +++ b/src/game/requirements.tsx @@ -101,6 +101,7 @@ export type CostRequirement = Replace< visibility: ProcessedComputable<Visibility.Visible | Visibility.None | boolean>; requiresPay: ProcessedComputable<boolean>; spendResources: ProcessedComputable<boolean>; + canMaximize: ProcessedComputable<boolean>; } >; @@ -159,14 +160,33 @@ export function createCostRequirement<T extends CostRequirementOptions>( req.resource.value = Decimal.sub(req.resource.value, cost).max(0); }); - req.canMaximize = req.cost instanceof Formula && req.cost.isInvertible(); + req.canMaximize = computed( + () => + req.cost instanceof Formula && + req.cost.isInvertible() && + (unref(req.spendResources) === false || req.cost.isIntegrable()) + ); - if (req.canMaximize) { - req.requirementMet = calculateMaxAffordable( - req.cost as InvertibleFormula, + if (req.cost instanceof Formula && req.cost.isInvertible()) { + const maxAffordable = calculateMaxAffordable( + req.cost, req.resource, unref(req.spendResources) as boolean ); + req.requirementMet = computed(() => { + if (unref(req.canMaximize)) { + return maxAffordable.value; + } else { + if (req.cost instanceof Formula) { + return Decimal.gte(req.resource.value, req.cost.evaluate()); + } else { + return Decimal.gte( + req.resource.value, + unref(req.cost as ProcessedComputable<DecimalSource>) + ); + } + } + }); } else { req.requirementMet = computed(() => { if (req.cost instanceof Formula) { diff --git a/tests/game/requirements.test.ts b/tests/game/requirements.test.ts index 13a13e9..2222276 100644 --- a/tests/game/requirements.test.ts +++ b/tests/game/requirements.test.ts @@ -16,11 +16,14 @@ import { isRef, ref, unref } from "vue"; import "../utils"; describe("Creating cost requirement", () => { + let resource: Resource; + beforeAll(() => { + resource = createResource(ref(10)); + }); + describe("Minimal requirement", () => { - let resource: Resource; let requirement: CostRequirement; beforeAll(() => { - resource = createResource(ref(10)); requirement = createCostRequirement(() => ({ resource, cost: 10, @@ -46,10 +49,8 @@ describe("Creating cost requirement", () => { }); describe("Fully customized", () => { - let resource: Resource; let requirement: CostRequirement; beforeAll(() => { - resource = createResource(ref(10)); requirement = createCostRequirement(() => ({ resource, cost: Formula.variable(resource).times(10), @@ -73,7 +74,6 @@ describe("Creating cost requirement", () => { }); test("Requirement met when meeting the cost", () => { - const resource = createResource(ref(10)); const requirement = createCostRequirement(() => ({ resource, cost: 10, @@ -83,7 +83,6 @@ describe("Creating cost requirement", () => { }); test("Requirement not met when not meeting the cost", () => { - const resource = createResource(ref(10)); const requirement = createCostRequirement(() => ({ resource, cost: 100, @@ -91,6 +90,67 @@ describe("Creating cost requirement", () => { })); expect(unref(requirement.requirementMet)).toBe(false); }); + + describe("canMaximize works correctly", () => { + test("Cost function cannot maximize", () => + expect( + unref( + createCostRequirement(() => ({ + resource, + cost: () => 10 + })).canMaximize + ) + ).toBe(false)); + test("Non-invertible formula cannot maximize", () => + expect( + unref( + createCostRequirement(() => ({ + resource, + cost: Formula.variable(resource).abs() + })).canMaximize + ) + ).toBe(false)); + test("Invertible formula can maximize if spendResources is false", () => + expect( + unref( + createCostRequirement(() => ({ + resource, + cost: Formula.variable(resource).lambertw(), + spendResources: false + })).canMaximize + ) + ).toBe(true)); + test("Invertible formula cannot maximize if spendResources is true", () => + expect( + unref( + createCostRequirement(() => ({ + resource, + cost: Formula.variable(resource).lambertw(), + spendResources: true + })).canMaximize + ) + ).toBe(false)); + test("Integrable formula can maximize if spendResources is false", () => + expect( + unref( + createCostRequirement(() => ({ + resource, + cost: Formula.variable(resource).pow(2), + spendResources: false + })).canMaximize + ) + ).toBe(true)); + test("Integrable formula can maximize if spendResources is true", () => + expect( + unref( + createCostRequirement(() => ({ + resource, + cost: Formula.variable(resource).pow(2), + spendResources: true + })).canMaximize + ) + ).toBe(true)); + }); }); describe("Creating visibility requirement", () => { From 6363062ce6ba18393112e11030d5290f9bdd0ad7 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 22 Apr 2023 18:04:01 -0500 Subject: [PATCH 046/134] Gate integration operations --- src/game/formulas/operations.ts | 111 ++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/src/game/formulas/operations.ts b/src/game/formulas/operations.ts index c6cbd05..0e39d58 100644 --- a/src/game/formulas/operations.ts +++ b/src/game/formulas/operations.ts @@ -17,6 +17,9 @@ export function invertNeg(value: DecimalSource, lhs: FormulaSource) { export function integrateNeg(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } return Formula.neg(lhs.getIntegralFormula(stack)); } throw new Error("Could not integrate due to no input being a variable"); @@ -37,9 +40,15 @@ export function invertAdd(value: DecimalSource, lhs: FormulaSource, rhs: Formula export function integrateAdd(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.times(rhs, lhs.innermostVariable ?? 0).add(x); } else if (hasVariable(rhs)) { + if (!rhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = rhs.getIntegralFormula(stack); return Formula.times(lhs, rhs.innermostVariable ?? 0).add(x); } @@ -52,9 +61,15 @@ export function integrateInnerAdd( rhs: FormulaSource ) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.add(x, rhs); } else if (hasVariable(rhs)) { + if (!rhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = rhs.getIntegralFormula(stack); return Formula.add(x, lhs); } @@ -72,9 +87,15 @@ export function invertSub(value: DecimalSource, lhs: FormulaSource, rhs: Formula export function integrateSub(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.sub(x, Formula.times(rhs, lhs.innermostVariable ?? 0)); } else if (hasVariable(rhs)) { + if (!rhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = rhs.getIntegralFormula(stack); return Formula.times(lhs, rhs.innermostVariable ?? 0).sub(x); } @@ -87,9 +108,15 @@ export function integrateInnerSub( rhs: FormulaSource ) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.sub(x, rhs); } else if (hasVariable(rhs)) { + if (!rhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = rhs.getIntegralFormula(stack); return Formula.sub(x, lhs); } @@ -107,9 +134,15 @@ export function invertMul(value: DecimalSource, lhs: FormulaSource, rhs: Formula export function integrateMul(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.times(x, rhs); } else if (hasVariable(rhs)) { + if (!rhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = rhs.getIntegralFormula(stack); return Formula.times(x, lhs); } @@ -140,9 +173,15 @@ export function invertDiv(value: DecimalSource, lhs: FormulaSource, rhs: Formula export function integrateDiv(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.div(x, rhs); } else if (hasVariable(rhs)) { + if (!rhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = rhs.getIntegralFormula(stack); return Formula.div(lhs, x); } @@ -171,6 +210,9 @@ export function invertRecip(value: DecimalSource, lhs: FormulaSource) { export function integrateRecip(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.ln(x); } @@ -198,6 +240,9 @@ function internalInvertIntegralLog10(value: DecimalSource, lhs: FormulaSource) { export function integrateLog10(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } return new Formula({ inputs: [lhs.getIntegralFormula(stack)], evaluate: internalIntegrateLog10, @@ -230,6 +275,9 @@ function internalInvertIntegralLog(value: DecimalSource, lhs: FormulaSource, rhs export function integrateLog(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } return new Formula({ inputs: [lhs.getIntegralFormula(stack), rhs], evaluate: internalIntegrateLog, @@ -260,6 +308,9 @@ function internalInvertIntegralLog2(value: DecimalSource, lhs: FormulaSource) { export function integrateLog2(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } return new Formula({ inputs: [lhs.getIntegralFormula(stack)], evaluate: internalIntegrateLog2, @@ -289,6 +340,9 @@ function internalInvertIntegralLn(value: DecimalSource, lhs: FormulaSource) { export function integrateLn(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } return new Formula({ inputs: [lhs.getIntegralFormula(stack)], evaluate: internalIntegrateLn, @@ -309,10 +363,16 @@ export function invertPow(value: DecimalSource, lhs: FormulaSource, rhs: Formula export function integratePow(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); const pow = Formula.add(rhs, 1); return Formula.pow(x, pow).div(pow); } else if (hasVariable(rhs)) { + if (!rhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = rhs.getIntegralFormula(stack); return Formula.pow(lhs, x).div(Formula.ln(lhs)); } @@ -328,6 +388,9 @@ export function invertPow10(value: DecimalSource, lhs: FormulaSource) { export function integratePow10(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.pow10(x).div(Formula.ln(10)); } @@ -345,9 +408,15 @@ export function invertPowBase(value: DecimalSource, lhs: FormulaSource, rhs: For export function integratePowBase(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.pow(rhs, x).div(Formula.ln(rhs)); } else if (hasVariable(rhs)) { + if (!rhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = rhs.getIntegralFormula(stack); const denominator = Formula.add(lhs, 1); return Formula.pow(x, denominator).div(denominator); @@ -366,6 +435,9 @@ export function invertRoot(value: DecimalSource, lhs: FormulaSource, rhs: Formul export function integrateRoot(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.pow(x, Formula.recip(rhs).add(1)).times(rhs).div(Formula.add(rhs, 1)); } @@ -381,6 +453,9 @@ export function invertExp(value: DecimalSource, lhs: FormulaSource) { export function integrateExp(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.exp(x); } @@ -512,6 +587,9 @@ export function invertSin(value: DecimalSource, lhs: FormulaSource) { export function integrateSin(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.cos(x).neg(); } @@ -527,6 +605,9 @@ export function invertCos(value: DecimalSource, lhs: FormulaSource) { export function integrateCos(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.sin(x); } @@ -542,6 +623,9 @@ export function invertTan(value: DecimalSource, lhs: FormulaSource) { export function integrateTan(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.cos(x).ln().neg(); } @@ -557,6 +641,9 @@ export function invertAsin(value: DecimalSource, lhs: FormulaSource) { export function integrateAsin(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.asin(x) .times(x) @@ -574,6 +661,9 @@ export function invertAcos(value: DecimalSource, lhs: FormulaSource) { export function integrateAcos(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.acos(x) .times(x) @@ -591,6 +681,9 @@ export function invertAtan(value: DecimalSource, lhs: FormulaSource) { export function integrateAtan(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.atan(x) .times(x) @@ -608,6 +701,9 @@ export function invertSinh(value: DecimalSource, lhs: FormulaSource) { export function integrateSinh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.cosh(x); } @@ -623,6 +719,9 @@ export function invertCosh(value: DecimalSource, lhs: FormulaSource) { export function integrateCosh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.sinh(x); } @@ -638,6 +737,9 @@ export function invertTanh(value: DecimalSource, lhs: FormulaSource) { export function integrateTanh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.cosh(x).ln(); } @@ -653,6 +755,9 @@ export function invertAsinh(value: DecimalSource, lhs: FormulaSource) { export function integrateAsinh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.asinh(x).times(x).sub(Formula.pow(x, 2).add(1).sqrt()); } @@ -668,6 +773,9 @@ export function invertAcosh(value: DecimalSource, lhs: FormulaSource) { export function integrateAcosh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.acosh(x) .times(x) @@ -685,6 +793,9 @@ export function invertAtanh(value: DecimalSource, lhs: FormulaSource) { export function integrateAtanh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { + if (!lhs.isIntegrable()) { + throw new Error("Could not integrate due to variable not being integrable"); + } const x = lhs.getIntegralFormula(stack); return Formula.atanh(x) .times(x) From 7a81157bcc91c67fbc88165e6654ab1d416bca86 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 22 Apr 2023 18:08:38 -0500 Subject: [PATCH 047/134] Fix remaining typing issues with formula typing change --- src/features/conversion.ts | 10 ++------ src/game/formulas/formulas.ts | 40 ++++++++---------------------- tests/features/conversions.test.ts | 6 ++--- 3 files changed, 15 insertions(+), 41 deletions(-) diff --git a/src/features/conversion.ts b/src/features/conversion.ts index c9c22c2..9f7d176 100644 --- a/src/features/conversion.ts +++ b/src/features/conversion.ts @@ -2,11 +2,7 @@ import type { OptionsFunc, Replace } from "features/feature"; import { setDefault } from "features/feature"; import type { Resource } from "features/resources/resource"; import Formula from "game/formulas/formulas"; -import { - IntegrableFormula, - InvertibleFormula, - InvertibleIntegralFormula -} from "game/formulas/types"; +import { InvertibleFormula, InvertibleIntegralFormula } from "game/formulas/types"; import type { BaseLayer } from "game/layers"; import type { DecimalSource } from "util/bignum"; import Decimal from "util/bignum"; @@ -23,9 +19,7 @@ export interface ConversionOptions { * The formula used to determine how much {@link gainResource} should be earned by this converting. * The passed value will be a Formula representing the {@link baseResource} variable. */ - formula: ( - variable: InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula - ) => InvertibleFormula; + formula: (variable: InvertibleIntegralFormula) => InvertibleFormula; /** * How much of the output resource the conversion can currently convert for. * Typically this will be set for you in a conversion constructor. diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index e8557b2..bf989b1 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -201,9 +201,7 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[ * Creates a formula that evaluates to a constant value. * @param value The constant value for this formula. */ - public static constant( - value: ProcessedComputable<DecimalSource> - ): InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula { + public static constant(value: ProcessedComputable<DecimalSource>): InvertibleIntegralFormula { return new Formula({ inputs: [value] }); } @@ -211,9 +209,7 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[ * Creates a formula that is marked as the variable for an outer formula. Typically used for inverting and integrating. * @param value The variable for this formula. */ - public static variable( - value: ProcessedComputable<DecimalSource> - ): InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula { + public static variable(value: ProcessedComputable<DecimalSource>): InvertibleIntegralFormula { return new Formula({ variable: value }); } @@ -228,9 +224,7 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[ public static step( value: FormulaSource, start: Computable<DecimalSource>, - formulaModifier: ( - value: InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula - ) => GenericFormula + formulaModifier: (value: InvertibleIntegralFormula) => GenericFormula ) { const lhsRef = ref<DecimalSource>(0); const formula = formulaModifier(Formula.variable(lhsRef)); @@ -271,12 +265,8 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[ public static if( value: FormulaSource, condition: Computable<boolean>, - formulaModifier: ( - value: InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula - ) => GenericFormula, - elseFormulaModifier?: ( - value: InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula - ) => GenericFormula + formulaModifier: (value: InvertibleIntegralFormula) => GenericFormula, + elseFormulaModifier?: (value: InvertibleIntegralFormula) => GenericFormula ) { const lhsRef = ref<DecimalSource>(0); const variable = Formula.variable(lhsRef); @@ -319,12 +309,8 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[ public static conditional( value: FormulaSource, condition: Computable<boolean>, - formulaModifier: ( - value: InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula - ) => GenericFormula, - elseFormulaModifier?: ( - value: InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula - ) => GenericFormula + formulaModifier: (value: InvertibleIntegralFormula) => GenericFormula, + elseFormulaModifier?: (value: InvertibleIntegralFormula) => GenericFormula ) { return Formula.if(value, condition, formulaModifier, elseFormulaModifier); } @@ -872,26 +858,20 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[ public step( start: Computable<DecimalSource>, - formulaModifier: ( - value: InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula - ) => GenericFormula + formulaModifier: (value: InvertibleIntegralFormula) => GenericFormula ) { return Formula.step(this, start, formulaModifier); } public if( condition: Computable<boolean>, - formulaModifier: ( - value: InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula - ) => GenericFormula + formulaModifier: (value: InvertibleIntegralFormula) => GenericFormula ) { return Formula.if(this, condition, formulaModifier); } public conditional( condition: Computable<boolean>, - formulaModifier: ( - value: InvertibleFormula & IntegrableFormula & InvertibleIntegralFormula - ) => GenericFormula + formulaModifier: (value: InvertibleIntegralFormula) => GenericFormula ) { return Formula.if(this, condition, formulaModifier); } diff --git a/tests/features/conversions.test.ts b/tests/features/conversions.test.ts index dc89ac0..09d6569 100644 --- a/tests/features/conversions.test.ts +++ b/tests/features/conversions.test.ts @@ -5,7 +5,7 @@ import { setupPassiveGeneration } from "features/conversion"; import { createResource, Resource } from "features/resources/resource"; -import { GenericFormula } from "game/formulas/types"; +import { InvertibleIntegralFormula } from "game/formulas/types"; import { createLayer, GenericLayer } from "game/layers"; import Decimal from "util/bignum"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; @@ -15,7 +15,7 @@ import "../utils"; describe("Creating conversion", () => { let baseResource: Resource; let gainResource: Resource; - let formula: (x: GenericFormula) => GenericFormula; + let formula: (x: InvertibleIntegralFormula) => InvertibleIntegralFormula; beforeEach(() => { baseResource = createResource(ref(40)); gainResource = createResource(ref(1)); @@ -449,7 +449,7 @@ describe("Creating conversion", () => { describe("Passive generation", () => { let baseResource: Resource; let gainResource: Resource; - let formula: (x: GenericFormula) => GenericFormula; + let formula: (x: InvertibleIntegralFormula) => InvertibleIntegralFormula; let conversion: GenericConversion; let layer: GenericLayer; beforeEach(() => { From 6e443ace0d5b91ecf125c74f2debf67bc0799e32 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 22 Apr 2023 18:53:50 -0500 Subject: [PATCH 048/134] Show action tooltips when selected --- src/features/boards/BoardNode.vue | 13 ++++++++++--- src/features/boards/board.ts | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/features/boards/BoardNode.vue b/src/features/boards/BoardNode.vue index 1b3298a..47ca3fe 100644 --- a/src/features/boards/BoardNode.vue +++ b/src/features/boards/BoardNode.vue @@ -138,10 +138,10 @@ <script setup lang="ts"> import themes from "data/themes"; import type { BoardNode, GenericBoardNodeAction, GenericNodeType } from "features/boards/board"; -import { ProgressDisplay, getNodeProperty, Shape } from "features/boards/board"; +import { ProgressDisplay, Shape, getNodeProperty } from "features/boards/board"; import { isVisible } from "features/feature"; import settings from "game/settings"; -import { computed, ref, toRefs, unref, watch } from "vue"; +import { computed, toRefs, unref, watch } from "vue"; import BoardNodeAction from "./BoardNodeAction.vue"; const sqrtTwo = Math.sqrt(2); @@ -204,7 +204,14 @@ const position = computed(() => { const shape = computed(() => getNodeProperty(props.nodeType.value.shape, unref(props.node))); const title = computed(() => getNodeProperty(props.nodeType.value.title, unref(props.node))); -const label = computed(() => getNodeProperty(props.nodeType.value.label, unref(props.node))); +const label = computed( + () => + (isSelected.value + ? unref(props.selectedAction) && + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + getNodeProperty(unref(props.selectedAction)!.tooltip, unref(props.node)) + : null) ?? getNodeProperty(props.nodeType.value.label, unref(props.node)) +); const size = computed(() => getNodeProperty(props.nodeType.value.size, unref(props.node))); const progress = computed( () => getNodeProperty(props.nodeType.value.progress, unref(props.node)) ?? 0 diff --git a/src/features/boards/board.ts b/src/features/boards/board.ts index e26be13..961d517 100644 --- a/src/features/boards/board.ts +++ b/src/features/boards/board.ts @@ -178,7 +178,7 @@ export interface BoardNodeActionOptions { /** The fill color of the action. */ fillColor?: NodeComputable<string>; /** The tooltip text to display for the action. */ - tooltip: NodeComputable<string>; + tooltip: NodeComputable<NodeLabel>; /** An array of board node links associated with the action. They appear when the action is focused. */ links?: NodeComputable<BoardNodeLink[]>; /** A function that is called when the action is clicked. */ From a59f77aa6db39b9b61baa5a5b9c7396025ba5fa7 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 22 Apr 2023 19:21:16 -0500 Subject: [PATCH 049/134] Support classes and styles to be defined by node types --- src/features/boards/BoardNode.vue | 9 ++++++--- src/features/boards/board.ts | 8 ++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/features/boards/BoardNode.vue b/src/features/boards/BoardNode.vue index 47ca3fe..a2300b1 100644 --- a/src/features/boards/BoardNode.vue +++ b/src/features/boards/BoardNode.vue @@ -1,8 +1,9 @@ <template> + <!-- Ugly casting to prevent TS compiler error about style because vue doesn't think it supports arrays when it does --> <g class="boardnode" - :class="{ [node.type]: true, isSelected, isDraggable }" - :style="{ opacity: dragging?.id === node.id && hasDragged ? 0.5 : 1 }" + :class="{ [node.type]: true, isSelected, isDraggable, ...classes }" + :style="[{ opacity: dragging?.id === node.id && hasDragged ? 0.5 : 1 }, style ?? []] as unknown as (string | CSSProperties)" :transform="`translate(${position.x},${position.y})${isSelected ? ' scale(1.2)' : ''}`" > <BoardNodeAction @@ -141,7 +142,7 @@ import type { BoardNode, GenericBoardNodeAction, GenericNodeType } from "feature import { ProgressDisplay, Shape, getNodeProperty } from "features/boards/board"; import { isVisible } from "features/feature"; import settings from "game/settings"; -import { computed, toRefs, unref, watch } from "vue"; +import { CSSProperties, computed, toRefs, unref, watch } from "vue"; import BoardNodeAction from "./BoardNodeAction.vue"; const sqrtTwo = Math.sqrt(2); @@ -244,6 +245,8 @@ const canAccept = computed( unref(props.hasDragged) && getNodeProperty(props.nodeType.value.canAccept, unref(props.node)) ); +const style = computed(() => getNodeProperty(props.nodeType.value.style, unref(props.node))); +const classes = computed(() => getNodeProperty(props.nodeType.value.classes, unref(props.node))); function mouseDown(e: MouseEvent | TouchEvent) { emit("mouseDown", e, props.node.value.id, isDraggable.value); diff --git a/src/features/boards/board.ts b/src/features/boards/board.ts index 961d517..a86b5ae 100644 --- a/src/features/boards/board.ts +++ b/src/features/boards/board.ts @@ -92,6 +92,10 @@ export interface NodeTypeOptions { label?: NodeComputable<NodeLabel | null>; /** The size of the node - diameter for circles, width and height for squares. */ size: NodeComputable<number>; + /** CSS to apply to this node. */ + style?: NodeComputable<StyleValue>; + /** Dictionary of CSS classes to apply to this node. */ + classes?: NodeComputable<Record<string, boolean>>; /** Whether the node is draggable or not. */ draggable?: NodeComputable<boolean>; /** The shape of the node. */ @@ -137,6 +141,8 @@ export type NodeType<T extends NodeTypeOptions> = Replace< title: GetComputableType<T["title"]>; label: GetComputableType<T["label"]>; size: GetComputableTypeWithDefault<T["size"], 50>; + style: GetComputableType<T["style"]>; + classes: GetComputableType<T["classes"]>; draggable: GetComputableTypeWithDefault<T["draggable"], false>; shape: GetComputableTypeWithDefault<T["shape"], Shape.Circle>; canAccept: GetComputableTypeWithDefault<T["canAccept"], false>; @@ -378,6 +384,8 @@ export function createBoard<T extends BoardOptions>( processComputable(nodeType as NodeTypeOptions, "label"); processComputable(nodeType as NodeTypeOptions, "size"); setDefault(nodeType, "size", 50); + processComputable(nodeType as NodeTypeOptions, "style"); + processComputable(nodeType as NodeTypeOptions, "classes"); processComputable(nodeType as NodeTypeOptions, "draggable"); setDefault(nodeType, "draggable", false); processComputable(nodeType as NodeTypeOptions, "shape"); From d5a7ba4af2b33d2e550c36619539136a4a3dc554 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 22 Apr 2023 19:54:12 -0500 Subject: [PATCH 050/134] Fixed render issue with createFormulaPreview --- src/data/common.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/data/common.tsx b/src/data/common.tsx index ab33aa6..1fdfd61 100644 --- a/src/data/common.tsx +++ b/src/data/common.tsx @@ -462,13 +462,13 @@ export function createFormulaPreview( formula: GenericFormula, showPreview: Computable<boolean>, previewAmount: Computable<DecimalSource> = 1 -): ComputedRef<CoercableComponent> { +) { const processedShowPreview = convertComputable(showPreview); const processedPreviewAmount = convertComputable(previewAmount); if (!formula.hasVariable()) { throw new Error("Cannot create formula preview if the formula does not have a variable"); } - return computed(() => { + return jsx(() => { if (unref(processedShowPreview)) { const curr = formatSmall(formula.evaluate()); const preview = formatSmall( @@ -479,16 +479,16 @@ export function createFormulaPreview( ) ) ); - return jsx(() => ( + return ( <> <b> <i> - {curr}→{preview} + {curr} → {preview} </i> </b> </> - )); + ); } - return formatSmall(formula.evaluate()); + return <>{formatSmall(formula.evaluate())}</>; }); } From 693c34f585513ce59ac7157c4b97478b1e6c6fe1 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 22 Apr 2023 20:50:24 -0500 Subject: [PATCH 051/134] Fix action not being marked selected --- src/features/boards/BoardNode.vue | 5 +++-- src/features/boards/BoardNodeAction.vue | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/features/boards/BoardNode.vue b/src/features/boards/BoardNode.vue index a2300b1..7adc9ca 100644 --- a/src/features/boards/BoardNode.vue +++ b/src/features/boards/BoardNode.vue @@ -11,6 +11,7 @@ :is-selected="isSelected" :node="node" :node-type="nodeType" + :selected-action="selectedAction" /> <g @@ -157,8 +158,8 @@ const _props = defineProps<{ }; hasDragged?: boolean; receivingNode?: boolean; - selectedNode?: BoardNode | null; - selectedAction?: GenericBoardNodeAction | null; + selectedNode: BoardNode | null; + selectedAction: GenericBoardNodeAction | null; }>(); const props = toRefs(_props); const emit = defineEmits<{ diff --git a/src/features/boards/BoardNodeAction.vue b/src/features/boards/BoardNodeAction.vue index c67a802..3bf715f 100644 --- a/src/features/boards/BoardNodeAction.vue +++ b/src/features/boards/BoardNodeAction.vue @@ -48,7 +48,7 @@ const _props = defineProps<{ nodeType: GenericNodeType; actions?: GenericBoardNodeAction[]; isSelected: boolean; - selectedAction?: GenericBoardNodeAction; + selectedAction: GenericBoardNodeAction | null; }>(); const props = toRefs(_props); From 21f49756dc9232b42b90ba63b274d2f0c29d64e1 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 22 Apr 2023 22:59:28 -0500 Subject: [PATCH 052/134] Move selecting action logic inside the board component --- src/features/boards/Board.vue | 10 ++++++++++ src/features/boards/BoardNode.vue | 2 ++ src/features/boards/BoardNodeAction.vue | 13 +++++++------ src/features/boards/board.ts | 2 +- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/features/boards/Board.vue b/src/features/boards/Board.vue index 2605aaa..7d50aa4 100644 --- a/src/features/boards/Board.vue +++ b/src/features/boards/Board.vue @@ -44,6 +44,7 @@ :selectedAction="unref(selectedAction)" @mouseDown="mouseDown" @endDragging="endDragging" + @clickAction="actionId => clickAction(node, actionId)" /> </g> </transition-group> @@ -240,6 +241,15 @@ function endDragging(nodeID: number | null) { props.state.value.selectedAction = null; } } + +function clickAction(node: BoardNode, actionId: string) { + if (props.state.value.selectedAction === actionId) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + unref(props.selectedAction)!.onClick(unref(props.selectedNode)!); + } else { + props.state.value = { ...props.state.value, selectedAction: actionId }; + } +} </script> <style> diff --git a/src/features/boards/BoardNode.vue b/src/features/boards/BoardNode.vue index 7adc9ca..df5c135 100644 --- a/src/features/boards/BoardNode.vue +++ b/src/features/boards/BoardNode.vue @@ -12,6 +12,7 @@ :node="node" :node-type="nodeType" :selected-action="selectedAction" + @click-action="actionId => emit('clickAction', actionId)" /> <g @@ -165,6 +166,7 @@ const props = toRefs(_props); const emit = defineEmits<{ (e: "mouseDown", event: MouseEvent | TouchEvent, node: number, isDraggable: boolean): void; (e: "endDragging", node: number): void; + (e: "clickAction", actionId: string): void; }>(); const isSelected = computed(() => unref(props.selectedNode) === unref(props.node)); diff --git a/src/features/boards/BoardNodeAction.vue b/src/features/boards/BoardNodeAction.vue index 3bf715f..95adeee 100644 --- a/src/features/boards/BoardNodeAction.vue +++ b/src/features/boards/BoardNodeAction.vue @@ -52,6 +52,10 @@ const _props = defineProps<{ }>(); const props = toRefs(_props); +const emit = defineEmits<{ + (e: "clickAction", actionId: string): void; +}>(); + const size = computed(() => getNodeProperty(props.nodeType.value.size, unref(props.node))); const outlineColor = computed( () => @@ -68,12 +72,9 @@ const actionDistance = computed(() => ); function performAction(e: MouseEvent | TouchEvent, action: GenericBoardNodeAction) { - // If the onClick function made this action selected, - // don't propagate the event (which will deselect everything) - if (action.onClick(unref(props.node)) || unref(props.selectedAction)?.id === action.id) { - e.preventDefault(); - e.stopPropagation(); - } + emit("clickAction", action.id); + e.preventDefault(); + e.stopPropagation(); } function actionMouseUp(e: MouseEvent | TouchEvent, action: GenericBoardNodeAction) { diff --git a/src/features/boards/board.ts b/src/features/boards/board.ts index a86b5ae..c5f21b4 100644 --- a/src/features/boards/board.ts +++ b/src/features/boards/board.ts @@ -188,7 +188,7 @@ export interface BoardNodeActionOptions { /** An array of board node links associated with the action. They appear when the action is focused. */ links?: NodeComputable<BoardNodeLink[]>; /** A function that is called when the action is clicked. */ - onClick: (node: BoardNode) => boolean | undefined; + onClick: (node: BoardNode) => void; } /** From 962e789e1d2378d4ddd5d777366b08d2122f5f21 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 22 Apr 2023 23:13:26 -0500 Subject: [PATCH 053/134] Added way to customize board action confirmation label --- src/features/boards/BoardNode.vue | 15 ++++++++++++--- src/features/boards/BoardNodeAction.vue | 1 - src/features/boards/board.ts | 6 ++++++ 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/features/boards/BoardNode.vue b/src/features/boards/BoardNode.vue index df5c135..e29b4eb 100644 --- a/src/features/boards/BoardNode.vue +++ b/src/features/boards/BoardNode.vue @@ -117,7 +117,7 @@ <transition name="fade" appear> <g v-if="label"> <text - :fill="label.color || titleColor" + :fill="label.color ?? titleColor" class="node-title" :class="{ pulsing: label.pulsing }" :y="-size - 20" @@ -129,10 +129,11 @@ <transition name="fade" appear> <text v-if="isSelected && selectedAction" - :fill="titleColor" + :fill="confirmationLabel.color ?? titleColor" class="node-title" + :class="{ pulsing: confirmationLabel.pulsing }" :y="size + 75" - >Tap again to confirm</text + >{{ confirmationLabel.text }}</text > </transition> </g> @@ -216,6 +217,14 @@ const label = computed( getNodeProperty(unref(props.selectedAction)!.tooltip, unref(props.node)) : null) ?? getNodeProperty(props.nodeType.value.label, unref(props.node)) ); +const confirmationLabel = computed(() => + getNodeProperty( + unref(props.selectedAction)?.confirmationLabel ?? { + text: "Tap again to confirm" + }, + unref(props.node) + ) +); const size = computed(() => getNodeProperty(props.nodeType.value.size, unref(props.node))); const progress = computed( () => getNodeProperty(props.nodeType.value.progress, unref(props.node)) ?? 0 diff --git a/src/features/boards/BoardNodeAction.vue b/src/features/boards/BoardNodeAction.vue index 95adeee..c65727a 100644 --- a/src/features/boards/BoardNodeAction.vue +++ b/src/features/boards/BoardNodeAction.vue @@ -1,7 +1,6 @@ <template> <transition name="actions" appear> <g v-if="isSelected && actions"> - <!-- TODO move to separate file --> <g v-for="(action, index) in actions" :key="action.id" diff --git a/src/features/boards/board.ts b/src/features/boards/board.ts index c5f21b4..a972f9f 100644 --- a/src/features/boards/board.ts +++ b/src/features/boards/board.ts @@ -185,6 +185,8 @@ export interface BoardNodeActionOptions { fillColor?: NodeComputable<string>; /** The tooltip text to display for the action. */ tooltip: NodeComputable<NodeLabel>; + /** The confirmation label that appears under the action. */ + confirmationLabel?: NodeComputable<NodeLabel>; /** An array of board node links associated with the action. They appear when the action is focused. */ links?: NodeComputable<BoardNodeLink[]>; /** A function that is called when the action is clicked. */ @@ -206,6 +208,7 @@ export type BoardNodeAction<T extends BoardNodeActionOptions> = Replace< icon: GetComputableType<T["icon"]>; fillColor: GetComputableType<T["fillColor"]>; tooltip: GetComputableType<T["tooltip"]>; + confirmationLabel: GetComputableTypeWithDefault<T["confirmationLabel"], NodeLabel>; links: GetComputableType<T["links"]>; } >; @@ -215,6 +218,7 @@ export type GenericBoardNodeAction = Replace< BoardNodeAction<BoardNodeActionOptions>, { visibility: NodeComputable<Visibility | boolean>; + confirmationLabel: NodeComputable<NodeLabel>; } >; @@ -416,6 +420,8 @@ export function createBoard<T extends BoardOptions>( processComputable(action, "icon"); processComputable(action, "fillColor"); processComputable(action, "tooltip"); + processComputable(action, "confirmationLabel"); + setDefault(action, "confirmationLabel", { text: "Tap again to confirm" }); processComputable(action, "links"); } } From 9707ceb66d371230938468e0e0750c3326d53a74 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 22 Apr 2023 23:20:23 -0500 Subject: [PATCH 054/134] Fix build issue --- src/features/boards/Board.vue | 2 +- src/features/boards/BoardNode.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/features/boards/Board.vue b/src/features/boards/Board.vue index 7d50aa4..4212988 100644 --- a/src/features/boards/Board.vue +++ b/src/features/boards/Board.vue @@ -44,7 +44,7 @@ :selectedAction="unref(selectedAction)" @mouseDown="mouseDown" @endDragging="endDragging" - @clickAction="actionId => clickAction(node, actionId)" + @clickAction="(actionId: string) => clickAction(node, actionId)" /> </g> </transition-group> diff --git a/src/features/boards/BoardNode.vue b/src/features/boards/BoardNode.vue index e29b4eb..ffc2cb6 100644 --- a/src/features/boards/BoardNode.vue +++ b/src/features/boards/BoardNode.vue @@ -12,7 +12,7 @@ :node="node" :node-type="nodeType" :selected-action="selectedAction" - @click-action="actionId => emit('clickAction', actionId)" + @click-action="(actionId: string) => emit('clickAction', actionId)" /> <g From 2999c971cf3108b975022108e1ce3fc7bfc6eefa Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 23 Apr 2023 00:02:53 -0500 Subject: [PATCH 055/134] Expose current dragging and receiving nodes --- src/features/boards/Board.vue | 103 +++++++++++++++--------------- src/features/boards/BoardNode.vue | 12 ++-- src/features/boards/board.ts | 25 +++++++- 3 files changed, 82 insertions(+), 58 deletions(-) diff --git a/src/features/boards/Board.vue b/src/features/boards/Board.vue index 4212988..ef613b2 100644 --- a/src/features/boards/Board.vue +++ b/src/features/boards/Board.vue @@ -17,9 +17,9 @@ @touchmove="drag" @mousedown="(e: MouseEvent) => mouseDown(e)" @touchstart="(e: TouchEvent) => mouseDown(e)" - @mouseup="() => endDragging(dragging)" - @touchend.passive="() => endDragging(dragging)" - @mouseleave="() => endDragging(dragging)" + @mouseup="() => endDragging(unref(draggingNode))" + @touchend.passive="() => endDragging(unref(draggingNode))" + @mouseleave="() => endDragging(unref(draggingNode))" > <svg class="stage" width="100%" height="100%"> <g class="g1"> @@ -36,10 +36,10 @@ <BoardNodeVue :node="node" :nodeType="types[node.type]" - :dragging="draggingNode" - :dragged="draggingNode === node ? dragged : undefined" + :dragging="unref(draggingNode)" + :dragged="unref(draggingNode) === node ? dragged : undefined" :hasDragged="hasDragged" - :receivingNode="receivingNode?.id === node.id" + :receivingNode="unref(receivingNode)?.id === node.id" :selectedNode="unref(selectedNode)" :selectedAction="unref(selectedAction)" @mouseDown="mouseDown" @@ -65,7 +65,7 @@ import { getNodeProperty } from "features/boards/board"; import type { StyleValue } from "features/feature"; import { Visibility, isVisible } from "features/feature"; import type { ProcessedComputable } from "util/computed"; -import { Ref, computed, ref, toRefs, unref } from "vue"; +import { Ref, computed, ref, toRefs, unref, watchEffect } from "vue"; import BoardLinkVue from "./BoardLink.vue"; import BoardNodeVue from "./BoardNode.vue"; @@ -81,32 +81,31 @@ const _props = defineProps<{ links: Ref<BoardNodeLink[] | null>; selectedAction: Ref<GenericBoardNodeAction | null>; selectedNode: Ref<BoardNode | null>; + draggingNode: Ref<BoardNode | null>; + receivingNode: Ref<BoardNode | null>; mousePosition: Ref<{ x: number; y: number } | null>; + setReceivingNode: (node: BoardNode | null) => void; + setDraggingNode: (node: BoardNode | null) => void; }>(); const props = toRefs(_props); const lastMousePosition = ref({ x: 0, y: 0 }); const dragged = ref({ x: 0, y: 0 }); -const dragging = ref<number | null>(null); const hasDragged = ref(false); // eslint-disable-next-line @typescript-eslint/no-explicit-any const stage = ref<any>(null); -const draggingNode = computed(() => - dragging.value == null ? undefined : props.nodes.value.find(node => node.id === dragging.value) -); - const sortedNodes = computed(() => { const nodes = props.nodes.value.slice(); - if (draggingNode.value) { - const node = nodes.splice(nodes.indexOf(draggingNode.value), 1)[0]; + if (props.draggingNode.value) { + const node = nodes.splice(nodes.indexOf(props.draggingNode.value), 1)[0]; nodes.push(node); } return nodes; }); -const receivingNode = computed(() => { - const node = draggingNode.value; +watchEffect(() => { + const node = props.draggingNode.value; if (node == null) { return null; } @@ -116,26 +115,30 @@ const receivingNode = computed(() => { y: node.position.y + dragged.value.y }; let smallestDistance = Number.MAX_VALUE; - return props.nodes.value.reduce((smallest: BoardNode | null, curr: BoardNode) => { - if (curr.id === node.id) { - return smallest; - } - const nodeType = props.types.value[curr.type]; - const canAccept = getNodeProperty(nodeType.canAccept, curr); - if (!canAccept) { - return smallest; - } - const distanceSquared = - Math.pow(position.x - curr.position.x, 2) + Math.pow(position.y - curr.position.y, 2); - let size = getNodeProperty(nodeType.size, curr); - if (distanceSquared > smallestDistance || distanceSquared > size * size) { - return smallest; - } + props.setReceivingNode.value( + props.nodes.value.reduce((smallest: BoardNode | null, curr: BoardNode) => { + if (curr.id === node.id) { + return smallest; + } + const nodeType = props.types.value[curr.type]; + const canAccept = getNodeProperty(nodeType.canAccept, curr); + if (!canAccept) { + return smallest; + } - smallestDistance = distanceSquared; - return curr; - }, null); + const distanceSquared = + Math.pow(position.x - curr.position.x, 2) + + Math.pow(position.y - curr.position.y, 2); + let size = getNodeProperty(nodeType.size, curr); + if (distanceSquared > smallestDistance || distanceSquared > size * size) { + return smallest; + } + + smallestDistance = distanceSquared; + return curr; + }, null) + ); }); // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -144,8 +147,8 @@ function onInit(panzoomInstance: any) { panzoomInstance.moveTo(stage.value.$el.clientWidth / 2, stage.value.$el.clientHeight / 2); } -function mouseDown(e: MouseEvent | TouchEvent, nodeID: number | null = null, draggable = false) { - if (dragging.value == null) { +function mouseDown(e: MouseEvent | TouchEvent, node: BoardNode | null = null, draggable = false) { + if (props.draggingNode.value == null) { e.preventDefault(); e.stopPropagation(); @@ -169,10 +172,10 @@ function mouseDown(e: MouseEvent | TouchEvent, nodeID: number | null = null, dra hasDragged.value = false; if (draggable) { - dragging.value = nodeID; + props.setDraggingNode.value(node); } } - if (nodeID != null) { + if (node != null) { props.state.value.selectedNode = null; props.state.value.selectedAction = null; } @@ -187,7 +190,7 @@ function drag(e: MouseEvent | TouchEvent) { clientX = e.touches[0].clientX; clientY = e.touches[0].clientY; } else { - endDragging(dragging.value); + endDragging(props.draggingNode.value); props.mousePosition.value = null; return; } @@ -214,28 +217,28 @@ function drag(e: MouseEvent | TouchEvent) { hasDragged.value = true; } - if (dragging.value != null) { + if (props.draggingNode.value != null) { e.preventDefault(); e.stopPropagation(); } } -function endDragging(nodeID: number | null) { - if (dragging.value != null && dragging.value === nodeID && draggingNode.value != null) { - draggingNode.value.position.x += Math.round(dragged.value.x / 25) * 25; - draggingNode.value.position.y += Math.round(dragged.value.y / 25) * 25; +function endDragging(node: BoardNode | null) { + if (props.draggingNode.value != null && props.draggingNode.value === node) { + props.draggingNode.value.position.x += Math.round(dragged.value.x / 25) * 25; + props.draggingNode.value.position.y += Math.round(dragged.value.y / 25) * 25; const nodes = props.nodes.value; - nodes.push(nodes.splice(nodes.indexOf(draggingNode.value), 1)[0]); + nodes.push(nodes.splice(nodes.indexOf(props.draggingNode.value), 1)[0]); - if (receivingNode.value) { - props.types.value[receivingNode.value.type].onDrop?.( - receivingNode.value, - draggingNode.value + if (props.receivingNode.value) { + props.types.value[props.receivingNode.value.type].onDrop?.( + props.receivingNode.value, + props.draggingNode.value ); } - dragging.value = null; + props.setDraggingNode.value(null); } else if (!hasDragged.value) { props.state.value.selectedNode = null; props.state.value.selectedAction = null; diff --git a/src/features/boards/BoardNode.vue b/src/features/boards/BoardNode.vue index ffc2cb6..e5e292d 100644 --- a/src/features/boards/BoardNode.vue +++ b/src/features/boards/BoardNode.vue @@ -153,7 +153,7 @@ const sqrtTwo = Math.sqrt(2); const _props = defineProps<{ node: BoardNode; nodeType: GenericNodeType; - dragging?: BoardNode; + dragging: BoardNode | null; dragged?: { x: number; y: number; @@ -165,8 +165,8 @@ const _props = defineProps<{ }>(); const props = toRefs(_props); const emit = defineEmits<{ - (e: "mouseDown", event: MouseEvent | TouchEvent, node: number, isDraggable: boolean): void; - (e: "endDragging", node: number): void; + (e: "mouseDown", event: MouseEvent | TouchEvent, node: BoardNode, isDraggable: boolean): void; + (e: "endDragging", node: BoardNode): void; (e: "clickAction", actionId: string): void; }>(); @@ -178,7 +178,7 @@ const isDraggable = computed(() => watch(isDraggable, value => { const node = unref(props.node); if (unref(props.dragging) === node && !value) { - emit("endDragging", node.id); + emit("endDragging", node); } }); @@ -261,12 +261,12 @@ const style = computed(() => getNodeProperty(props.nodeType.value.style, unref(p const classes = computed(() => getNodeProperty(props.nodeType.value.classes, unref(props.node))); function mouseDown(e: MouseEvent | TouchEvent) { - emit("mouseDown", e, props.node.value.id, isDraggable.value); + emit("mouseDown", e, props.node.value, isDraggable.value); } function mouseUp(e: MouseEvent | TouchEvent) { if (!props.hasDragged?.value) { - emit("endDragging", props.node.value.id); + emit("endDragging", props.node.value); props.nodeType.value.onClick?.(props.node.value); e.stopPropagation(); } diff --git a/src/features/boards/board.ts b/src/features/boards/board.ts index a972f9f..d6ac58a 100644 --- a/src/features/boards/board.ts +++ b/src/features/boards/board.ts @@ -258,6 +258,10 @@ export interface BaseBoard { selectedNode: Ref<BoardNode | null>; /** The currently selected action, if any. */ selectedAction: Ref<GenericBoardNodeAction | null>; + /** The currently being dragged node, if any. */ + draggingNode: Ref<BoardNode | null>; + /** If dragging a node, the node it's currently being hovered over, if any. */ + receivingNode: Ref<BoardNode | null>; /** The current mouse position, if over the board. */ mousePosition: Ref<{ x: number; y: number } | null>; /** A symbol that helps identify features of the same type. */ @@ -372,6 +376,8 @@ export function createBoard<T extends BoardOptions>( return null; }); } + board.draggingNode = ref(null); + board.receivingNode = ref(null); processComputable(board as T, "visibility"); setDefault(board, "visibility", Visibility.Visible); processComputable(board as T, "width"); @@ -427,6 +433,15 @@ export function createBoard<T extends BoardOptions>( } } + function setDraggingNode(node: BoardNode | null) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + board.draggingNode!.value = node; + } + function setReceivingNode(node: BoardNode | null) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + board.receivingNode!.value = node; + } + board[GatherProps] = function (this: GenericBoard) { const { nodes, @@ -440,7 +455,9 @@ export function createBoard<T extends BoardOptions>( links, selectedAction, selectedNode, - mousePosition + mousePosition, + draggingNode, + receivingNode } = this; return { nodes, @@ -454,7 +471,11 @@ export function createBoard<T extends BoardOptions>( links, selectedAction, selectedNode, - mousePosition + mousePosition, + draggingNode, + receivingNode, + setDraggingNode, + setReceivingNode }; }; From 3808f299ec2882fae8e20f01a78bb46b9c9afdc6 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 23 Apr 2023 00:37:46 -0500 Subject: [PATCH 056/134] Fix canAccept not passing in otherNode --- src/features/boards/Board.vue | 8 +++++--- src/features/boards/BoardNode.vue | 4 ++-- src/features/boards/board.ts | 18 +++++++++++++----- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/features/boards/Board.vue b/src/features/boards/Board.vue index ef613b2..00799fe 100644 --- a/src/features/boards/Board.vue +++ b/src/features/boards/Board.vue @@ -122,7 +122,7 @@ watchEffect(() => { return smallest; } const nodeType = props.types.value[curr.type]; - const canAccept = getNodeProperty(nodeType.canAccept, curr); + const canAccept = getNodeProperty(nodeType.canAccept, curr, node); if (!canAccept) { return smallest; } @@ -225,8 +225,10 @@ function drag(e: MouseEvent | TouchEvent) { function endDragging(node: BoardNode | null) { if (props.draggingNode.value != null && props.draggingNode.value === node) { - props.draggingNode.value.position.x += Math.round(dragged.value.x / 25) * 25; - props.draggingNode.value.position.y += Math.round(dragged.value.y / 25) * 25; + if (props.receivingNode.value == null) { + props.draggingNode.value.position.x += Math.round(dragged.value.x / 25) * 25; + props.draggingNode.value.position.y += Math.round(dragged.value.y / 25) * 25; + } const nodes = props.nodes.value; nodes.push(nodes.splice(nodes.indexOf(props.draggingNode.value), 1)[0]); diff --git a/src/features/boards/BoardNode.vue b/src/features/boards/BoardNode.vue index e5e292d..b40357a 100644 --- a/src/features/boards/BoardNode.vue +++ b/src/features/boards/BoardNode.vue @@ -253,9 +253,9 @@ const progressDisplay = computed(() => ); const canAccept = computed( () => - unref(props.dragging) != null && + props.dragging.value != null && unref(props.hasDragged) && - getNodeProperty(props.nodeType.value.canAccept, unref(props.node)) + getNodeProperty(props.nodeType.value.canAccept, unref(props.node), props.dragging.value) ); const style = computed(() => getNodeProperty(props.nodeType.value.style, unref(props.node))); const classes = computed(() => getNodeProperty(props.nodeType.value.classes, unref(props.node))); diff --git a/src/features/boards/board.ts b/src/features/boards/board.ts index d6ac58a..3754591 100644 --- a/src/features/boards/board.ts +++ b/src/features/boards/board.ts @@ -33,7 +33,9 @@ export const BoardType = Symbol("Board"); /** * A type representing a computable value for a node on the board. Used for node types to return different values based on the given node and the state of the board. */ -export type NodeComputable<T> = Computable<T> | ((node: BoardNode) => T); +export type NodeComputable<T, S extends unknown[] = []> = + | Computable<T> + | ((node: BoardNode, ...args: S) => T); /** Ways to display progress of an action with a duration. */ export enum ProgressDisplay { @@ -101,7 +103,7 @@ export interface NodeTypeOptions { /** The shape of the node. */ shape: NodeComputable<Shape>; /** Whether the node can accept another node being dropped upon it. */ - canAccept?: boolean | Ref<boolean> | ((node: BoardNode, otherNode: BoardNode) => boolean); + canAccept?: NodeComputable<boolean, [BoardNode]>; /** The progress value of the node. */ progress?: NodeComputable<number>; /** How the progress should be displayed on the node. */ @@ -164,7 +166,7 @@ export type GenericNodeType = Replace< size: NodeComputable<number>; draggable: NodeComputable<boolean>; shape: NodeComputable<Shape>; - canAccept: NodeComputable<boolean>; + canAccept: NodeComputable<boolean, [BoardNode]>; progressDisplay: NodeComputable<ProgressDisplay>; progressColor: NodeComputable<string>; actionDistance: NodeComputable<number>; @@ -490,8 +492,14 @@ export function createBoard<T extends BoardOptions>( * @param property The property to find the value of * @param node The node to get the property of */ -export function getNodeProperty<T>(property: NodeComputable<T>, node: BoardNode): T { - return isFunction<T, [BoardNode], Computable<T>>(property) ? property(node) : unref(property); +export function getNodeProperty<T, S extends unknown[]>( + property: NodeComputable<T, S>, + node: BoardNode, + ...args: S +): T { + return isFunction<T, [BoardNode, ...S], Computable<T>>(property) + ? property(node, ...args) + : unref(property); } /** From c08ea9ce85ce0664f546f34ae3bde38c57331b76 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 23 Apr 2023 00:38:06 -0500 Subject: [PATCH 057/134] Make selectedNode and selectedAction writable --- src/features/boards/board.ts | 54 +++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/src/features/boards/board.ts b/src/features/boards/board.ts index 3754591..0e1e71b 100644 --- a/src/features/boards/board.ts +++ b/src/features/boards/board.ts @@ -21,7 +21,7 @@ import type { } from "util/computed"; import { processComputable } from "util/computed"; import { createLazyProxy } from "util/proxies"; -import { computed, ref, Ref, unref } from "vue"; +import { computed, isRef, ref, Ref, unref } from "vue"; import panZoom from "vue-panzoom"; import type { Link } from "../links/links"; @@ -337,12 +337,52 @@ export function createBoard<T extends BoardOptions>( } board.nodes = computed(() => unref(processedBoard.state).nodes); - board.selectedNode = computed( - () => - processedBoard.nodes.value.find( - node => node.id === unref(processedBoard.state).selectedNode - ) || null - ); + board.selectedNode = computed({ + get() { + return ( + processedBoard.nodes.value.find( + node => node.id === unref(processedBoard.state).selectedNode + ) || null + ); + }, + set(node) { + if (isRef(processedBoard.state)) { + processedBoard.state.value = { + ...processedBoard.state.value, + selectedNode: node?.id ?? null + }; + } else { + processedBoard.state.selectedNode = node?.id ?? null; + } + } + }); + board.selectedAction = computed({ + get() { + const selectedNode = processedBoard.selectedNode.value; + if (selectedNode == null) { + return null; + } + const type = processedBoard.types[selectedNode.type]; + if (type.actions == null) { + return null; + } + return ( + type.actions.find( + action => action.id === unref(processedBoard.state).selectedAction + ) || null + ); + }, + set(action) { + if (isRef(processedBoard.state)) { + processedBoard.state.value = { + ...processedBoard.state.value, + selectedAction: action?.id ?? null + }; + } else { + processedBoard.state.selectedAction = action?.id ?? null; + } + } + }); board.selectedAction = computed(() => { const selectedNode = processedBoard.selectedNode.value; if (selectedNode == null) { From 425e85a1eeba109221cff11de5c32977715d9aa3 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 23 Apr 2023 10:00:16 -0500 Subject: [PATCH 058/134] Add function to boards for placing nodes in the next available space --- src/features/boards/board.ts | 74 +++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/src/features/boards/board.ts b/src/features/boards/board.ts index 0e1e71b..4258345 100644 --- a/src/features/boards/board.ts +++ b/src/features/boards/board.ts @@ -12,7 +12,7 @@ import { globalBus } from "game/events"; import { DefaultValue, deletePersistent, Persistent, State } from "game/persistence"; import { persistent } from "game/persistence"; import type { Unsubscribe } from "nanoevents"; -import { isFunction } from "util/common"; +import { Direction, isFunction } from "util/common"; import type { Computable, GetComputableType, @@ -266,6 +266,8 @@ export interface BaseBoard { receivingNode: Ref<BoardNode | null>; /** The current mouse position, if over the board. */ mousePosition: Ref<{ x: number; y: number } | null>; + /** Places a node in the nearest empty space in the given direction with the specified space around it. */ + placeInAvailableSpace: (node: BoardNode, radius?: number, direction?: Direction) => void; /** A symbol that helps identify features of the same type. */ type: typeof BoardType; /** The Vue component used to render this feature. */ @@ -484,6 +486,76 @@ export function createBoard<T extends BoardOptions>( board.receivingNode!.value = node; } + board.placeInAvailableSpace = function ( + node: BoardNode, + radius = 100, + direction = Direction.Right + ) { + const nodes = processedBoard.nodes.value + .slice() + .filter(n => { + // Exclude self + if (n === node) { + return false; + } + + // Exclude nodes that aren't within the corridor we'll be moving within + if ( + (direction === Direction.Down || direction === Direction.Up) && + Math.abs(n.position.x - node.position.x) > radius + ) { + return false; + } + if ( + (direction === Direction.Left || direction === Direction.Right) && + Math.abs(n.position.y - node.position.y) > radius + ) { + return false; + } + + // Exclude nodes in the wrong direction + return !( + (direction === Direction.Right && + n.position.x < node.position.x - radius) || + (direction === Direction.Left && n.position.x > node.position.x + radius) || + (direction === Direction.Up && n.position.y > node.position.y + radius) || + (direction === Direction.Down && n.position.y < node.position.y - radius) + ); + }) + .sort( + direction === Direction.Right + ? (a, b) => a.position.x - b.position.x + : direction === Direction.Left + ? (a, b) => b.position.x - a.position.x + : direction === Direction.Up + ? (a, b) => b.position.y - a.position.y + : (a, b) => a.position.y - b.position.y + ); + for (let i = 0; i < nodes.length; i++) { + const nodeToCheck = nodes[i]; + const distance = + direction === Direction.Right || direction === Direction.Left + ? Math.abs(node.position.x - nodeToCheck.position.x) + : Math.abs(node.position.y - nodeToCheck.position.y); + + // If we're too close to this node, move further + if (distance < radius) { + if (direction === Direction.Right) { + node.position.x = nodeToCheck.position.x + radius; + } else if (direction === Direction.Left) { + node.position.x = nodeToCheck.position.x - radius; + } else if (direction === Direction.Up) { + node.position.y = nodeToCheck.position.y - radius; + } else if (direction === Direction.Down) { + node.position.y = nodeToCheck.position.y + radius; + } + } else if (i > 0 && distance > radius) { + // If we're further from this node than the radius, then the nodes are past us and we can early exit + break; + } + } + }; + board[GatherProps] = function (this: GenericBoard) { const { nodes, From 066ef7139554ab39b7aba8bf71563ea037cad71b Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 23 Apr 2023 14:15:55 -0500 Subject: [PATCH 059/134] Made node text easier to read --- src/features/boards/BoardNode.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/features/boards/BoardNode.vue b/src/features/boards/BoardNode.vue index b40357a..1752370 100644 --- a/src/features/boards/BoardNode.vue +++ b/src/features/boards/BoardNode.vue @@ -297,6 +297,7 @@ function mouseUp(e: MouseEvent | TouchEvent) { font-family: monospace; font-size: 200%; pointer-events: none; + filter: drop-shadow(3px 3px 2px var(--tooltip-background)); } .progress { From 4980074d26bf06d68afb8e2bda1d804a5925bd28 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 23 Apr 2023 16:44:39 -0500 Subject: [PATCH 060/134] Fixed board.selectedAction setter not working --- src/features/boards/board.ts | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/features/boards/board.ts b/src/features/boards/board.ts index 4258345..323b7d2 100644 --- a/src/features/boards/board.ts +++ b/src/features/boards/board.ts @@ -385,21 +385,6 @@ export function createBoard<T extends BoardOptions>( } } }); - board.selectedAction = computed(() => { - const selectedNode = processedBoard.selectedNode.value; - if (selectedNode == null) { - return null; - } - const type = processedBoard.types[selectedNode.type]; - if (type.actions == null) { - return null; - } - return ( - type.actions.find( - action => action.id === unref(processedBoard.state).selectedAction - ) || null - ); - }); board.mousePosition = ref(null); if (board.links) { processComputable(board as T, "links"); From 7b59fcfc3802183c3d21265d9dbb0e8a8c7a3334 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 23 Apr 2023 16:55:45 -0500 Subject: [PATCH 061/134] Don't capitalize all tree nodes --- src/data/common.tsx | 11 ++--------- src/features/trees/TreeNode.vue | 1 - 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/data/common.tsx b/src/data/common.tsx index 1fdfd61..2430c07 100644 --- a/src/data/common.tsx +++ b/src/data/common.tsx @@ -16,7 +16,7 @@ import player from "game/player"; import settings from "game/settings"; import type { DecimalSource } from "util/bignum"; import Decimal, { format, formatSmall, formatTime } from "util/bignum"; -import type { WithRequired } from "util/common"; +import { WithRequired, camelToTitle } from "util/common"; import type { Computable, GetComputableType, @@ -177,11 +177,6 @@ export interface LayerTreeNodeOptions extends TreeNodeOptions { layerID: string; /** The color to display this tree node as */ color: Computable<string>; // marking as required - /** - * The content to display in the tree node. - * Defaults to the layer's ID - */ - display?: Computable<CoercableComponent>; /** Whether or not to append the layer to the tabs list. * If set to false, then the tree node will instead always remove all tabs to its right and then add the layer tab. * Defaults to true. @@ -214,12 +209,10 @@ export function createLayerTreeNode<T extends LayerTreeNodeOptions>( ): LayerTreeNode<T> { return createTreeNode(feature => { const options = optionsFunc.call(feature, feature); - processComputable(options as T, "display"); - setDefault(options, "display", options.layerID); + setDefault(options, "display", camelToTitle(options.layerID)); processComputable(options as T, "append"); return { ...options, - display: options.display, onClick: unref((options as unknown as GenericLayerTreeNode).append) ? function () { if (player.tabs.includes(options.layerID)) { diff --git a/src/features/trees/TreeNode.vue b/src/features/trees/TreeNode.vue index ea48eeb..b6ce3d3 100644 --- a/src/features/trees/TreeNode.vue +++ b/src/features/trees/TreeNode.vue @@ -113,7 +113,6 @@ export default defineComponent({ color: rgba(0, 0, 0, 0.5); text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.25); box-shadow: -4px -4px 4px rgba(0, 0, 0, 0.25) inset, 0px 0px 20px var(--background); - text-transform: capitalize; display: flex; } From 6f985fd55bd422d01e1d84fe1efe9ceec18c065e Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 23 Apr 2023 19:31:25 -0500 Subject: [PATCH 062/134] Correct doc for actionDistance --- src/features/boards/board.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/boards/board.ts b/src/features/boards/board.ts index 323b7d2..4412918 100644 --- a/src/features/boards/board.ts +++ b/src/features/boards/board.ts @@ -118,7 +118,7 @@ export interface NodeTypeOptions { titleColor?: NodeComputable<string>; /** The list of action options for the node. */ actions?: BoardNodeActionOptions[]; - /** The distance between the center of the node and its actions. */ + /** The arc between each action, in radians. */ actionDistance?: NodeComputable<number>; /** A function that is called when the node is clicked. */ onClick?: (node: BoardNode) => void; From 36fa4ece65e3698e4e89f05922c6e5c87c60c5fc Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Tue, 25 Apr 2023 23:51:18 -0500 Subject: [PATCH 063/134] Fix mouse leave deselecting nodes --- src/features/boards/Board.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/features/boards/Board.vue b/src/features/boards/Board.vue index 00799fe..50892b4 100644 --- a/src/features/boards/Board.vue +++ b/src/features/boards/Board.vue @@ -19,7 +19,7 @@ @touchstart="(e: TouchEvent) => mouseDown(e)" @mouseup="() => endDragging(unref(draggingNode))" @touchend.passive="() => endDragging(unref(draggingNode))" - @mouseleave="() => endDragging(unref(draggingNode))" + @mouseleave="() => endDragging(unref(draggingNode), true)" > <svg class="stage" width="100%" height="100%"> <g class="g1"> @@ -223,7 +223,7 @@ function drag(e: MouseEvent | TouchEvent) { } } -function endDragging(node: BoardNode | null) { +function endDragging(node: BoardNode | null, mouseLeave = false) { if (props.draggingNode.value != null && props.draggingNode.value === node) { if (props.receivingNode.value == null) { props.draggingNode.value.position.x += Math.round(dragged.value.x / 25) * 25; @@ -241,7 +241,7 @@ function endDragging(node: BoardNode | null) { } props.setDraggingNode.value(null); - } else if (!hasDragged.value) { + } else if (!hasDragged.value && !mouseLeave) { props.state.value.selectedNode = null; props.state.value.selectedAction = null; } From 81058e10b49a9664df16471d140aa4d17fe24dff Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Thu, 27 Apr 2023 20:41:20 -0500 Subject: [PATCH 064/134] Throw error if lazy proxies get cyclical --- src/util/proxies.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/util/proxies.ts b/src/util/proxies.ts index 6e7a6f1..f712470 100644 --- a/src/util/proxies.ts +++ b/src/util/proxies.ts @@ -36,8 +36,13 @@ export function createLazyProxy<T extends object, S extends T>( ): T { const obj: S & Partial<T> = baseObject; let calculated = false; + let calculating = false; function calculateObj(): T { if (!calculated) { + if (calculating) { + throw new Error("Cyclical dependency detected. Cannot evaluate lazy proxy."); + } + calculating = true; Object.assign(obj, objectFunc.call(obj, obj)); calculated = true; } From ff16397cc7542ccae39477b9559b54c9f606cfea Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Thu, 27 Apr 2023 22:48:40 -0500 Subject: [PATCH 065/134] Fix bug with estimateTime not showing "Never" when it should --- src/data/common.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/common.tsx b/src/data/common.tsx index 2430c07..8cc7853 100644 --- a/src/data/common.tsx +++ b/src/data/common.tsx @@ -437,7 +437,7 @@ export function estimateTime( const currTarget = unref(processedTarget); if (Decimal.gte(resource.value, currTarget)) { return "Now"; - } else if (Decimal.lt(currRate, 0)) { + } else if (Decimal.lte(currRate, 0)) { return "Never"; } return formatTime(Decimal.sub(currTarget, resource.value).div(currRate)); From bffc27344a435818c6ab935a3304984bf8f2b7e1 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 30 Apr 2023 11:08:43 -0500 Subject: [PATCH 066/134] Fixed isInvertible and isIntegrable not working nested correctly --- src/game/formulas/formulas.ts | 7 +++++-- tests/game/formulas.test.ts | 28 ++++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index bf989b1..79adfce 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -124,11 +124,14 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[ const innermostVariable = numVariables === 1 ? variable?.innermostVariable : undefined; + const invertible = variable?.isInvertible() ?? false; + const integrable = variable?.isIntegrable() ?? false; + return { inputs, internalEvaluate: evaluate, - internalInvert: invert, - internalIntegrate: integrate, + internalInvert: invertible ? invert : undefined, + internalIntegrate: integrable ? integrate : undefined, internalIntegrateInner: integrateInner, applySubstitution, innermostVariable, diff --git a/tests/game/formulas.test.ts b/tests/game/formulas.test.ts index db020a5..462d3d8 100644 --- a/tests/game/formulas.test.ts +++ b/tests/game/formulas.test.ts @@ -491,10 +491,17 @@ describe("Inverting", () => { expect(formula.invert(100)).compare_tolerance(0); }); - test("Inverting with non-invertible sections", () => { - const formula = Formula.add(variable, constant.ceil()); - expect(formula.isInvertible()).toBe(true); - expect(formula.invert(10)).compare_tolerance(0); + describe("Inverting with non-invertible sections", () => { + test("Non-invertible constant", () => { + const formula = Formula.add(variable, constant.ceil()); + expect(formula.isInvertible()).toBe(true); + expect(() => formula.invert(10)).not.toThrow(); + }); + test("Non-invertible variable", () => { + const formula = Formula.add(variable.ceil(), constant); + expect(formula.isInvertible()).toBe(false); + expect(() => formula.invert(10)).toThrow(); + }); }); }); @@ -619,6 +626,19 @@ describe("Integrating", () => { const formula = Formula.pow(1.05, variable).times(100).pow(0.5); expect(() => formula.evaluateIntegral()).toThrow(); }); + + describe("Integrating with non-integrable sections", () => { + test("Non-integrable constant", () => { + const formula = Formula.add(variable, constant.ceil()); + expect(formula.isIntegrable()).toBe(true); + expect(() => formula.evaluateIntegral()).not.toThrow(); + }); + test("Non-integrable variable", () => { + const formula = Formula.add(variable.ceil(), constant); + expect(formula.isIntegrable()).toBe(false); + expect(() => formula.evaluateIntegral()).toThrow(); + }); + }); }); describe("Inverting integrals", () => { From 5d17d67e00bc063001413f621f7bc068eeae92fd Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 30 Apr 2023 11:23:38 -0500 Subject: [PATCH 067/134] Fix repeatable amount display --- src/features/repeatable.tsx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/features/repeatable.tsx b/src/features/repeatable.tsx index d9bf372..eb34af5 100644 --- a/src/features/repeatable.tsx +++ b/src/features/repeatable.tsx @@ -235,12 +235,10 @@ export function createRepeatable<T extends RepeatableOptions>( {currDisplay.showAmount === false ? null : ( <div> <br /> - joinJSX( - <>Amount: {formatWhole(genericRepeatable.amount.value)}</>, - {unref(genericRepeatable.limit) !== Decimal.dInf ? ( + <>Amount: {formatWhole(genericRepeatable.amount.value)}</> + {Decimal.isFinite(unref(genericRepeatable.limit)) ? ( <> / {formatWhole(unref(genericRepeatable.limit))}</> ) : undefined} - ) </div> )} {currDisplay.effectDisplay == null ? null : ( From 04f14c17bd6939fe6460c2697a46d263ff1d4890 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 30 Apr 2023 11:37:23 -0500 Subject: [PATCH 068/134] Fix `extends undefined` checks --- src/features/tooltips/tooltip.ts | 2 +- src/game/modifiers.tsx | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/features/tooltips/tooltip.ts b/src/features/tooltips/tooltip.ts index 129bd16..b5b1042 100644 --- a/src/features/tooltips/tooltip.ts +++ b/src/features/tooltips/tooltip.ts @@ -52,7 +52,7 @@ export interface BaseTooltip { export type Tooltip<T extends TooltipOptions> = Replace< T & BaseTooltip, { - pinnable: T["pinnable"] extends undefined ? false : T["pinnable"]; + pinnable: undefined extends T["pinnable"] ? false : T["pinnable"]; pinned: T["pinnable"] extends true ? Ref<boolean> : undefined; display: GetComputableType<T["display"]>; classes: GetComputableType<T["classes"]>; diff --git a/src/game/modifiers.tsx b/src/game/modifiers.tsx index cceacd8..b65e7fc 100644 --- a/src/game/modifiers.tsx +++ b/src/game/modifiers.tsx @@ -41,11 +41,11 @@ export interface Modifier { /** * Utility type used to narrow down a modifier type that will have a description and/or enabled property based on optional parameters, T and S (respectively). */ -export type ModifierFromOptionalParams<T, S> = T extends undefined - ? S extends undefined +export type ModifierFromOptionalParams<T, S> = undefined extends T + ? undefined extends S ? Omit<WithRequired<Modifier, "invert" | "getFormula">, "description" | "enabled"> : Omit<WithRequired<Modifier, "invert" | "enabled" | "getFormula">, "description"> - : S extends undefined + : undefined extends S ? Omit<WithRequired<Modifier, "invert" | "description" | "getFormula">, "enabled"> : WithRequired<Modifier, "invert" | "enabled" | "description" | "getFormula">; From 8dd2cbe46680ea20a73571af11d8e1a7ded6d880 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 30 Apr 2023 13:17:04 -0500 Subject: [PATCH 069/134] Make upgrade.canPurchase return false when already bought --- src/features/upgrades/upgrade.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/features/upgrades/upgrade.ts b/src/features/upgrades/upgrade.ts index 3861c5e..9ff9b28 100644 --- a/src/features/upgrades/upgrade.ts +++ b/src/features/upgrades/upgrade.ts @@ -137,7 +137,9 @@ export function createUpgrade<T extends UpgradeOptions>( upgrade.bought = bought; Object.assign(upgrade, decoratedData); - upgrade.canPurchase = computed(() => requirementsMet(upgrade.requirements)); + upgrade.canPurchase = computed( + () => !bought.value && requirementsMet(upgrade.requirements) + ); upgrade.purchase = function () { const genericUpgrade = upgrade as GenericUpgrade; if (!unref(genericUpgrade.canPurchase)) { From dbdcf19b6d0f2c041ac60570247f91cce0307727 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Mon, 1 May 2023 08:20:30 -0500 Subject: [PATCH 070/134] Fix actions not being constructible --- src/features/action.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/features/action.tsx b/src/features/action.tsx index a58a762..7d392bb 100644 --- a/src/features/action.tsx +++ b/src/features/action.tsx @@ -244,8 +244,9 @@ export function createAction<T extends ActionOptions>( decorator.postConstruct?.(action); } - const decoratedProps = decorators.reduce((current, next) => - Object.assign(current, next.getGatheredProps?.(action)) + const decoratedProps = decorators.reduce( + (current, next) => Object.assign(current, next.getGatheredProps?.(action)), + {} ); action[GatherProps] = function (this: GenericAction) { const { From 3413585c45c1c3cc32975fd67e6ce90ff2974db2 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Mon, 1 May 2023 08:32:22 -0500 Subject: [PATCH 071/134] Fix bar misalignment on actions --- src/features/action.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/features/action.tsx b/src/features/action.tsx index 7d392bb..1fbb8d3 100644 --- a/src/features/action.tsx +++ b/src/features/action.tsx @@ -169,7 +169,6 @@ export function createAction<T extends ActionOptions>( direction: Direction.Right, width: 100, height: 10, - style: "margin-top: 8px", borderStyle: "border-color: black", baseStyle: "margin-top: -1px", progress: () => Decimal.div(progress.value, unref(genericAction.duration)), From 6786c27b8931f6cebd94b7f93726ddc066573f96 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 3 May 2023 15:50:51 -0500 Subject: [PATCH 072/134] Remove lint from readme --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index e535eb2..5f8c741 100644 --- a/README.md +++ b/README.md @@ -26,11 +26,6 @@ npm run build npm run preview ``` -### Lints and fixes files -``` -npm run lint -``` - ### Runs the tests using vite-jest ``` npm run test From 4d7f03d543b00e5903f5f2d507e0840acd6fd920 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Fri, 5 May 2023 19:10:23 -0500 Subject: [PATCH 073/134] Fix crash when calculating formula cost Happened when spend resource was false and the formula was non-integrable, but the amount to buy were all going to be summed anyways --- src/game/formulas/formulas.ts | 40 ++++++++++++++++++----------------- tests/game/formulas.test.ts | 21 ++++++++++++++++-- 2 files changed, 40 insertions(+), 21 deletions(-) diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index 79adfce..76d8ff9 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -1491,33 +1491,35 @@ export function calculateCost( spendResources = true, summedPurchases?: number ) { - let newValue = Decimal.add(amountToBuy, unref(formula.innermostVariable) ?? 0); + const origValue = unref(formula.innermostVariable) ?? 0; + let newValue = Decimal.add(amountToBuy, origValue); + const targetValue = newValue; + summedPurchases ??= spendResources ? 10 : 0; + newValue = newValue.sub(summedPurchases).clampMin(origValue); + let cost: DecimalSource = 0; if (spendResources) { - if (!formula.isIntegrable()) { - throw new Error( - "Cannot calculate cost with spending resources of non-integrable formula" - ); + if (Decimal.gt(amountToBuy, summedPurchases)) { + if (!formula.isIntegrable()) { + throw new Error( + "Cannot calculate cost with spending resources of non-integrable formula" + ); + } + cost = Decimal.sub(formula.evaluateIntegral(newValue), formula.evaluateIntegral()); } - const targetValue = newValue; - newValue = newValue - .sub(summedPurchases ?? 10) - .clampMin(unref(formula.innermostVariable) ?? 0); - let cost = Decimal.sub(formula.evaluateIntegral(newValue), formula.evaluateIntegral()); if (targetValue.gt(1e308)) { // Too large of a number for summedPurchases to make a difference, // just get the cost and multiply by summed purchases - return cost.add(Decimal.sub(targetValue, newValue).times(formula.evaluate(newValue))); + return Decimal.add( + cost, + Decimal.sub(targetValue, newValue).times(formula.evaluate(newValue)) + ); } for (let i = newValue.toNumber(); i < targetValue.toNumber(); i++) { - cost = cost.add(formula.evaluate(i)); + cost = Decimal.add(cost, formula.evaluate(i)); } - return cost; } else { - const targetValue = newValue; - newValue = newValue - .sub(summedPurchases ?? 0) - .clampMin(unref(formula.innermostVariable) ?? 0); - let cost = formula.evaluate(newValue); + cost = formula.evaluate(newValue); + newValue = newValue.add(1); if (targetValue.gt(1e308)) { // Too large of a number for summedPurchases to make a difference, // just get the cost and multiply by summed purchases @@ -1526,6 +1528,6 @@ export function calculateCost( for (let i = newValue.toNumber(); i < targetValue.toNumber(); i++) { cost = Decimal.add(cost, formula.evaluate(i)); } - return cost; } + return cost; } diff --git a/tests/game/formulas.test.ts b/tests/game/formulas.test.ts index 462d3d8..c0c067a 100644 --- a/tests/game/formulas.test.ts +++ b/tests/game/formulas.test.ts @@ -1089,9 +1089,21 @@ describe("Buy Max", () => { Decimal.pow(1.05, 141).times(100) ); }); + test("Calculates max affordable and cost correctly with summing last purchases", () => { + const variable = Formula.variable(0); + const formula = Formula.pow(1.05, variable).times(100); + const maxAffordable = calculateMaxAffordable(formula, resource, false, 4); + expect(maxAffordable.value).compare_tolerance(141 - 4); + + const actualCost = new Array(4) + .fill(null) + .reduce((acc, _, i) => acc.add(formula.evaluate(133 + i)), new Decimal(0)); + const calculatedCost = calculateCost(formula, maxAffordable.value, false, 4); + expect(calculatedCost).compare_tolerance(actualCost); + }); }); describe("With spending", () => { - test("Throws on non-invertible formula", () => { + test("Throws on calculating max affordable of non-invertible formula", () => { const maxAffordable = calculateMaxAffordable(Formula.abs(10), resource); expect(() => maxAffordable.value).toThrow(); }); @@ -1220,7 +1232,7 @@ describe("Buy Max", () => { (acc, _, i) => acc.add(formula.evaluate(i + purchases.value)), new Decimal(0) ); - const calculatedCost = calculateCost(formula, maxAffordable.value, true); + const calculatedCost = calculateCost(formula, maxAffordable.value); // Since we're summing all the purchases this should be equivalent expect(calculatedCost).compare_tolerance(actualCost); }); @@ -1235,5 +1247,10 @@ describe("Buy Max", () => { expect(Decimal.isFinite(calculatedCost)).toBe(true); resource.value = 100000; }); + test("Handles summing purchases of non-integrable formula", () => { + const purchases = ref(0); + const formula = Formula.variable(purchases).abs(); + expect(() => calculateCost(formula, 10)).not.toThrow(); + }); }); }); From 0e1915f5118c397bc518ce53a407bedacb633d82 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 7 May 2023 21:51:11 -0500 Subject: [PATCH 074/134] Fix conversion utility showing currentAt instead of nextAt --- src/data/common.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/data/common.tsx b/src/data/common.tsx index 8cc7853..e7a9db0 100644 --- a/src/data/common.tsx +++ b/src/data/common.tsx @@ -134,9 +134,9 @@ export function createResetButton<T extends ClickableOptions & ResetButtonOption {displayResource( resetButton.conversion.baseResource, unref(resetButton.conversion.buyMax) || - Decimal.floor(unref(resetButton.conversion.actualGain)).neq(1) - ? unref(resetButton.conversion.nextAt) - : unref(resetButton.conversion.currentAt) + Decimal.lt(unref(resetButton.conversion.actualGain), 1) + ? unref(resetButton.conversion.currentAt) + : unref(resetButton.conversion.nextAt) )}{" "} {resetButton.conversion.baseResource.displayName} </div> From cb4830e06b028a4d363ff5c9696e00c7a93a81ee Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 10 May 2023 00:33:45 -0500 Subject: [PATCH 075/134] Fix reset typing --- src/features/reset.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/reset.ts b/src/features/reset.ts index b7c40ed..2811ba8 100644 --- a/src/features/reset.ts +++ b/src/features/reset.ts @@ -19,7 +19,7 @@ export const ResetType = Symbol("Reset"); */ export interface ResetOptions { /** List of things to reset. Can include objects which will be recursed over for persistent values. */ - thingsToReset: Computable<Record<string, unknown>[]>; + thingsToReset: Computable<unknown[]>; /** A function that is called when the reset is performed. */ onReset?: VoidFunction; } From 866685de2db5bf9ae00f23541d2d9aecafbcc872 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Thu, 11 May 2023 23:32:10 -0500 Subject: [PATCH 076/134] Simplify TPS --- src/components/TPS.vue | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/src/components/TPS.vue b/src/components/TPS.vue index a460a09..db73da6 100644 --- a/src/components/TPS.vue +++ b/src/components/TPS.vue @@ -1,17 +1,11 @@ <template> - <div class="tpsDisplay" v-if="!tps.isNan()"> - TPS: {{ formatWhole(tps) }} - <transition name="fade" - ><span v-if="showLow" class="low">{{ formatWhole(low) }}</span></transition - > - </div> + <div class="tpsDisplay" v-if="!tps.isNan()">TPS: {{ formatWhole(tps) }}</div> </template> <script setup lang="ts"> import state from "game/state"; -import type { DecimalSource } from "util/bignum"; import Decimal, { formatWhole } from "util/bignum"; -import { computed, ref, watchEffect } from "vue"; +import { computed } from "vue"; const tps = computed(() => Decimal.div( @@ -19,20 +13,6 @@ const tps = computed(() => state.lastTenTicks.reduce((acc, curr) => acc + curr, 0) ) ); - -const lastTenFPS = ref<number[]>([]); -watchEffect(() => { - lastTenFPS.value.push(Math.round(tps.value.toNumber())); - if (lastTenFPS.value.length > 10) { - lastTenFPS.value = lastTenFPS.value.slice(1); - } -}); - -const low = computed(() => - lastTenFPS.value.reduce<DecimalSource>((acc, curr) => Decimal.max(acc, curr), 0) -); - -const showLow = computed(() => Decimal.sub(tps.value, low.value).gt(1)); </script> <style scoped> From 2f3ae85eb189b2a67df8272c25ee9f20bbeedbb0 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Thu, 11 May 2023 23:35:23 -0500 Subject: [PATCH 077/134] Fix recursive rendering when panning --- src/features/boards/Board.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/boards/Board.vue b/src/features/boards/Board.vue index 50892b4..356bca7 100644 --- a/src/features/boards/Board.vue +++ b/src/features/boards/Board.vue @@ -38,7 +38,7 @@ :nodeType="types[node.type]" :dragging="unref(draggingNode)" :dragged="unref(draggingNode) === node ? dragged : undefined" - :hasDragged="hasDragged" + :hasDragged="unref(draggingNode) == null ? false : hasDragged" :receivingNode="unref(receivingNode)?.id === node.id" :selectedNode="unref(selectedNode)" :selectedAction="unref(selectedAction)" From 213bdd6005687c83cb099538ac09832ec6b3d981 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Fri, 12 May 2023 01:39:38 -0500 Subject: [PATCH 078/134] More board optimizations --- src/features/boards/Board.vue | 8 +++++--- src/features/boards/BoardNode.vue | 5 ++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/features/boards/Board.vue b/src/features/boards/Board.vue index 356bca7..3a50ff1 100644 --- a/src/features/boards/Board.vue +++ b/src/features/boards/Board.vue @@ -39,9 +39,11 @@ :dragging="unref(draggingNode)" :dragged="unref(draggingNode) === node ? dragged : undefined" :hasDragged="unref(draggingNode) == null ? false : hasDragged" - :receivingNode="unref(receivingNode)?.id === node.id" - :selectedNode="unref(selectedNode)" - :selectedAction="unref(selectedAction)" + :receivingNode="unref(receivingNode) === node" + :isSelected="unref(selectedNode) === node" + :selectedAction=" + unref(selectedNode) === node ? unref(selectedAction) : null + " @mouseDown="mouseDown" @endDragging="endDragging" @clickAction="(actionId: string) => clickAction(node, actionId)" diff --git a/src/features/boards/BoardNode.vue b/src/features/boards/BoardNode.vue index 1752370..6a32f37 100644 --- a/src/features/boards/BoardNode.vue +++ b/src/features/boards/BoardNode.vue @@ -160,7 +160,7 @@ const _props = defineProps<{ }; hasDragged?: boolean; receivingNode?: boolean; - selectedNode: BoardNode | null; + isSelected: boolean; selectedAction: GenericBoardNodeAction | null; }>(); const props = toRefs(_props); @@ -170,7 +170,6 @@ const emit = defineEmits<{ (e: "clickAction", actionId: string): void; }>(); -const isSelected = computed(() => unref(props.selectedNode) === unref(props.node)); const isDraggable = computed(() => getNodeProperty(props.nodeType.value.draggable, unref(props.node)) ); @@ -211,7 +210,7 @@ const shape = computed(() => getNodeProperty(props.nodeType.value.shape, unref(p const title = computed(() => getNodeProperty(props.nodeType.value.title, unref(props.node))); const label = computed( () => - (isSelected.value + (props.isSelected.value ? unref(props.selectedAction) && // eslint-disable-next-line @typescript-eslint/no-non-null-assertion getNodeProperty(unref(props.selectedAction)!.tooltip, unref(props.node)) From 8284baa1a086b42b89029703cd1ec9d10f3506cf Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Fri, 12 May 2023 01:39:06 -0500 Subject: [PATCH 079/134] Fix step-wise formulas causing issues with reactivity --- src/game/formulas/formulas.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index 76d8ff9..144dc0d 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -229,15 +229,16 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[ start: Computable<DecimalSource>, formulaModifier: (value: InvertibleIntegralFormula) => GenericFormula ) { - const lhsRef = ref<DecimalSource>(0); - const formula = formulaModifier(Formula.variable(lhsRef)); + const formula = formulaModifier(Formula.variable(0)); const processedStart = convertComputable(start); function evalStep(lhs: DecimalSource) { if (Decimal.lt(lhs, unref(processedStart))) { return lhs; } - lhsRef.value = Decimal.sub(lhs, unref(processedStart)); - return Decimal.add(formula.evaluate(), unref(processedStart)); + return Decimal.add( + formula.evaluate(Decimal.sub(lhs, unref(processedStart))), + unref(processedStart) + ); } function invertStep(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs) && formula.isInvertible()) { From 502fa99f5d02005faaa3a9ad05e00b332cf3e751 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Fri, 12 May 2023 09:39:58 -0500 Subject: [PATCH 080/134] Show selected node above others --- src/features/boards/Board.vue | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/features/boards/Board.vue b/src/features/boards/Board.vue index 3a50ff1..a1b5a58 100644 --- a/src/features/boards/Board.vue +++ b/src/features/boards/Board.vue @@ -99,6 +99,10 @@ const stage = ref<any>(null); const sortedNodes = computed(() => { const nodes = props.nodes.value.slice(); + if (props.selectedNode.value) { + const node = nodes.splice(nodes.indexOf(props.selectedNode.value), 1)[0]; + nodes.push(node); + } if (props.draggingNode.value) { const node = nodes.splice(nodes.indexOf(props.draggingNode.value), 1)[0]; nodes.push(node); From 9fa5ec971afeba84817ae3775e512694f1f07080 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Fri, 12 May 2023 10:59:41 -0500 Subject: [PATCH 081/134] Move `amount` check in bonus amount decorator to postConstruct --- src/features/decorators/bonusDecorator.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/features/decorators/bonusDecorator.ts b/src/features/decorators/bonusDecorator.ts index 636bfbe..7ee453d 100644 --- a/src/features/decorators/bonusDecorator.ts +++ b/src/features/decorators/bonusDecorator.ts @@ -69,14 +69,12 @@ export const bonusAmountDecorator: Decorator< BaseBonusAmountFeature, GenericBonusAmountFeature > = { - preConstruct(feature) { + postConstruct(feature) { if (feature.amount === undefined) { console.error( `Decorated feature ${feature.id} does not contain the required 'amount' property"` ); } - }, - postConstruct(feature) { processComputable(feature, "bonusAmount"); if (feature.totalAmount === undefined) { feature.totalAmount = computed(() => From d4f0069dd52cf84a377c9e08f62d19d2ac85f6bc Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Fri, 12 May 2023 17:07:37 -0500 Subject: [PATCH 082/134] Fix repeatables not buying max correctly --- src/features/repeatable.tsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/features/repeatable.tsx b/src/features/repeatable.tsx index eb34af5..f45d7d3 100644 --- a/src/features/repeatable.tsx +++ b/src/features/repeatable.tsx @@ -162,7 +162,8 @@ export function createRepeatable<T extends RepeatableOptions>( ) ), requiresPay: false, - visibility: Visibility.None + visibility: Visibility.None, + canMaximize: true } as const; const visibilityRequirement = createVisibilityRequirement(repeatable as GenericRepeatable); if (isArray(repeatable.requirements)) { @@ -205,8 +206,12 @@ export function createRepeatable<T extends RepeatableOptions>( if (!unref(genericRepeatable.canClick)) { return; } - payRequirements(repeatable.requirements, unref(repeatable.amountToIncrease)); - genericRepeatable.amount.value = Decimal.add(genericRepeatable.amount.value, 1); + const amountToIncrease = unref(repeatable.amountToIncrease) ?? 1; + payRequirements(repeatable.requirements, amountToIncrease); + genericRepeatable.amount.value = Decimal.add( + genericRepeatable.amount.value, + amountToIncrease + ); onClick?.(event); }; processComputable(repeatable as T, "display"); From 0991ef08651caa041d2463e1f0dddd42cbc877be Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 13 May 2023 17:09:32 -0500 Subject: [PATCH 083/134] Fix some persistence issues --- src/features/achievements/achievement.tsx | 3 +++ src/features/reset.ts | 13 +++++++++++-- src/game/persistence.ts | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/features/achievements/achievement.tsx b/src/features/achievements/achievement.tsx index 007dd0c..9bf454f 100644 --- a/src/features/achievements/achievement.tsx +++ b/src/features/achievements/achievement.tsx @@ -160,6 +160,9 @@ export function createAchievement<T extends AchievementOptions>( achievement.earned = earned; achievement.complete = function () { + if (earned.value) { + return; + } earned.value = true; const genericAchievement = achievement as GenericAchievement; genericAchievement.onComplete?.(); diff --git a/src/features/reset.ts b/src/features/reset.ts index 2811ba8..2b31e64 100644 --- a/src/features/reset.ts +++ b/src/features/reset.ts @@ -1,8 +1,9 @@ import type { OptionsFunc, Replace } from "features/feature"; import { getUniqueID } from "features/feature"; import { globalBus } from "game/events"; +import Formula from "game/formulas/formulas"; import type { BaseLayer } from "game/layers"; -import type { NonPersistent, Persistent } from "game/persistence"; +import { NonPersistent, Persistent, SkipPersistence } from "game/persistence"; import { DefaultValue, persistent } from "game/persistence"; import type { Unsubscribe } from "nanoevents"; import Decimal from "util/bignum"; @@ -61,7 +62,15 @@ export function createReset<T extends ResetOptions>( reset.reset = function () { const handleObject = (obj: unknown) => { - if (obj != null && typeof obj === "object") { + if ( + obj != null && + typeof obj === "object" && + !(obj instanceof Decimal) && + !(obj instanceof Formula) + ) { + if (SkipPersistence in obj && obj[SkipPersistence] === true) { + return; + } if (DefaultValue in obj) { const persistent = obj as NonPersistent; persistent.value = persistent[DefaultValue]; diff --git a/src/game/persistence.ts b/src/game/persistence.ts index 712f989..a61d9cf 100644 --- a/src/game/persistence.ts +++ b/src/game/persistence.ts @@ -9,6 +9,7 @@ import type { Ref, WritableComputedRef } from "vue"; import { computed, isReactive, isRef, ref } from "vue"; import player from "./player"; import state from "./state"; +import Formula from "./formulas/formulas"; /** * A symbol used in {@link Persistent} objects. @@ -325,6 +326,7 @@ globalBus.on("addLayer", (layer: GenericLayer, saveData: Record<string, unknown> } } else if ( !(value instanceof Decimal) && + !(value instanceof Formula) && !isRef(value) && // eslint-disable-next-line @typescript-eslint/no-explicit-any !features.includes(value as { type: typeof Symbol }) From 006bfdf65d921d74a037be9542869c0cfe6ce394 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 14 May 2023 18:30:35 -0500 Subject: [PATCH 084/134] Make node links follow dragging --- src/features/boards/Board.vue | 11 ++++++++++- src/features/boards/BoardLink.vue | 19 ++++++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/features/boards/Board.vue b/src/features/boards/Board.vue index a1b5a58..218b302 100644 --- a/src/features/boards/Board.vue +++ b/src/features/boards/Board.vue @@ -28,7 +28,16 @@ v-for="link in unref(links) || []" :key="`${link.startNode.id}-${link.endNode.id}`" > - <BoardLinkVue :link="link" /> + <BoardLinkVue + :link="link" + :dragging="unref(draggingNode)" + :dragged=" + link.startNode === unref(draggingNode) || + link.endNode === unref(draggingNode) + ? dragged + : undefined + " + /> </g> </transition-group> <transition-group name="grow" :duration="500" appear> diff --git a/src/features/boards/BoardLink.vue b/src/features/boards/BoardLink.vue index 441d996..1f5ca17 100644 --- a/src/features/boards/BoardLink.vue +++ b/src/features/boards/BoardLink.vue @@ -11,29 +11,42 @@ </template> <script setup lang="ts"> -import type { BoardNodeLink } from "features/boards/board"; +import type { BoardNode, BoardNodeLink } from "features/boards/board"; import { computed, toRefs, unref } from "vue"; const _props = defineProps<{ link: BoardNodeLink; + dragging: BoardNode | null; + dragged?: { + x: number; + y: number; + }; }>(); const props = toRefs(_props); const startPosition = computed(() => { - const position = props.link.value.startNode.position; + const position = { ...props.link.value.startNode.position }; if (props.link.value.offsetStart) { position.x += unref(props.link.value.offsetStart).x; position.y += unref(props.link.value.offsetStart).y; } + if (props.dragging?.value === props.link.value.startNode) { + position.x += props.dragged?.value?.x ?? 0; + position.y += props.dragged?.value?.y ?? 0; + } return position; }); const endPosition = computed(() => { - const position = props.link.value.endNode.position; + const position = { ...props.link.value.endNode.position }; if (props.link.value.offsetEnd) { position.x += unref(props.link.value.offsetEnd).x; position.y += unref(props.link.value.offsetEnd).y; } + if (props.dragging?.value === props.link.value.endNode) { + position.x += props.dragged?.value?.x ?? 0; + position.y += props.dragged?.value?.y ?? 0; + } return position; }); </script> From d7a2049ca2415e67983a68477dac1fac4f5dc452 Mon Sep 17 00:00:00 2001 From: Seth Posner <smartseth@hotmail.com> Date: Sun, 7 May 2023 06:58:13 -0700 Subject: [PATCH 085/134] Make effect decorator generic --- src/features/decorators/common.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/features/decorators/common.ts b/src/features/decorators/common.ts index 8d76b37..07783bb 100644 --- a/src/features/decorators/common.ts +++ b/src/features/decorators/common.ts @@ -27,8 +27,8 @@ export type Decorator< export type GenericDecorator = Decorator<unknown>; -export interface EffectFeatureOptions { - effect: Computable<unknown>; +export interface EffectFeatureOptions<T = unknown> { + effect: Computable<T>; } export type EffectFeature<T extends EffectFeatureOptions> = Replace< @@ -36,9 +36,9 @@ export type EffectFeature<T extends EffectFeatureOptions> = Replace< { effect: GetComputableType<T["effect"]> } >; -export type GenericEffectFeature = Replace< +export type GenericEffectFeature<T = unknown> = Replace< EffectFeature<EffectFeatureOptions>, - { effect: ProcessedComputable<unknown> } + { effect: ProcessedComputable<T> } >; /** From f8095a96947a7dfcf8b30c1093f86b6445fdbe09 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 7 May 2023 11:15:02 -0500 Subject: [PATCH 086/134] Made calculateMaxAffordable, calculateCost, and cost requirements interface a bit cleaner --- src/features/challenges/challenge.tsx | 9 +- src/features/repeatable.tsx | 9 +- src/game/formulas/formulas.ts | 169 ++++++++++++++------------ src/game/requirements.tsx | 110 ++++++++++------- tests/game/formulas.test.ts | 42 +++++-- tests/game/requirements.test.ts | 135 +++++++++++++------- 6 files changed, 283 insertions(+), 191 deletions(-) diff --git a/src/features/challenges/challenge.tsx b/src/features/challenges/challenge.tsx index d9fc04d..bba005b 100644 --- a/src/features/challenges/challenge.tsx +++ b/src/features/challenges/challenge.tsx @@ -52,8 +52,6 @@ export interface ChallengeOptions { reset?: GenericReset; /** The requirement(s) to complete this challenge. */ requirements: Requirements; - /** Whether or not completing this challenge should grant multiple completions if requirements met. Requires {@link requirements} to be a requirement or array of requirements with {@link Requirement.canMaximize} true. */ - maximize?: Computable<boolean>; /** The maximum number of times the challenge can be completed. */ completionLimit?: Computable<DecimalSource>; /** Shows a marker on the corner of the feature. */ @@ -124,7 +122,6 @@ export type Challenge<T extends ChallengeOptions> = Replace< visibility: GetComputableTypeWithDefault<T["visibility"], Visibility.Visible>; canStart: GetComputableTypeWithDefault<T["canStart"], true>; requirements: GetComputableType<T["requirements"]>; - maximize: GetComputableType<T["maximize"]>; completionLimit: GetComputableTypeWithDefault<T["completionLimit"], 1>; mark: GetComputableTypeWithDefault<T["mark"], Ref<boolean>>; classes: GetComputableType<T["classes"]>; @@ -210,10 +207,7 @@ export function createChallenge<T extends ChallengeOptions>( } }; challenge.canComplete = computed(() => - Decimal.max( - maxRequirementsMet((challenge as GenericChallenge).requirements), - unref((challenge as GenericChallenge).maximize) ? Decimal.dInf : 1 - ) + maxRequirementsMet((challenge as GenericChallenge).requirements) ); challenge.complete = function (remainInChallenge?: boolean) { const genericChallenge = challenge as GenericChallenge; @@ -254,7 +248,6 @@ export function createChallenge<T extends ChallengeOptions>( processComputable(challenge as T, "canStart"); setDefault(challenge, "canStart", true); - processComputable(challenge as T, "maximize"); processComputable(challenge as T, "completionLimit"); setDefault(challenge, "completionLimit", 1); processComputable(challenge as T, "mark"); diff --git a/src/features/repeatable.tsx b/src/features/repeatable.tsx index f45d7d3..e82f8eb 100644 --- a/src/features/repeatable.tsx +++ b/src/features/repeatable.tsx @@ -67,8 +67,6 @@ export interface RepeatableOptions { mark?: Computable<boolean | string>; /** Toggles a smaller design for the feature. */ small?: Computable<boolean>; - /** Whether or not clicking this repeatable should attempt to maximize amount based on the requirements met. Requires {@link requirements} to be a requirement or array of requirements with {@link Requirement.canMaximize} true. */ - maximize?: Computable<boolean>; /** The display to use for this repeatable. */ display?: Computable<RepeatableDisplay>; } @@ -87,7 +85,6 @@ export interface BaseRepeatable { canClick: ProcessedComputable<boolean>; /** * How much amount can be increased by, or 1 if unclickable. - * Capped at 1 if {@link RepeatableOptions.maximize} is false. **/ amountToIncrease: Ref<DecimalSource>; /** A function that gets called when this repeatable is clicked. */ @@ -111,7 +108,6 @@ export type Repeatable<T extends RepeatableOptions> = Replace< style: GetComputableType<T["style"]>; mark: GetComputableType<T["mark"]>; small: GetComputableType<T["small"]>; - maximize: GetComputableType<T["maximize"]>; display: Ref<CoercableComponent>; } >; @@ -195,9 +191,7 @@ export function createRepeatable<T extends RepeatableOptions>( return currClasses; }); repeatable.amountToIncrease = computed(() => - unref((repeatable as GenericRepeatable).maximize) - ? maxRequirementsMet(repeatable.requirements) - : 1 + Decimal.clampMin(maxRequirementsMet(repeatable.requirements), 1) ); repeatable.canClick = computed(() => requirementsMet(repeatable.requirements)); const onClick = repeatable.onClick; @@ -274,7 +268,6 @@ export function createRepeatable<T extends RepeatableOptions>( processComputable(repeatable as T, "style"); processComputable(repeatable as T, "mark"); processComputable(repeatable as T, "small"); - processComputable(repeatable as T, "maximize"); for (const decorator of decorators) { decorator.postConstruct?.(repeatable); diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index 144dc0d..5ecdedb 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -1400,58 +1400,66 @@ export function printFormula(formula: FormulaSource): string { } /** - * Utility for calculating the maximum amount of purchases possible with a given formula and resource. If {@link spendResources} is changed to false, the calculation will be much faster with higher numbers. + * Utility for calculating the maximum amount of purchases possible with a given formula and resource. If {@link cumulativeCost} is changed to false, the calculation will be much faster with higher numbers. * @param formula The formula to use for calculating buy max from * @param resource The resource used when purchasing (is only read from) - * @param spendResources Whether or not to count spent resources on each purchase or not. If true, costs will be approximated for performance, skewing towards fewer purchases - * @param summedPurchases How many of the most expensive purchases should be manually summed for better accuracy. If unspecified uses 10 when spending resources and 0 when not + * @param cumulativeCost Whether or not to count spent resources on each purchase or not. If true, costs will be approximated for performance, skewing towards fewer purchases + * @param directSum How many of the most expensive purchases should be manually summed for better accuracy. If unspecified uses 10 when spending resources and 0 when not + * @param maxBulkAmount Cap on how many can be purchased at once. If equal to 1 or lte to {@link directSum} then the formula does not need to be invertible. Defaults to Infinity. */ export function calculateMaxAffordable( - formula: InvertibleFormula, + formula: GenericFormula, resource: Resource, - spendResources?: true, - summedPurchases?: number -): ComputedRef<DecimalSource>; -export function calculateMaxAffordable( - formula: InvertibleIntegralFormula, - resource: Resource, - spendResources: Computable<boolean>, - summedPurchases?: number -): ComputedRef<DecimalSource>; -export function calculateMaxAffordable( - formula: InvertibleFormula, - resource: Resource, - spendResources: Computable<boolean> = true, - summedPurchases?: number + cumulativeCost: Computable<boolean> = true, + directSum?: Computable<number>, + maxBulkAmount: Computable<DecimalSource> = Decimal.dInf ) { - const computedSpendResources = convertComputable(spendResources); + const computedCumulativeCost = convertComputable(cumulativeCost); + const computedDirectSum = convertComputable(directSum); + const computedmaxBulkAmount = convertComputable(maxBulkAmount); return computed(() => { - let affordable; - if (unref(computedSpendResources)) { - if (!formula.isIntegrable() || !formula.isIntegralInvertible()) { + const maxBulkAmount = unref(computedmaxBulkAmount); + if (Decimal.eq(maxBulkAmount, 1)) { + return Decimal.gte(resource.value, formula.evaluate()) ? Decimal.dOne : Decimal.dZero; + } + + const cumulativeCost = unref(computedCumulativeCost); + const directSum = unref(computedDirectSum) ?? (cumulativeCost ? 10 : 0); + let affordable: DecimalSource = 0; + if (Decimal.gt(maxBulkAmount, directSum)) { + if (!formula.isInvertible()) { throw new Error( - "Cannot calculate max affordable of formula with non-invertible integral" + "Cannot calculate max affordable of non-invertible formula with more maxBulkAmount than directSum" ); } - affordable = Decimal.floor( - formula.invertIntegral(Decimal.add(resource.value, formula.evaluateIntegral())) - ).sub(unref(formula.innermostVariable) ?? 0); - if (summedPurchases == null) { - summedPurchases = 10; - } - } else { - if (!formula.isInvertible()) { - throw new Error("Cannot calculate max affordable of non-invertible formula"); - } - affordable = Decimal.floor(formula.invert(resource.value)); - if (summedPurchases == null) { - summedPurchases = 0; + if (cumulativeCost) { + if (!formula.isIntegralInvertible()) { + throw new Error( + "Cannot calculate max affordable of formula with non-invertible integral" + ); + } + affordable = Decimal.floor( + formula.invertIntegral(Decimal.add(resource.value, formula.evaluateIntegral())) + ).sub(unref(formula.innermostVariable) ?? 0); + } else { + affordable = Decimal.floor(formula.invert(resource.value)); } } - if (summedPurchases > 0 && Decimal.lt(calculateCost(formula, affordable, true, 0), 1e308)) { - affordable = affordable.sub(summedPurchases).clampMin(0); - let summedCost = calculateCost(formula, affordable, true, 0); - while (true) { + affordable = Decimal.clampMax(affordable, maxBulkAmount); + if (directSum > 0) { + affordable = Decimal.sub(affordable, directSum).clampMin(0); + let summedCost; + if (cumulativeCost) { + summedCost = calculateCost(formula as InvertibleFormula, affordable, true, 0); + } else { + summedCost = formula.evaluate( + Decimal.add(unref(formula.innermostVariable) ?? 0, affordable) + ); + } + while ( + Decimal.lt(affordable, maxBulkAmount) && + Decimal.lt(affordable, Number.MAX_SAFE_INTEGER) + ) { const nextCost = formula.evaluate( affordable.add(unref(formula.innermostVariable) ?? 0) ); @@ -1468,67 +1476,76 @@ export function calculateMaxAffordable( } /** - * Utility for calculating the cost of a formula for a given amount of purchases. If {@link spendResources} is changed to false, the calculation will be much faster with higher numbers. + * Utility for calculating the cost of a formula for a given amount of purchases. If {@link cumulativeCost} is changed to false, the calculation will be much faster with higher numbers. * @param formula The formula to use for calculating buy max from * @param amountToBuy The amount of purchases to calculate the cost for - * @param spendResources Whether or not to count spent resources on each purchase or not. If true, costs will be approximated for performance, skewing towards higher cost - * @param summedPurchases How many purchases to manually sum for improved accuracy. If not specified, defaults to 10 when spending resources and 0 when not + * @param cumulativeCost Whether or not to count spent resources on each purchase or not. If true, costs will be approximated for performance, skewing towards higher cost + * @param directSum How many purchases to manually sum for improved accuracy. If not specified, defaults to 10 when cost is cumulative and 0 when not */ export function calculateCost( formula: InvertibleFormula, amountToBuy: DecimalSource, - spendResources?: true, - summedPurchases?: number + cumulativeCost?: true, + directSum?: number ): DecimalSource; export function calculateCost( formula: InvertibleIntegralFormula, amountToBuy: DecimalSource, - spendResources: boolean, - summedPurchases?: number + cumulativeCost: boolean, + directSum?: number ): DecimalSource; export function calculateCost( formula: InvertibleFormula, amountToBuy: DecimalSource, - spendResources = true, - summedPurchases?: number + cumulativeCost = true, + directSum?: number ) { + // Single purchase + if (Decimal.eq(amountToBuy, 1)) { + return formula.evaluate(); + } + const origValue = unref(formula.innermostVariable) ?? 0; let newValue = Decimal.add(amountToBuy, origValue); const targetValue = newValue; - summedPurchases ??= spendResources ? 10 : 0; - newValue = newValue.sub(summedPurchases).clampMin(origValue); + directSum ??= cumulativeCost ? 10 : 0; + newValue = newValue.sub(directSum).clampMin(origValue); let cost: DecimalSource = 0; - if (spendResources) { - if (Decimal.gt(amountToBuy, summedPurchases)) { + + // Indirect sum + if (Decimal.gt(amountToBuy, directSum)) { + if (!formula.isInvertible()) { + throw new Error("Cannot calculate cost with indirect sum of non-invertible formula"); + } + if (cumulativeCost) { if (!formula.isIntegrable()) { throw new Error( - "Cannot calculate cost with spending resources of non-integrable formula" + "Cannot calculate cost with cumulative cost of non-integrable formula" ); } cost = Decimal.sub(formula.evaluateIntegral(newValue), formula.evaluateIntegral()); + if (targetValue.gt(1e308)) { + // Too large of a number for directSum to make a difference, + // just get the cost and multiply by summed purchases + return Decimal.add( + cost, + Decimal.sub(targetValue, newValue).times(formula.evaluate(newValue)) + ); + } + } else { + cost = formula.evaluate(newValue); + newValue = newValue.add(1); + if (targetValue.gt(1e308)) { + // Too large of a number for directSum to make a difference, + // just get the cost and multiply by summed purchases + return Decimal.sub(targetValue, newValue).add(1).times(cost); + } } - if (targetValue.gt(1e308)) { - // Too large of a number for summedPurchases to make a difference, - // just get the cost and multiply by summed purchases - return Decimal.add( - cost, - Decimal.sub(targetValue, newValue).times(formula.evaluate(newValue)) - ); - } - for (let i = newValue.toNumber(); i < targetValue.toNumber(); i++) { - cost = Decimal.add(cost, formula.evaluate(i)); - } - } else { - cost = formula.evaluate(newValue); - newValue = newValue.add(1); - if (targetValue.gt(1e308)) { - // Too large of a number for summedPurchases to make a difference, - // just get the cost and multiply by summed purchases - return Decimal.sub(targetValue, newValue).add(1).times(cost); - } - for (let i = newValue.toNumber(); i < targetValue.toNumber(); i++) { - cost = Decimal.add(cost, formula.evaluate(i)); - } + } + + // Direct sum + for (let i = newValue.toNumber(); i < targetValue.toNumber(); i++) { + cost = Decimal.add(cost, formula.evaluate(i)); } return cost; } diff --git a/src/game/requirements.tsx b/src/game/requirements.tsx index 0b00192..60f0e20 100644 --- a/src/game/requirements.tsx +++ b/src/game/requirements.tsx @@ -20,7 +20,7 @@ import { createLazyProxy } from "util/proxies"; import { joinJSX, renderJSX } from "util/vue"; import { computed, unref } from "vue"; import Formula, { calculateCost, calculateMaxAffordable } from "./formulas/formulas"; -import type { GenericFormula, InvertibleFormula } from "./formulas/types"; +import type { GenericFormula } from "./formulas/types"; import { DefaultValue, Persistent } from "./persistence"; /** @@ -86,7 +86,15 @@ export interface CostRequirementOptions { * When calculating multiple levels to be handled at once, whether it should consider resources used for each level as spent. Setting this to false causes calculations to be faster with larger numbers and supports more math functions. * @see {Formula} */ - spendResources?: Computable<boolean>; + cumulativeCost?: Computable<boolean>; + /** + * Upper limit on levels that can be performed at once. Defaults to 1. + */ + maxBulkAmount?: Computable<DecimalSource>; + /** + * When calculating requirement for multiple levels, how many should be directly summed for increase accuracy. High numbers can cause lag. Defaults to 10 if cumulative cost, 0 otherwise. + */ + directSum?: Computable<number>; /** * Pass-through to {@link Requirement.pay}. May be required for maximizing support. * @see {@link cost} for restrictions on maximizing support. @@ -100,7 +108,7 @@ export type CostRequirement = Replace< cost: ProcessedComputable<DecimalSource> | GenericFormula; visibility: ProcessedComputable<Visibility.Visible | Visibility.None | boolean>; requiresPay: ProcessedComputable<boolean>; - spendResources: ProcessedComputable<boolean>; + cumulativeCost: ProcessedComputable<boolean>; canMaximize: ProcessedComputable<boolean>; } >; @@ -126,7 +134,12 @@ export function createCostRequirement<T extends CostRequirementOptions>( {displayResource( req.resource, req.cost instanceof Formula - ? calculateCost(req.cost, amount ?? 1, unref(req.spendResources) as boolean) + ? calculateCost( + req.cost, + amount ?? 1, + unref(req.cumulativeCost) as boolean, + unref(req.directSum) as number + ) : unref(req.cost as ProcessedComputable<DecimalSource>) )}{" "} {req.resource.displayName} @@ -138,7 +151,12 @@ export function createCostRequirement<T extends CostRequirementOptions>( {displayResource( req.resource, req.cost instanceof Formula - ? calculateCost(req.cost, amount ?? 1, unref(req.spendResources) as boolean) + ? calculateCost( + req.cost, + amount ?? 1, + unref(req.cumulativeCost) as boolean, + unref(req.directSum) as number + ) : unref(req.cost as ProcessedComputable<DecimalSource>) )}{" "} {req.resource.displayName} @@ -150,54 +168,62 @@ export function createCostRequirement<T extends CostRequirementOptions>( processComputable(req as T, "cost"); processComputable(req as T, "requiresPay"); setDefault(req, "requiresPay", true); - processComputable(req as T, "spendResources"); - setDefault(req, "spendResources", true); + processComputable(req as T, "cumulativeCost"); + setDefault(req, "cumulativeCost", true); + processComputable(req as T, "maxBulkAmount"); + setDefault(req, "maxBulkAmount", 1); + processComputable(req as T, "directSum"); setDefault(req, "pay", function (amount?: DecimalSource) { const cost = req.cost instanceof Formula - ? calculateCost(req.cost, amount ?? 1, unref(req.spendResources) as boolean) + ? calculateCost( + req.cost, + amount ?? 1, + unref(req.cumulativeCost) as boolean, + unref(req.directSum) as number + ) : unref(req.cost as ProcessedComputable<DecimalSource>); req.resource.value = Decimal.sub(req.resource.value, cost).max(0); }); - req.canMaximize = computed( - () => - req.cost instanceof Formula && - req.cost.isInvertible() && - (unref(req.spendResources) === false || req.cost.isIntegrable()) - ); + req.canMaximize = computed(() => { + if (!(req.cost instanceof Formula)) { + return false; + } + const maxBulkAmount = unref(req.maxBulkAmount as ProcessedComputable<DecimalSource>); + if (Decimal.lte(maxBulkAmount, 1)) { + return false; + } + const cumulativeCost = unref(req.cumulativeCost as ProcessedComputable<boolean>); + const directSum = + unref(req.directSum as ProcessedComputable<number>) ?? (cumulativeCost ? 10 : 0); + if (Decimal.lte(maxBulkAmount, directSum)) { + return true; + } + if (!req.cost.isInvertible()) { + return false; + } + if (cumulativeCost === true && !req.cost.isIntegrable()) { + return false; + } + return true; + }); - if (req.cost instanceof Formula && req.cost.isInvertible()) { - const maxAffordable = calculateMaxAffordable( + if (req.cost instanceof Formula) { + req.requirementMet = calculateMaxAffordable( req.cost, req.resource, - unref(req.spendResources) as boolean + req.cumulativeCost ?? true, + req.directSum, + req.maxBulkAmount ); - req.requirementMet = computed(() => { - if (unref(req.canMaximize)) { - return maxAffordable.value; - } else { - if (req.cost instanceof Formula) { - return Decimal.gte(req.resource.value, req.cost.evaluate()); - } else { - return Decimal.gte( - req.resource.value, - unref(req.cost as ProcessedComputable<DecimalSource>) - ); - } - } - }); } else { - req.requirementMet = computed(() => { - if (req.cost instanceof Formula) { - return Decimal.gte(req.resource.value, req.cost.evaluate()); - } else { - return Decimal.gte( - req.resource.value, - unref(req.cost as ProcessedComputable<DecimalSource>) - ); - } - }); + req.requirementMet = computed(() => + Decimal.gte( + req.resource.value, + unref(req.cost as ProcessedComputable<DecimalSource>) + ) + ); } return req as CostRequirement; @@ -328,7 +354,7 @@ export function payByDivision(this: CostRequirement, amount?: DecimalSource) { ? calculateCost( this.cost, amount ?? 1, - unref(this.spendResources as ProcessedComputable<boolean> | undefined) ?? true + unref(this.cumulativeCost as ProcessedComputable<boolean> | undefined) ?? true ) : unref(this.cost as ProcessedComputable<DecimalSource>); this.resource.value = Decimal.div(this.resource.value, cost); diff --git a/tests/game/formulas.test.ts b/tests/game/formulas.test.ts index c0c067a..3acc944 100644 --- a/tests/game/formulas.test.ts +++ b/tests/game/formulas.test.ts @@ -1073,13 +1073,20 @@ describe("Buy Max", () => { beforeAll(() => { resource = createResource(ref(100000)); }); - describe("Without spending", () => { - test("Throws on formula with non-invertible integral", () => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - /* @ts-ignore */ - const maxAffordable = calculateMaxAffordable(Formula.neg(10), resource, false); + describe("Without cumulative cost", () => { + test("Throws on calculating max affordable of non-invertible formula", () => { + const purchases = ref(1); + const variable = Formula.variable(purchases); + const formula = Formula.abs(variable); + const maxAffordable = calculateMaxAffordable(formula, resource, false); expect(() => maxAffordable.value).toThrow(); }); + test("Throws on calculating cost of non-invertible formula", () => { + const purchases = ref(1); + const variable = Formula.variable(purchases); + const formula = Formula.abs(variable); + expect(() => calculateCost(formula, 5, false, 0)).toThrow(); + }); test("Calculates max affordable and cost correctly", () => { const variable = Formula.variable(0); const formula = Formula.pow(1.05, variable).times(100); @@ -1089,7 +1096,7 @@ describe("Buy Max", () => { Decimal.pow(1.05, 141).times(100) ); }); - test("Calculates max affordable and cost correctly with summing last purchases", () => { + test("Calculates max affordable and cost correctly with direct sum", () => { const variable = Formula.variable(0); const formula = Formula.pow(1.05, variable).times(100); const maxAffordable = calculateMaxAffordable(formula, resource, false, 4); @@ -1102,11 +1109,20 @@ describe("Buy Max", () => { expect(calculatedCost).compare_tolerance(actualCost); }); }); - describe("With spending", () => { + describe("With cumulative cost", () => { test("Throws on calculating max affordable of non-invertible formula", () => { - const maxAffordable = calculateMaxAffordable(Formula.abs(10), resource); + const purchases = ref(1); + const variable = Formula.variable(purchases); + const formula = Formula.abs(variable); + const maxAffordable = calculateMaxAffordable(formula, resource, true); expect(() => maxAffordable.value).toThrow(); }); + test("Throws on calculating cost of non-invertible formula", () => { + const purchases = ref(1); + const variable = Formula.variable(purchases); + const formula = Formula.abs(variable); + expect(() => calculateCost(formula, 5, true, 0)).toThrow(); + }); test("Estimates max affordable and cost correctly with 0 purchases", () => { const purchases = ref(0); const variable = Formula.variable(purchases); @@ -1163,7 +1179,7 @@ describe("Buy Max", () => { Decimal.sub(actualCost, calculatedCost).abs().div(actualCost).toNumber() ).toBeLessThan(0.1); }); - test("Estimates max affordable and cost more accurately with summing last purchases", () => { + test("Estimates max affordable and cost more accurately with direct sum", () => { const purchases = ref(1); const variable = Formula.variable(purchases); const formula = Formula.pow(1.05, variable).times(100); @@ -1190,7 +1206,7 @@ describe("Buy Max", () => { Decimal.sub(actualCost, calculatedCost).abs().div(actualCost).toNumber() ).toBeLessThan(0.02); }); - test("Handles summing purchases when making few purchases", () => { + test("Handles direct sum when making few purchases", () => { const purchases = ref(90); const variable = Formula.variable(purchases); const formula = Formula.pow(1.05, variable).times(100); @@ -1218,7 +1234,7 @@ describe("Buy Max", () => { // Since we're summing all the purchases this should be equivalent expect(calculatedCost).compare_tolerance(actualCost); }); - test("Handles summing purchases when making very few purchases", () => { + test("Handles direct sum when making very few purchases", () => { const purchases = ref(0); const variable = Formula.variable(purchases); const formula = variable.add(1); @@ -1236,7 +1252,7 @@ describe("Buy Max", () => { // Since we're summing all the purchases this should be equivalent expect(calculatedCost).compare_tolerance(actualCost); }); - test("Handles summing purchases when over e308 purchases", () => { + test("Handles direct sum when over e308 purchases", () => { resource.value = "1ee308"; const purchases = ref(0); const variable = Formula.variable(purchases); @@ -1247,7 +1263,7 @@ describe("Buy Max", () => { expect(Decimal.isFinite(calculatedCost)).toBe(true); resource.value = 100000; }); - test("Handles summing purchases of non-integrable formula", () => { + test("Handles direct sum of non-integrable formula", () => { const purchases = ref(0); const formula = Formula.variable(purchases).abs(); expect(() => calculateCost(formula, 10)).not.toThrow(); diff --git a/tests/game/requirements.test.ts b/tests/game/requirements.test.ts index 2222276..2f42414 100644 --- a/tests/game/requirements.test.ts +++ b/tests/game/requirements.test.ts @@ -11,6 +11,7 @@ import { Requirement, requirementsMet } from "game/requirements"; +import Decimal from "util/bignum"; import { beforeAll, describe, expect, test } from "vitest"; import { isRef, ref, unref } from "vue"; import "../utils"; @@ -26,8 +27,7 @@ describe("Creating cost requirement", () => { beforeAll(() => { requirement = createCostRequirement(() => ({ resource, - cost: 10, - spendResources: false + cost: 10 })); }); @@ -44,7 +44,7 @@ describe("Creating cost requirement", () => { }); test("is visible", () => expect(requirement.visibility).toBe(Visibility.Visible)); test("requires pay", () => expect(requirement.requiresPay).toBe(true)); - test("does not spend resources", () => expect(requirement.spendResources).toBe(false)); + test("does not spend resources", () => expect(requirement.cumulativeCost).toBe(true)); test("cannot maximize", () => expect(unref(requirement.canMaximize)).toBe(false)); }); @@ -56,8 +56,9 @@ describe("Creating cost requirement", () => { cost: Formula.variable(resource).times(10), visibility: Visibility.None, requiresPay: false, - maximize: true, - spendResources: true, + cumulativeCost: false, + maxBulkAmount: Decimal.dInf, + directSum: 5, // eslint-disable-next-line @typescript-eslint/no-empty-function pay() {} })); @@ -69,15 +70,18 @@ describe("Creating cost requirement", () => { requirement.pay.length === 1); test("is not visible", () => expect(requirement.visibility).toBe(Visibility.None)); test("does not require pay", () => expect(requirement.requiresPay).toBe(false)); - test("spends resources", () => expect(requirement.spendResources).toBe(true)); + test("spends resources", () => expect(requirement.cumulativeCost).toBe(false)); test("can maximize", () => expect(unref(requirement.canMaximize)).toBe(true)); + test("maxBulkAmount is set", () => + expect(unref(requirement.maxBulkAmount)).compare_tolerance(Decimal.dInf)); + test("directSum is set", () => expect(unref(requirement.directSum)).toBe(5)); }); test("Requirement met when meeting the cost", () => { const requirement = createCostRequirement(() => ({ resource, cost: 10, - spendResources: false + cumulativeCost: false })); expect(unref(requirement.requirementMet)).toBe(true); }); @@ -86,13 +90,23 @@ describe("Creating cost requirement", () => { const requirement = createCostRequirement(() => ({ resource, cost: 100, - spendResources: false + cumulativeCost: false })); expect(unref(requirement.requirementMet)).toBe(false); }); describe("canMaximize works correctly", () => { test("Cost function cannot maximize", () => + expect( + unref( + createCostRequirement(() => ({ + resource, + cost: () => 10, + maxBulkAmount: Decimal.dInf + })).canMaximize + ) + ).toBe(false)); + test("Integrable formula cannot maximize if maxBulkAmount is left at 1", () => expect( unref( createCostRequirement(() => ({ @@ -101,82 +115,114 @@ describe("Creating cost requirement", () => { })).canMaximize ) ).toBe(false)); - test("Non-invertible formula cannot maximize", () => + test("Non-invertible formula cannot maximize when max bulk amount is above direct sum", () => expect( unref( createCostRequirement(() => ({ resource, - cost: Formula.variable(resource).abs() + cost: Formula.variable(resource).abs(), + maxBulkAmount: Decimal.dInf })).canMaximize ) ).toBe(false)); - test("Invertible formula can maximize if spendResources is false", () => + test("Non-invertible formula can maximize when max bulk amount is lte direct sum", () => + expect( + unref( + createCostRequirement(() => ({ + resource, + cost: Formula.variable(resource).abs(), + maxBulkAmount: 20, + directSum: 20 + })).canMaximize + ) + ).toBe(true)); + test("Invertible formula can maximize if cumulativeCost is false", () => expect( unref( createCostRequirement(() => ({ resource, cost: Formula.variable(resource).lambertw(), - spendResources: false + cumulativeCost: false, + maxBulkAmount: Decimal.dInf })).canMaximize ) ).toBe(true)); - test("Invertible formula cannot maximize if spendResources is true", () => + test("Invertible formula cannot maximize if cumulativeCost is true", () => expect( unref( createCostRequirement(() => ({ resource, cost: Formula.variable(resource).lambertw(), - spendResources: true + cumulativeCost: true, + maxBulkAmount: Decimal.dInf })).canMaximize ) ).toBe(false)); - test("Integrable formula can maximize if spendResources is false", () => + test("Integrable formula can maximize if cumulativeCost is false", () => expect( unref( createCostRequirement(() => ({ resource, cost: Formula.variable(resource).pow(2), - spendResources: false + cumulativeCost: false, + maxBulkAmount: Decimal.dInf })).canMaximize ) ).toBe(true)); - test("Integrable formula can maximize if spendResources is true", () => + test("Integrable formula can maximize if cumulativeCost is true", () => expect( unref( createCostRequirement(() => ({ resource, cost: Formula.variable(resource).pow(2), - spendResources: true + cumulativeCost: true, + maxBulkAmount: Decimal.dInf })).canMaximize ) ).toBe(true)); }); + + test("Requirements met capped by maxBulkAmount", () => + expect( + unref( + createCostRequirement(() => ({ + resource, + cost: Formula.variable(resource).times(0), + maxBulkAmount: 10 + })).requirementMet + ) + ).compare_tolerance(10)); + + test("Direct sum respected", () => + expect( + unref( + createCostRequirement(() => ({ + resource, + cost: Formula.variable(resource).times(0), + maxBulkAmount: 10 + })).requirementMet + ) + ).compare_tolerance(10)); }); -describe("Creating visibility requirement", () => { - test("Requirement met when visible", () => { - const requirement = createVisibilityRequirement({ visibility: Visibility.Visible }); - expect(unref(requirement.requirementMet)).toBe(true); - }); - - test("Requirement not met when not visible", () => { - let requirement = createVisibilityRequirement({ visibility: Visibility.None }); - expect(unref(requirement.requirementMet)).toBe(false); - requirement = createVisibilityRequirement({ visibility: false }); - expect(unref(requirement.requirementMet)).toBe(false); - }); +test("Creating visibility requirement", () => { + const visibility = ref<Visibility.None | Visibility.Visible | boolean>(Visibility.Visible); + const requirement = createVisibilityRequirement({ visibility }); + expect(unref(requirement.requirementMet)).toBe(true); + visibility.value = true; + expect(unref(requirement.requirementMet)).toBe(true); + visibility.value = Visibility.None; + expect(unref(requirement.requirementMet)).toBe(false); + visibility.value = false; + expect(unref(requirement.requirementMet)).toBe(false); }); -describe("Creating boolean requirement", () => { - test("Requirement met when true", () => { - const requirement = createBooleanRequirement(ref(true)); - expect(unref(requirement.requirementMet)).toBe(true); - }); - - test("Requirement not met when false", () => { - const requirement = createBooleanRequirement(ref(false)); - expect(unref(requirement.requirementMet)).toBe(false); - }); +test("Creating boolean requirement", () => { + const req = ref(true); + const requirement = createBooleanRequirement(req); + expect(unref(requirement.requirementMet)).toBe(true); + req.value = false; + expect(unref(requirement.requirementMet)).toBe(false); }); describe("Checking all requirements met", () => { @@ -208,7 +254,7 @@ describe("Checking maximum levels of requirements met", () => { createCostRequirement(() => ({ resource: createResource(ref(10)), cost: Formula.variable(0), - spendResources: false + cumulativeCost: false })) ]; expect(maxRequirementsMet(requirements)).compare_tolerance(0); @@ -220,7 +266,8 @@ describe("Checking maximum levels of requirements met", () => { createCostRequirement(() => ({ resource: createResource(ref(10)), cost: Formula.variable(0), - spendResources: false + cumulativeCost: false, + maxBulkAmount: Decimal.dInf })) ]; expect(maxRequirementsMet(requirements)).compare_tolerance(10); @@ -233,12 +280,12 @@ test("Paying requirements", () => { resource, cost: 10, requiresPay: false, - spendResources: false + cumulativeCost: false })); const payment = createCostRequirement(() => ({ resource, cost: 10, - spendResources: false + cumulativeCost: false })); payRequirements([noPayment, payment]); expect(resource.value).compare_tolerance(90); From bbe0aaa31e9dde5735ffa3239881ffcf0f388283 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 13 May 2023 15:23:53 -0500 Subject: [PATCH 087/134] Fix directSum breaking formulas --- src/game/formulas/formulas.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index 5ecdedb..4aaf257 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -1447,6 +1447,7 @@ export function calculateMaxAffordable( } affordable = Decimal.clampMax(affordable, maxBulkAmount); if (directSum > 0) { + const preSumAffordable = affordable; affordable = Decimal.sub(affordable, directSum).clampMin(0); let summedCost; if (cumulativeCost) { @@ -1458,7 +1459,8 @@ export function calculateMaxAffordable( } while ( Decimal.lt(affordable, maxBulkAmount) && - Decimal.lt(affordable, Number.MAX_SAFE_INTEGER) + Decimal.lt(affordable, Number.MAX_SAFE_INTEGER) && + Decimal.add(preSumAffordable, 1).gte(affordable) ) { const nextCost = formula.evaluate( affordable.add(unref(formula.innermostVariable) ?? 0) From 4e9fb1bc9b93c31cb0d64e14b05ff2183d4e3afe Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Mon, 15 May 2023 07:40:00 -0500 Subject: [PATCH 088/134] Fixed tests --- tests/game/requirements.test.ts | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/tests/game/requirements.test.ts b/tests/game/requirements.test.ts index 2f42414..f6143ca 100644 --- a/tests/game/requirements.test.ts +++ b/tests/game/requirements.test.ts @@ -187,19 +187,9 @@ describe("Creating cost requirement", () => { unref( createCostRequirement(() => ({ resource, - cost: Formula.variable(resource).times(0), - maxBulkAmount: 10 - })).requirementMet - ) - ).compare_tolerance(10)); - - test("Direct sum respected", () => - expect( - unref( - createCostRequirement(() => ({ - resource, - cost: Formula.variable(resource).times(0), - maxBulkAmount: 10 + cost: Formula.variable(resource).times(0.0001), + maxBulkAmount: 10, + cumulativeCost: false })).requirementMet ) ).compare_tolerance(10)); From 500e412fdb0062d26fcff0ef4c62be90bab5421b Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Mon, 15 May 2023 21:10:52 -0500 Subject: [PATCH 089/134] Rebalance resource levels and implement portal costs --- src/game/formulas/operations.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/formulas/operations.ts b/src/game/formulas/operations.ts index 0e39d58..61f16bc 100644 --- a/src/game/formulas/operations.ts +++ b/src/game/formulas/operations.ts @@ -399,7 +399,7 @@ export function integratePow10(stack: SubstitutionStack, lhs: FormulaSource) { export function invertPowBase(value: DecimalSource, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { - return lhs.invert(Decimal.ln(value).div(unrefFormulaSource(rhs))); + return lhs.invert(Decimal.ln(value).div(Decimal.ln(unrefFormulaSource(rhs)))); } else if (hasVariable(rhs)) { return rhs.invert(Decimal.root(unrefFormulaSource(lhs), value)); } From d3a74da5ab35cdd7c8ff8098536b1de6652b92ab Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Mon, 15 May 2023 21:16:28 -0500 Subject: [PATCH 090/134] Add utility for getting requirement that's met when a conversion can convert --- src/features/conversion.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/features/conversion.ts b/src/features/conversion.ts index 9f7d176..aa19839 100644 --- a/src/features/conversion.ts +++ b/src/features/conversion.ts @@ -292,3 +292,20 @@ export function setupPassiveGeneration( } }); } + +/** + * Creates requirement that is met when the conversion hits a specified gain amount + * @param conversion The conversion to check the gain amount of + * @param minGainAmount The minimum gain amount that must be met for the requirement to be met + */ +export function createCanConvertRequirement( + conversion: GenericConversion, + minGainAmount: Computable<DecimalSource> = 1, + display?: CoercableComponent +) { + const computedMinGainAmount = convertComputable(minGainAmount); + return createBooleanRequirement( + () => Decimal.gte(unref(conversion.actualGain), unref(computedMinGainAmount)), + display + ); +} From 539282bef83ea19030aa0caf5f93628a9d0551b6 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Tue, 16 May 2023 23:38:31 -0500 Subject: [PATCH 091/134] Improve error handling --- src/App.vue | 39 ++-- src/components/Error.vue | 103 +++++++++++ src/components/Layer.vue | 21 ++- src/data/common.tsx | 2 +- src/features/tabs/tabFamily.ts | 3 +- src/game/formulas/formulas.ts | 39 ++-- src/game/formulas/operations.ts | 315 +++++++++++++++++++++----------- src/game/layers.tsx | 4 +- src/game/persistence.ts | 17 +- src/game/state.ts | 7 +- src/main.ts | 27 ++- src/util/proxies.ts | 2 +- 12 files changed, 424 insertions(+), 155 deletions(-) create mode 100644 src/components/Error.vue diff --git a/src/App.vue b/src/App.vue index 9613f04..6a365ef 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,18 +1,25 @@ <template> - <div id="modal-root" :style="theme" /> - <div class="app" :style="theme" :class="{ useHeader }"> - <Nav v-if="useHeader" /> - <Game /> - <TPS v-if="unref(showTPS)" /> - <GameOverScreen /> - <NaNScreen /> - <component :is="gameComponent" /> - </div> + <div v-if="appErrors.length > 0" class="error-container" :style="theme"><Error :errors="appErrors" /></div> + <template v-else> + <div id="modal-root" :style="theme" /> + <div class="app" :style="theme" :class="{ useHeader }"> + <Nav v-if="useHeader" /> + <Game /> + <TPS v-if="unref(showTPS)" /> + <GameOverScreen /> + <NaNScreen /> + <component :is="gameComponent" /> + </div> + </template> </template> <script setup lang="tsx"> +import "@fontsource/roboto-mono"; +import Error from "components/Error.vue"; import { jsx } from "features/feature"; +import state from "game/state"; import { coerceComponent, render } from "util/vue"; +import { CSSProperties, watch } from "vue"; import { computed, toRef, unref } from "vue"; import Game from "./components/Game.vue"; import GameOverScreen from "./components/GameOverScreen.vue"; @@ -23,12 +30,11 @@ import projInfo from "./data/projInfo.json"; import themes from "./data/themes"; import settings, { gameComponents } from "./game/settings"; import "./main.css"; -import "@fontsource/roboto-mono"; -import type { CSSProperties } from "vue"; const useHeader = projInfo.useHeader; const theme = computed(() => themes[settings.theme].variables as CSSProperties); const showTPS = toRef(settings, "showTPS"); +const appErrors = toRef(state, "errors"); const gameComponent = computed(() => { return coerceComponent(jsx(() => (<>{gameComponents.map(render)}</>))); @@ -51,4 +57,15 @@ const gameComponent = computed(() => { height: 100%; color: var(--foreground); } + +.error-container { + background: var(--background); + overflow: auto; + width: 100%; + height: 100%; +} + +.error-container > .error { + position: static; +} </style> diff --git a/src/components/Error.vue b/src/components/Error.vue new file mode 100644 index 0000000..19b6fe4 --- /dev/null +++ b/src/components/Error.vue @@ -0,0 +1,103 @@ +<template> + <div class="error"> + <h1 class="error-title">{{ firstError.name }}: {{ firstError.message }}</h1> + <div class="error-details" style="margin-top: -10px"> + <div v-if="firstError.cause"> + <div v-for="row in causes[0]" :key="row">{{ row }}</div> + </div> + <div v-if="firstError.stack" :style="firstError.cause ? 'margin-top: 10px' : ''"> + <div v-for="row in stacks[0]" :key="row">{{ row }}</div> + </div> + </div> + <div class="instructions"> + Check the console for more details, and consider sharing it with the developers on + <a :href="projInfo.discordLink || 'https://discord.gg/yJ4fjnjU54'" class="discord-link" + >discord</a + >!<br /> + <div v-if="errors.length > 1" style="margin-top: 20px"><h3>Other errors</h3></div> + <div v-for="(error, i) in errors.slice(1)" :key="i" style="margin-top: 20px"> + <details class="error-details"> + <summary>{{ error.name }}: {{ error.message }}</summary> + <div v-if="error.cause" style="margin-top: 10px"> + <div v-for="row in causes[i + 1]" :key="row">{{ row }}</div> + </div> + <div v-if="error.stack" style="margin-top: 10px"> + <div v-for="row in stacks[i + 1]" :key="row">{{ row }}</div> + </div> + </details> + </div> + </div> + </div> +</template> + +<script setup lang="ts"> +import projInfo from "data/projInfo.json"; +import player from "game/player"; +import { computed, onMounted } from "vue"; + +const props = defineProps<{ + errors: Error[]; +}>(); + +const firstError = computed(() => props.errors[0]); +const stacks = computed(() => + props.errors.map(error => (error.stack == null ? [] : error.stack.split("\n"))) +); +const causes = computed(() => + props.errors.map(error => + error.cause == null + ? [] + : (typeof error.cause === "string" ? error.cause : JSON.stringify(error.cause)).split( + "\n" + ) + ) +); + +onMounted(() => { + player.autosave = false; + player.devSpeed = 0; +}); +</script> + +<style scoped> +.error { + border: solid 10px var(--danger); + position: absolute; + top: 0; + left: 0; + right: 0; + text-align: left; + min-height: calc(100% - 20px); + text-align: left; + color: var(--foreground); +} + +.error-title { + background: var(--danger); + color: var(--feature-foreground); + display: block; + margin: -10px 0 10px 0; + position: sticky; + top: 0; +} + +.error-details { + white-space: nowrap; + overflow: auto; + padding: 10px; + background-color: var(--raised-background); +} + +.instructions { + padding: 10px; +} + +.discord-link { + display: inline; +} + +summary { + cursor: pointer; + user-select: none; +} +</style> diff --git a/src/components/Layer.vue b/src/components/Layer.vue index c00cf8a..1857535 100644 --- a/src/components/Layer.vue +++ b/src/components/Layer.vue @@ -1,5 +1,6 @@ <template> - <div class="layer-container" :style="{ '--layer-color': unref(color) }"> + <ErrorVue v-if="errors.length > 0" :errors="errors" /> + <div class="layer-container" :style="{ '--layer-color': unref(color) }" v-bind="$attrs" v-else> <button v-if="showGoBack" class="goBack" @click="goBack">❌</button> <button @@ -28,12 +29,12 @@ import type { CoercableComponent } from "features/feature"; import type { FeatureNode } from "game/layers"; import player from "game/player"; import { computeComponent, computeOptionalComponent, processedPropType, unwrapRef } from "util/vue"; -import type { PropType, Ref } from "vue"; -import { computed, defineComponent, toRefs, unref } from "vue"; +import { PropType, Ref, computed, defineComponent, onErrorCaptured, ref, toRefs, unref } from "vue"; import Context from "./Context.vue"; +import ErrorVue from "./Error.vue"; export default defineComponent({ - components: { Context }, + components: { Context, ErrorVue }, props: { index: { type: Number, @@ -77,13 +78,23 @@ export default defineComponent({ props.nodes.value = nodes; } + const errors = ref<Error[]>([]); + onErrorCaptured((err, instance, info) => { + console.warn(`Error caught in "${props.name}" layer`, err, instance, info); + errors.value.push( + err instanceof Error ? (err as Error) : new Error(JSON.stringify(err)) + ); + return false; + }); + return { component, minimizedComponent, showGoBack, updateNodes, unref, - goBack + goBack, + errors }; } }); diff --git a/src/data/common.tsx b/src/data/common.tsx index e7a9db0..786afa4 100644 --- a/src/data/common.tsx +++ b/src/data/common.tsx @@ -459,7 +459,7 @@ export function createFormulaPreview( const processedShowPreview = convertComputable(showPreview); const processedPreviewAmount = convertComputable(previewAmount); if (!formula.hasVariable()) { - throw new Error("Cannot create formula preview if the formula does not have a variable"); + console.error("Cannot create formula preview if the formula does not have a variable"); } return jsx(() => { if (unref(processedShowPreview)) { diff --git a/src/features/tabs/tabFamily.ts b/src/features/tabs/tabFamily.ts index 2ca544b..aa7fafc 100644 --- a/src/features/tabs/tabFamily.ts +++ b/src/features/tabs/tabFamily.ts @@ -151,8 +151,7 @@ export function createTabFamily<T extends TabFamilyOptions>( optionsFunc?: OptionsFunc<T, BaseTabFamily, GenericTabFamily> ): TabFamily<T> { if (Object.keys(tabs).length === 0) { - console.warn("Cannot create tab family with 0 tabs"); - throw new Error("Cannot create tab family with 0 tabs"); + console.error("Cannot create tab family with 0 tabs"); } const selected = persistent(Object.keys(tabs)[0], false); diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index 144dc0d..37410cb 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -2,7 +2,7 @@ import { Resource } from "features/resources/resource"; import { NonPersistent } from "game/persistence"; import Decimal, { DecimalSource, format } from "util/bignum"; import { Computable, ProcessedComputable, convertComputable } from "util/computed"; -import { ComputedRef, Ref, computed, ref, unref } from "vue"; +import { Ref, computed, ref, unref } from "vue"; import * as ops from "./operations"; import type { EvaluateFunction, @@ -104,7 +104,7 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[ private setupConstant({ inputs }: { inputs: [FormulaSource] }): InternalFormulaProperties<T> { if (inputs.length !== 1) { - throw new Error("Evaluate function is required if inputs is not length 1"); + console.error("Evaluate function is required if inputs is not length 1"); } return { inputs: inputs as T, @@ -250,7 +250,8 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[ } return lhs.invert(value); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } return new Formula({ inputs: [value], @@ -294,7 +295,8 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[ !formula.isInvertible() || (elseFormula != null && !elseFormula.isInvertible()) ) { - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } if (unref(processedCondition)) { return lhs.invert(formula.invert(value)); @@ -1260,7 +1262,8 @@ export default class Formula< } else if (this.inputs.length === 1 && this.hasVariable()) { return value; } - throw new Error("Cannot invert non-invertible formula"); + console.error("Cannot invert non-invertible formula"); + return 0; } /** @@ -1270,7 +1273,8 @@ export default class Formula< */ evaluateIntegral(variable?: DecimalSource): DecimalSource { if (!this.isIntegrable()) { - throw new Error("Cannot evaluate integral of formula without integral"); + console.error("Cannot evaluate integral of formula without integral"); + return 0; } return this.getIntegralFormula().evaluate(variable); } @@ -1282,7 +1286,8 @@ export default class Formula< */ invertIntegral(value: DecimalSource): DecimalSource { if (!this.isIntegrable() || !this.getIntegralFormula().isInvertible()) { - throw new Error("Cannot invert integral of formula without invertible integral"); + console.error("Cannot invert integral of formula without invertible integral"); + return 0; } return (this.getIntegralFormula() as InvertibleFormula).invert(value); } @@ -1309,7 +1314,8 @@ export default class Formula< // We're the complex operation of this formula stack = []; if (this.internalIntegrate == null) { - throw new Error("Cannot integrate formula with non-integrable operation"); + console.error("Cannot integrate formula with non-integrable operation"); + return Formula.constant(0); } let value = this.internalIntegrate.call(this, stack, ...this.inputs); stack.forEach(func => (value = func(value))); @@ -1329,14 +1335,15 @@ export default class Formula< ) { this.integralFormula = this; } else { - throw new Error("Cannot integrate formula without variable"); + console.error("Cannot integrate formula without variable"); + return Formula.constant(0); } } return this.integralFormula; } else { // "Inner" part of the formula if (this.applySubstitution == null) { - throw new Error("Cannot have two complex operations in an integrable formula"); + console.error("Cannot have two complex operations in an integrable formula"); } stack.push((variable: GenericFormula) => // eslint-disable-next-line @typescript-eslint/no-non-null-assertion @@ -1353,7 +1360,8 @@ export default class Formula< ) { return this; } else { - throw new Error("Cannot integrate formula without variable"); + console.error("Cannot integrate formula without variable"); + return Formula.constant(0); } } } @@ -1429,9 +1437,10 @@ export function calculateMaxAffordable( let affordable; if (unref(computedSpendResources)) { if (!formula.isIntegrable() || !formula.isIntegralInvertible()) { - throw new Error( + console.error( "Cannot calculate max affordable of formula with non-invertible integral" ); + return 0; } affordable = Decimal.floor( formula.invertIntegral(Decimal.add(resource.value, formula.evaluateIntegral())) @@ -1441,7 +1450,8 @@ export function calculateMaxAffordable( } } else { if (!formula.isInvertible()) { - throw new Error("Cannot calculate max affordable of non-invertible formula"); + console.error("Cannot calculate max affordable of non-invertible formula"); + return 0; } affordable = Decimal.floor(formula.invert(resource.value)); if (summedPurchases == null) { @@ -1501,9 +1511,10 @@ export function calculateCost( if (spendResources) { if (Decimal.gt(amountToBuy, summedPurchases)) { if (!formula.isIntegrable()) { - throw new Error( + console.error( "Cannot calculate cost with spending resources of non-integrable formula" ); + return 0; } cost = Decimal.sub(formula.evaluateIntegral(newValue), formula.evaluateIntegral()); } diff --git a/src/game/formulas/operations.ts b/src/game/formulas/operations.ts index 0e39d58..56b2af1 100644 --- a/src/game/formulas/operations.ts +++ b/src/game/formulas/operations.ts @@ -12,17 +12,20 @@ export function invertNeg(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.neg(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateNeg(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } return Formula.neg(lhs.getIntegralFormula(stack)); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function applySubstitutionNeg(value: GenericFormula) { @@ -35,24 +38,28 @@ export function invertAdd(value: DecimalSource, lhs: FormulaSource, rhs: Formula } else if (hasVariable(rhs)) { return rhs.invert(Decimal.sub(value, unrefFormulaSource(lhs))); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateAdd(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.times(rhs, lhs.innermostVariable ?? 0).add(x); } else if (hasVariable(rhs)) { if (!rhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = rhs.getIntegralFormula(stack); return Formula.times(lhs, rhs.innermostVariable ?? 0).add(x); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function integrateInnerAdd( @@ -62,18 +69,21 @@ export function integrateInnerAdd( ) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.add(x, rhs); } else if (hasVariable(rhs)) { if (!rhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = rhs.getIntegralFormula(stack); return Formula.add(x, lhs); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertSub(value: DecimalSource, lhs: FormulaSource, rhs: FormulaSource) { @@ -82,24 +92,28 @@ export function invertSub(value: DecimalSource, lhs: FormulaSource, rhs: Formula } else if (hasVariable(rhs)) { return rhs.invert(Decimal.sub(unrefFormulaSource(lhs), value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateSub(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.sub(x, Formula.times(rhs, lhs.innermostVariable ?? 0)); } else if (hasVariable(rhs)) { if (!rhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = rhs.getIntegralFormula(stack); return Formula.times(lhs, rhs.innermostVariable ?? 0).sub(x); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function integrateInnerSub( @@ -109,18 +123,21 @@ export function integrateInnerSub( ) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.sub(x, rhs); } else if (hasVariable(rhs)) { if (!rhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = rhs.getIntegralFormula(stack); return Formula.sub(x, lhs); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertMul(value: DecimalSource, lhs: FormulaSource, rhs: FormulaSource) { @@ -129,24 +146,28 @@ export function invertMul(value: DecimalSource, lhs: FormulaSource, rhs: Formula } else if (hasVariable(rhs)) { return rhs.invert(Decimal.div(value, unrefFormulaSource(lhs))); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateMul(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.times(x, rhs); } else if (hasVariable(rhs)) { if (!rhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = rhs.getIntegralFormula(stack); return Formula.times(x, lhs); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function applySubstitutionMul( @@ -159,7 +180,8 @@ export function applySubstitutionMul( } else if (hasVariable(rhs)) { return Formula.div(value, lhs); } - throw new Error("Could not apply substitution due to no input being a variable"); + console.error("Could not apply substitution due to no input being a variable"); + return Formula.constant(0); } export function invertDiv(value: DecimalSource, lhs: FormulaSource, rhs: FormulaSource) { @@ -168,24 +190,28 @@ export function invertDiv(value: DecimalSource, lhs: FormulaSource, rhs: Formula } else if (hasVariable(rhs)) { return rhs.invert(Decimal.div(unrefFormulaSource(lhs), value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateDiv(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.div(x, rhs); } else if (hasVariable(rhs)) { if (!rhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = rhs.getIntegralFormula(stack); return Formula.div(lhs, x); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function applySubstitutionDiv( @@ -198,32 +224,37 @@ export function applySubstitutionDiv( } else if (hasVariable(rhs)) { return Formula.mul(value, lhs); } - throw new Error("Could not apply substitution due to no input being a variable"); + console.error("Could not apply substitution due to no input being a variable"); + return Formula.constant(0); } export function invertRecip(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.recip(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateRecip(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.ln(x); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertLog10(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.pow10(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } function internalIntegrateLog10(lhs: DecimalSource) { @@ -235,13 +266,15 @@ function internalInvertIntegralLog10(value: DecimalSource, lhs: FormulaSource) { const numerator = ln10.times(value); return lhs.invert(numerator.div(numerator.div(Math.E).lambertw())); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateLog10(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } return new Formula({ inputs: [lhs.getIntegralFormula(stack)], @@ -249,7 +282,8 @@ export function integrateLog10(stack: SubstitutionStack, lhs: FormulaSource) { invert: internalInvertIntegralLog10 }); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertLog(value: DecimalSource, lhs: FormulaSource, rhs: FormulaSource) { @@ -258,7 +292,8 @@ export function invertLog(value: DecimalSource, lhs: FormulaSource, rhs: Formula } else if (hasVariable(rhs)) { return rhs.invert(Decimal.root(unrefFormulaSource(lhs), value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } function internalIntegrateLog(lhs: DecimalSource, rhs: DecimalSource) { @@ -270,13 +305,15 @@ function internalInvertIntegralLog(value: DecimalSource, lhs: FormulaSource, rhs const numerator = Decimal.ln(unrefFormulaSource(rhs)).times(value); return lhs.invert(numerator.div(numerator.div(Math.E).lambertw())); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateLog(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } return new Formula({ inputs: [lhs.getIntegralFormula(stack), rhs], @@ -284,14 +321,16 @@ export function integrateLog(stack: SubstitutionStack, lhs: FormulaSource, rhs: invert: internalInvertIntegralLog }); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertLog2(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.pow(2, value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } function internalIntegrateLog2(lhs: DecimalSource) { @@ -303,13 +342,15 @@ function internalInvertIntegralLog2(value: DecimalSource, lhs: FormulaSource) { const numerator = Decimal.ln(2).times(value); return lhs.invert(numerator.div(numerator.div(Math.E).lambertw())); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateLog2(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } return new Formula({ inputs: [lhs.getIntegralFormula(stack)], @@ -317,14 +358,16 @@ export function integrateLog2(stack: SubstitutionStack, lhs: FormulaSource) { invert: internalInvertIntegralLog2 }); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertLn(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.exp(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } function internalIntegrateLn(lhs: DecimalSource) { @@ -335,13 +378,15 @@ function internalInvertIntegralLn(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.div(value, Decimal.div(value, Math.E).lambertw())); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateLn(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } return new Formula({ inputs: [lhs.getIntegralFormula(stack)], @@ -349,7 +394,8 @@ export function integrateLn(stack: SubstitutionStack, lhs: FormulaSource) { invert: internalInvertIntegralLn }); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertPow(value: DecimalSource, lhs: FormulaSource, rhs: FormulaSource) { @@ -358,43 +404,50 @@ export function invertPow(value: DecimalSource, lhs: FormulaSource, rhs: Formula } else if (hasVariable(rhs)) { return rhs.invert(Decimal.ln(value).div(Decimal.ln(unrefFormulaSource(lhs)))); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integratePow(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); const pow = Formula.add(rhs, 1); return Formula.pow(x, pow).div(pow); } else if (hasVariable(rhs)) { if (!rhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = rhs.getIntegralFormula(stack); return Formula.pow(lhs, x).div(Formula.ln(lhs)); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertPow10(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.root(value, 10)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integratePow10(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.pow10(x).div(Formula.ln(10)); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertPowBase(value: DecimalSource, lhs: FormulaSource, rhs: FormulaSource) { @@ -403,25 +456,29 @@ export function invertPowBase(value: DecimalSource, lhs: FormulaSource, rhs: For } else if (hasVariable(rhs)) { return rhs.invert(Decimal.root(unrefFormulaSource(lhs), value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integratePowBase(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.pow(rhs, x).div(Formula.ln(rhs)); } else if (hasVariable(rhs)) { if (!rhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = rhs.getIntegralFormula(stack); const denominator = Formula.add(lhs, 1); return Formula.pow(x, denominator).div(denominator); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertRoot(value: DecimalSource, lhs: FormulaSource, rhs: FormulaSource) { @@ -430,36 +487,42 @@ export function invertRoot(value: DecimalSource, lhs: FormulaSource, rhs: Formul } else if (hasVariable(rhs)) { return rhs.invert(Decimal.ln(unrefFormulaSource(lhs)).div(Decimal.ln(value))); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateRoot(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.pow(x, Formula.recip(rhs).add(1)).times(rhs).div(Formula.add(rhs, 1)); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertExp(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.ln(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateExp(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.exp(x); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function tetrate( @@ -481,7 +544,8 @@ export function invertTetrate( return base.invert(Decimal.ssqrt(value)); } // Other params can't be inverted ATM - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function iteratedexp( @@ -509,7 +573,8 @@ export function invertIteratedExp( ); } // Other params can't be inverted ATM - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function iteratedLog( @@ -533,7 +598,8 @@ export function invertSlog(value: DecimalSource, lhs: FormulaSource, rhs: Formul ); } // Other params can't be inverted ATM - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function layeradd(value: DecimalSource, diff: DecimalSource, base: DecimalSource) { @@ -556,21 +622,24 @@ export function invertLayeradd( ); } // Other params can't be inverted ATM - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function invertLambertw(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.pow(Math.E, value).times(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function invertSsqrt(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.tetrate(value, 2)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function pentate(value: DecimalSource, height: DecimalSource, payload: DecimalSource) { @@ -582,226 +651,262 @@ export function invertSin(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.asin(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateSin(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.cos(x).neg(); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertCos(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.acos(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateCos(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.sin(x); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertTan(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.atan(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateTan(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.cos(x).ln().neg(); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertAsin(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.sin(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateAsin(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.asin(x) .times(x) .add(Formula.sqrt(Formula.sub(1, Formula.pow(x, 2)))); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertAcos(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.cos(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateAcos(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.acos(x) .times(x) .sub(Formula.sqrt(Formula.sub(1, Formula.pow(x, 2)))); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertAtan(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.tan(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateAtan(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.atan(x) .times(x) .sub(Formula.ln(Formula.pow(x, 2).add(1)).div(2)); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertSinh(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.asinh(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateSinh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.cosh(x); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertCosh(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.acosh(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateCosh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.sinh(x); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertTanh(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.atanh(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateTanh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.cosh(x).ln(); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertAsinh(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.sinh(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateAsinh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.asinh(x).times(x).sub(Formula.pow(x, 2).add(1).sqrt()); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertAcosh(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.cosh(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateAcosh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.acosh(x) .times(x) .sub(Formula.add(x, 1).sqrt().times(Formula.sub(x, 1).sqrt())); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertAtanh(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.tanh(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateAtanh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.atanh(x) .times(x) .add(Formula.sub(1, Formula.pow(x, 2)).ln().div(2)); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function createPassthroughBinaryFormula( diff --git a/src/game/layers.tsx b/src/game/layers.tsx index 6294592..bbb6079 100644 --- a/src/game/layers.tsx +++ b/src/game/layers.tsx @@ -225,7 +225,9 @@ export function createLayer<T extends LayerOptions>( addingLayers[addingLayers.length - 1] == null || addingLayers[addingLayers.length - 1] !== id ) { - throw `Adding layers stack in invalid state. This should not happen\nStack: ${addingLayers}\nTrying to pop ${layer.id}`; + throw new Error( + `Adding layers stack in invalid state. This should not happen\nStack: ${addingLayers}\nTrying to pop ${layer.id}` + ); } addingLayers.pop(); diff --git a/src/game/persistence.ts b/src/game/persistence.ts index a61d9cf..e760411 100644 --- a/src/game/persistence.ts +++ b/src/game/persistence.ts @@ -116,12 +116,7 @@ function checkNaNAndWrite<T extends State>(persistent: Persistent<T>, value: T) state.NaNPath = persistent[SaveDataPath]; state.NaNPersistent = persistent as Persistent<DecimalSource>; } - console.error( - `Attempted to save NaN value to`, - persistent[SaveDataPath]?.join("."), - persistent - ); - throw new Error("Attempted to set NaN value. See above for details"); + console.error(`Attempted to save NaN value to ${persistent[SaveDataPath]?.join(".")}`); } persistent[PersistentState].value = value; } @@ -292,8 +287,8 @@ globalBus.on("addLayer", (layer: GenericLayer, saveData: Record<string, unknown> "." )}\` when it's already present at \`${value[SaveDataPath].join( "." - )}\`. This can cause unexpected behavior when loading saves between updates.`, - value + )}\`.`, + "This can cause unexpected behavior when loading saves between updates." ); } value[SaveDataPath] = newPath; @@ -368,9 +363,9 @@ globalBus.on("addLayer", (layer: GenericLayer, saveData: Record<string, unknown> return; } console.error( - `Created persistent ref in ${layer.id} without registering it to the layer! Make sure to include everything persistent in the returned object`, - persistent, - "\nCreated at:\n" + persistent[StackTrace] + `Created persistent ref in ${layer.id} without registering it to the layer!`, + "Make sure to include everything persistent in the returned object.\n\nCreated at:\n" + + persistent[StackTrace] ); }); persistentRefs[layer.id].clear(); diff --git a/src/game/state.ts b/src/game/state.ts index db71c7b..9e672c3 100644 --- a/src/game/state.ts +++ b/src/game/state.ts @@ -1,5 +1,5 @@ import type { DecimalSource } from "util/bignum"; -import { shallowReactive } from "vue"; +import { reactive, shallowReactive } from "vue"; import type { Persistent } from "./persistence"; /** An object of global data that is not persistent. */ @@ -12,6 +12,8 @@ export interface Transient { NaNPath?: string[]; /** The ref that was being set to NaN. */ NaNPersistent?: Persistent<DecimalSource>; + /** List of errors that have occurred, to show the user. */ + errors: Error[]; } declare global { @@ -24,5 +26,6 @@ declare global { export default window.state = shallowReactive<Transient>({ lastTenTicks: [], hasNaN: false, - NaNPath: [] + NaNPath: [], + errors: reactive([]) }); diff --git a/src/main.ts b/src/main.ts index 38c9ac3..9fb753b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -2,6 +2,7 @@ import "@fontsource/material-icons"; import App from "App.vue"; import projInfo from "data/projInfo.json"; import "game/notifications"; +import state from "game/state"; import { load } from "util/save"; import { useRegisterSW } from "virtual:pwa-register/vue"; import type { App as VueApp } from "vue"; @@ -23,11 +24,30 @@ declare global { } } +const error = console.error; +console.error = function (...args) { + if (import.meta.env.DEV) { + state.errors.push(new Error(args[0], { cause: args[1] })); + } + error(...args); +}; + +window.onerror = function (event, source, lineno, colno, error) { + state.errors.push(error instanceof Error ? error : new Error(JSON.stringify(error))); + return true; +}; +window.onunhandledrejection = function (event) { + state.errors.push( + event.reason instanceof Error ? event.reason : new Error(JSON.stringify(event.reason)) + ); +}; + document.title = projInfo.title; window.projInfo = projInfo; if (projInfo.id === "") { - throw new Error( - "Project ID is empty! Please select a unique ID for this project in /src/data/projInfo.json" + console.error( + "Project ID is empty!", + "Please select a unique ID for this project in /src/data/projInfo.json" ); } @@ -43,6 +63,9 @@ requestAnimationFrame(async () => { // Create Vue const vue = (window.vue = createApp(App)); + vue.config.errorHandler = function (err, instance, info) { + console.error(err, info, instance); + }; globalBus.emit("setupVue", vue); vue.mount("#app"); diff --git a/src/util/proxies.ts b/src/util/proxies.ts index f712470..ed5d4ac 100644 --- a/src/util/proxies.ts +++ b/src/util/proxies.ts @@ -40,7 +40,7 @@ export function createLazyProxy<T extends object, S extends T>( function calculateObj(): T { if (!calculated) { if (calculating) { - throw new Error("Cyclical dependency detected. Cannot evaluate lazy proxy."); + console.error("Cyclical dependency detected. Cannot evaluate lazy proxy."); } calculating = true; Object.assign(obj, objectFunc.call(obj, obj)); From ab3b180db844c6f61276e7067a8a67d72f17bd2d Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Tue, 16 May 2023 23:38:31 -0500 Subject: [PATCH 092/134] Improve error handling --- src/App.vue | 39 ++-- src/components/Error.vue | 103 +++++++++++ src/components/Layer.vue | 21 ++- src/data/common.tsx | 2 +- src/features/tabs/tabFamily.ts | 3 +- src/game/formulas/formulas.ts | 42 +++-- src/game/formulas/operations.ts | 315 +++++++++++++++++++++----------- src/game/layers.tsx | 4 +- src/game/persistence.ts | 17 +- src/game/state.ts | 7 +- src/main.ts | 27 ++- src/util/proxies.ts | 2 +- 12 files changed, 426 insertions(+), 156 deletions(-) create mode 100644 src/components/Error.vue diff --git a/src/App.vue b/src/App.vue index 9613f04..6a365ef 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,18 +1,25 @@ <template> - <div id="modal-root" :style="theme" /> - <div class="app" :style="theme" :class="{ useHeader }"> - <Nav v-if="useHeader" /> - <Game /> - <TPS v-if="unref(showTPS)" /> - <GameOverScreen /> - <NaNScreen /> - <component :is="gameComponent" /> - </div> + <div v-if="appErrors.length > 0" class="error-container" :style="theme"><Error :errors="appErrors" /></div> + <template v-else> + <div id="modal-root" :style="theme" /> + <div class="app" :style="theme" :class="{ useHeader }"> + <Nav v-if="useHeader" /> + <Game /> + <TPS v-if="unref(showTPS)" /> + <GameOverScreen /> + <NaNScreen /> + <component :is="gameComponent" /> + </div> + </template> </template> <script setup lang="tsx"> +import "@fontsource/roboto-mono"; +import Error from "components/Error.vue"; import { jsx } from "features/feature"; +import state from "game/state"; import { coerceComponent, render } from "util/vue"; +import { CSSProperties, watch } from "vue"; import { computed, toRef, unref } from "vue"; import Game from "./components/Game.vue"; import GameOverScreen from "./components/GameOverScreen.vue"; @@ -23,12 +30,11 @@ import projInfo from "./data/projInfo.json"; import themes from "./data/themes"; import settings, { gameComponents } from "./game/settings"; import "./main.css"; -import "@fontsource/roboto-mono"; -import type { CSSProperties } from "vue"; const useHeader = projInfo.useHeader; const theme = computed(() => themes[settings.theme].variables as CSSProperties); const showTPS = toRef(settings, "showTPS"); +const appErrors = toRef(state, "errors"); const gameComponent = computed(() => { return coerceComponent(jsx(() => (<>{gameComponents.map(render)}</>))); @@ -51,4 +57,15 @@ const gameComponent = computed(() => { height: 100%; color: var(--foreground); } + +.error-container { + background: var(--background); + overflow: auto; + width: 100%; + height: 100%; +} + +.error-container > .error { + position: static; +} </style> diff --git a/src/components/Error.vue b/src/components/Error.vue new file mode 100644 index 0000000..19b6fe4 --- /dev/null +++ b/src/components/Error.vue @@ -0,0 +1,103 @@ +<template> + <div class="error"> + <h1 class="error-title">{{ firstError.name }}: {{ firstError.message }}</h1> + <div class="error-details" style="margin-top: -10px"> + <div v-if="firstError.cause"> + <div v-for="row in causes[0]" :key="row">{{ row }}</div> + </div> + <div v-if="firstError.stack" :style="firstError.cause ? 'margin-top: 10px' : ''"> + <div v-for="row in stacks[0]" :key="row">{{ row }}</div> + </div> + </div> + <div class="instructions"> + Check the console for more details, and consider sharing it with the developers on + <a :href="projInfo.discordLink || 'https://discord.gg/yJ4fjnjU54'" class="discord-link" + >discord</a + >!<br /> + <div v-if="errors.length > 1" style="margin-top: 20px"><h3>Other errors</h3></div> + <div v-for="(error, i) in errors.slice(1)" :key="i" style="margin-top: 20px"> + <details class="error-details"> + <summary>{{ error.name }}: {{ error.message }}</summary> + <div v-if="error.cause" style="margin-top: 10px"> + <div v-for="row in causes[i + 1]" :key="row">{{ row }}</div> + </div> + <div v-if="error.stack" style="margin-top: 10px"> + <div v-for="row in stacks[i + 1]" :key="row">{{ row }}</div> + </div> + </details> + </div> + </div> + </div> +</template> + +<script setup lang="ts"> +import projInfo from "data/projInfo.json"; +import player from "game/player"; +import { computed, onMounted } from "vue"; + +const props = defineProps<{ + errors: Error[]; +}>(); + +const firstError = computed(() => props.errors[0]); +const stacks = computed(() => + props.errors.map(error => (error.stack == null ? [] : error.stack.split("\n"))) +); +const causes = computed(() => + props.errors.map(error => + error.cause == null + ? [] + : (typeof error.cause === "string" ? error.cause : JSON.stringify(error.cause)).split( + "\n" + ) + ) +); + +onMounted(() => { + player.autosave = false; + player.devSpeed = 0; +}); +</script> + +<style scoped> +.error { + border: solid 10px var(--danger); + position: absolute; + top: 0; + left: 0; + right: 0; + text-align: left; + min-height: calc(100% - 20px); + text-align: left; + color: var(--foreground); +} + +.error-title { + background: var(--danger); + color: var(--feature-foreground); + display: block; + margin: -10px 0 10px 0; + position: sticky; + top: 0; +} + +.error-details { + white-space: nowrap; + overflow: auto; + padding: 10px; + background-color: var(--raised-background); +} + +.instructions { + padding: 10px; +} + +.discord-link { + display: inline; +} + +summary { + cursor: pointer; + user-select: none; +} +</style> diff --git a/src/components/Layer.vue b/src/components/Layer.vue index c00cf8a..1857535 100644 --- a/src/components/Layer.vue +++ b/src/components/Layer.vue @@ -1,5 +1,6 @@ <template> - <div class="layer-container" :style="{ '--layer-color': unref(color) }"> + <ErrorVue v-if="errors.length > 0" :errors="errors" /> + <div class="layer-container" :style="{ '--layer-color': unref(color) }" v-bind="$attrs" v-else> <button v-if="showGoBack" class="goBack" @click="goBack">❌</button> <button @@ -28,12 +29,12 @@ import type { CoercableComponent } from "features/feature"; import type { FeatureNode } from "game/layers"; import player from "game/player"; import { computeComponent, computeOptionalComponent, processedPropType, unwrapRef } from "util/vue"; -import type { PropType, Ref } from "vue"; -import { computed, defineComponent, toRefs, unref } from "vue"; +import { PropType, Ref, computed, defineComponent, onErrorCaptured, ref, toRefs, unref } from "vue"; import Context from "./Context.vue"; +import ErrorVue from "./Error.vue"; export default defineComponent({ - components: { Context }, + components: { Context, ErrorVue }, props: { index: { type: Number, @@ -77,13 +78,23 @@ export default defineComponent({ props.nodes.value = nodes; } + const errors = ref<Error[]>([]); + onErrorCaptured((err, instance, info) => { + console.warn(`Error caught in "${props.name}" layer`, err, instance, info); + errors.value.push( + err instanceof Error ? (err as Error) : new Error(JSON.stringify(err)) + ); + return false; + }); + return { component, minimizedComponent, showGoBack, updateNodes, unref, - goBack + goBack, + errors }; } }); diff --git a/src/data/common.tsx b/src/data/common.tsx index e7a9db0..786afa4 100644 --- a/src/data/common.tsx +++ b/src/data/common.tsx @@ -459,7 +459,7 @@ export function createFormulaPreview( const processedShowPreview = convertComputable(showPreview); const processedPreviewAmount = convertComputable(previewAmount); if (!formula.hasVariable()) { - throw new Error("Cannot create formula preview if the formula does not have a variable"); + console.error("Cannot create formula preview if the formula does not have a variable"); } return jsx(() => { if (unref(processedShowPreview)) { diff --git a/src/features/tabs/tabFamily.ts b/src/features/tabs/tabFamily.ts index 2ca544b..aa7fafc 100644 --- a/src/features/tabs/tabFamily.ts +++ b/src/features/tabs/tabFamily.ts @@ -151,8 +151,7 @@ export function createTabFamily<T extends TabFamilyOptions>( optionsFunc?: OptionsFunc<T, BaseTabFamily, GenericTabFamily> ): TabFamily<T> { if (Object.keys(tabs).length === 0) { - console.warn("Cannot create tab family with 0 tabs"); - throw new Error("Cannot create tab family with 0 tabs"); + console.error("Cannot create tab family with 0 tabs"); } const selected = persistent(Object.keys(tabs)[0], false); diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index 4aaf257..6628293 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -2,7 +2,7 @@ import { Resource } from "features/resources/resource"; import { NonPersistent } from "game/persistence"; import Decimal, { DecimalSource, format } from "util/bignum"; import { Computable, ProcessedComputable, convertComputable } from "util/computed"; -import { ComputedRef, Ref, computed, ref, unref } from "vue"; +import { Ref, computed, ref, unref } from "vue"; import * as ops from "./operations"; import type { EvaluateFunction, @@ -104,7 +104,7 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[ private setupConstant({ inputs }: { inputs: [FormulaSource] }): InternalFormulaProperties<T> { if (inputs.length !== 1) { - throw new Error("Evaluate function is required if inputs is not length 1"); + console.error("Evaluate function is required if inputs is not length 1"); } return { inputs: inputs as T, @@ -250,7 +250,8 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[ } return lhs.invert(value); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } return new Formula({ inputs: [value], @@ -294,7 +295,8 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[ !formula.isInvertible() || (elseFormula != null && !elseFormula.isInvertible()) ) { - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } if (unref(processedCondition)) { return lhs.invert(formula.invert(value)); @@ -1260,7 +1262,8 @@ export default class Formula< } else if (this.inputs.length === 1 && this.hasVariable()) { return value; } - throw new Error("Cannot invert non-invertible formula"); + console.error("Cannot invert non-invertible formula"); + return 0; } /** @@ -1270,7 +1273,8 @@ export default class Formula< */ evaluateIntegral(variable?: DecimalSource): DecimalSource { if (!this.isIntegrable()) { - throw new Error("Cannot evaluate integral of formula without integral"); + console.error("Cannot evaluate integral of formula without integral"); + return 0; } return this.getIntegralFormula().evaluate(variable); } @@ -1282,7 +1286,8 @@ export default class Formula< */ invertIntegral(value: DecimalSource): DecimalSource { if (!this.isIntegrable() || !this.getIntegralFormula().isInvertible()) { - throw new Error("Cannot invert integral of formula without invertible integral"); + console.error("Cannot invert integral of formula without invertible integral"); + return 0; } return (this.getIntegralFormula() as InvertibleFormula).invert(value); } @@ -1309,7 +1314,8 @@ export default class Formula< // We're the complex operation of this formula stack = []; if (this.internalIntegrate == null) { - throw new Error("Cannot integrate formula with non-integrable operation"); + console.error("Cannot integrate formula with non-integrable operation"); + return Formula.constant(0); } let value = this.internalIntegrate.call(this, stack, ...this.inputs); stack.forEach(func => (value = func(value))); @@ -1329,14 +1335,15 @@ export default class Formula< ) { this.integralFormula = this; } else { - throw new Error("Cannot integrate formula without variable"); + console.error("Cannot integrate formula without variable"); + return Formula.constant(0); } } return this.integralFormula; } else { // "Inner" part of the formula if (this.applySubstitution == null) { - throw new Error("Cannot have two complex operations in an integrable formula"); + console.error("Cannot have two complex operations in an integrable formula"); } stack.push((variable: GenericFormula) => // eslint-disable-next-line @typescript-eslint/no-non-null-assertion @@ -1353,7 +1360,8 @@ export default class Formula< ) { return this; } else { - throw new Error("Cannot integrate formula without variable"); + console.error("Cannot integrate formula without variable"); + return Formula.constant(0); } } } @@ -1428,15 +1436,17 @@ export function calculateMaxAffordable( let affordable: DecimalSource = 0; if (Decimal.gt(maxBulkAmount, directSum)) { if (!formula.isInvertible()) { - throw new Error( + console.error( "Cannot calculate max affordable of non-invertible formula with more maxBulkAmount than directSum" ); + return 0; } if (cumulativeCost) { if (!formula.isIntegralInvertible()) { - throw new Error( + console.error( "Cannot calculate max affordable of formula with non-invertible integral" ); + return 0; } affordable = Decimal.floor( formula.invertIntegral(Decimal.add(resource.value, formula.evaluateIntegral())) @@ -1517,13 +1527,15 @@ export function calculateCost( // Indirect sum if (Decimal.gt(amountToBuy, directSum)) { if (!formula.isInvertible()) { - throw new Error("Cannot calculate cost with indirect sum of non-invertible formula"); + console.error("Cannot calculate cost with indirect sum of non-invertible formula"); + return 0; } if (cumulativeCost) { if (!formula.isIntegrable()) { - throw new Error( + console.error( "Cannot calculate cost with cumulative cost of non-integrable formula" ); + return 0; } cost = Decimal.sub(formula.evaluateIntegral(newValue), formula.evaluateIntegral()); if (targetValue.gt(1e308)) { diff --git a/src/game/formulas/operations.ts b/src/game/formulas/operations.ts index 61f16bc..e8bd04d 100644 --- a/src/game/formulas/operations.ts +++ b/src/game/formulas/operations.ts @@ -12,17 +12,20 @@ export function invertNeg(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.neg(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateNeg(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } return Formula.neg(lhs.getIntegralFormula(stack)); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function applySubstitutionNeg(value: GenericFormula) { @@ -35,24 +38,28 @@ export function invertAdd(value: DecimalSource, lhs: FormulaSource, rhs: Formula } else if (hasVariable(rhs)) { return rhs.invert(Decimal.sub(value, unrefFormulaSource(lhs))); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateAdd(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.times(rhs, lhs.innermostVariable ?? 0).add(x); } else if (hasVariable(rhs)) { if (!rhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = rhs.getIntegralFormula(stack); return Formula.times(lhs, rhs.innermostVariable ?? 0).add(x); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function integrateInnerAdd( @@ -62,18 +69,21 @@ export function integrateInnerAdd( ) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.add(x, rhs); } else if (hasVariable(rhs)) { if (!rhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = rhs.getIntegralFormula(stack); return Formula.add(x, lhs); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertSub(value: DecimalSource, lhs: FormulaSource, rhs: FormulaSource) { @@ -82,24 +92,28 @@ export function invertSub(value: DecimalSource, lhs: FormulaSource, rhs: Formula } else if (hasVariable(rhs)) { return rhs.invert(Decimal.sub(unrefFormulaSource(lhs), value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateSub(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.sub(x, Formula.times(rhs, lhs.innermostVariable ?? 0)); } else if (hasVariable(rhs)) { if (!rhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = rhs.getIntegralFormula(stack); return Formula.times(lhs, rhs.innermostVariable ?? 0).sub(x); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function integrateInnerSub( @@ -109,18 +123,21 @@ export function integrateInnerSub( ) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.sub(x, rhs); } else if (hasVariable(rhs)) { if (!rhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = rhs.getIntegralFormula(stack); return Formula.sub(x, lhs); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertMul(value: DecimalSource, lhs: FormulaSource, rhs: FormulaSource) { @@ -129,24 +146,28 @@ export function invertMul(value: DecimalSource, lhs: FormulaSource, rhs: Formula } else if (hasVariable(rhs)) { return rhs.invert(Decimal.div(value, unrefFormulaSource(lhs))); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateMul(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.times(x, rhs); } else if (hasVariable(rhs)) { if (!rhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = rhs.getIntegralFormula(stack); return Formula.times(x, lhs); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function applySubstitutionMul( @@ -159,7 +180,8 @@ export function applySubstitutionMul( } else if (hasVariable(rhs)) { return Formula.div(value, lhs); } - throw new Error("Could not apply substitution due to no input being a variable"); + console.error("Could not apply substitution due to no input being a variable"); + return Formula.constant(0); } export function invertDiv(value: DecimalSource, lhs: FormulaSource, rhs: FormulaSource) { @@ -168,24 +190,28 @@ export function invertDiv(value: DecimalSource, lhs: FormulaSource, rhs: Formula } else if (hasVariable(rhs)) { return rhs.invert(Decimal.div(unrefFormulaSource(lhs), value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateDiv(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.div(x, rhs); } else if (hasVariable(rhs)) { if (!rhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = rhs.getIntegralFormula(stack); return Formula.div(lhs, x); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function applySubstitutionDiv( @@ -198,32 +224,37 @@ export function applySubstitutionDiv( } else if (hasVariable(rhs)) { return Formula.mul(value, lhs); } - throw new Error("Could not apply substitution due to no input being a variable"); + console.error("Could not apply substitution due to no input being a variable"); + return Formula.constant(0); } export function invertRecip(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.recip(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateRecip(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.ln(x); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertLog10(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.pow10(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } function internalIntegrateLog10(lhs: DecimalSource) { @@ -235,13 +266,15 @@ function internalInvertIntegralLog10(value: DecimalSource, lhs: FormulaSource) { const numerator = ln10.times(value); return lhs.invert(numerator.div(numerator.div(Math.E).lambertw())); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateLog10(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } return new Formula({ inputs: [lhs.getIntegralFormula(stack)], @@ -249,7 +282,8 @@ export function integrateLog10(stack: SubstitutionStack, lhs: FormulaSource) { invert: internalInvertIntegralLog10 }); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertLog(value: DecimalSource, lhs: FormulaSource, rhs: FormulaSource) { @@ -258,7 +292,8 @@ export function invertLog(value: DecimalSource, lhs: FormulaSource, rhs: Formula } else if (hasVariable(rhs)) { return rhs.invert(Decimal.root(unrefFormulaSource(lhs), value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } function internalIntegrateLog(lhs: DecimalSource, rhs: DecimalSource) { @@ -270,13 +305,15 @@ function internalInvertIntegralLog(value: DecimalSource, lhs: FormulaSource, rhs const numerator = Decimal.ln(unrefFormulaSource(rhs)).times(value); return lhs.invert(numerator.div(numerator.div(Math.E).lambertw())); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateLog(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } return new Formula({ inputs: [lhs.getIntegralFormula(stack), rhs], @@ -284,14 +321,16 @@ export function integrateLog(stack: SubstitutionStack, lhs: FormulaSource, rhs: invert: internalInvertIntegralLog }); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertLog2(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.pow(2, value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } function internalIntegrateLog2(lhs: DecimalSource) { @@ -303,13 +342,15 @@ function internalInvertIntegralLog2(value: DecimalSource, lhs: FormulaSource) { const numerator = Decimal.ln(2).times(value); return lhs.invert(numerator.div(numerator.div(Math.E).lambertw())); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateLog2(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } return new Formula({ inputs: [lhs.getIntegralFormula(stack)], @@ -317,14 +358,16 @@ export function integrateLog2(stack: SubstitutionStack, lhs: FormulaSource) { invert: internalInvertIntegralLog2 }); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertLn(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.exp(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } function internalIntegrateLn(lhs: DecimalSource) { @@ -335,13 +378,15 @@ function internalInvertIntegralLn(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.div(value, Decimal.div(value, Math.E).lambertw())); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateLn(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } return new Formula({ inputs: [lhs.getIntegralFormula(stack)], @@ -349,7 +394,8 @@ export function integrateLn(stack: SubstitutionStack, lhs: FormulaSource) { invert: internalInvertIntegralLn }); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertPow(value: DecimalSource, lhs: FormulaSource, rhs: FormulaSource) { @@ -358,43 +404,50 @@ export function invertPow(value: DecimalSource, lhs: FormulaSource, rhs: Formula } else if (hasVariable(rhs)) { return rhs.invert(Decimal.ln(value).div(Decimal.ln(unrefFormulaSource(lhs)))); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integratePow(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); const pow = Formula.add(rhs, 1); return Formula.pow(x, pow).div(pow); } else if (hasVariable(rhs)) { if (!rhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = rhs.getIntegralFormula(stack); return Formula.pow(lhs, x).div(Formula.ln(lhs)); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertPow10(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.root(value, 10)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integratePow10(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.pow10(x).div(Formula.ln(10)); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertPowBase(value: DecimalSource, lhs: FormulaSource, rhs: FormulaSource) { @@ -403,25 +456,29 @@ export function invertPowBase(value: DecimalSource, lhs: FormulaSource, rhs: For } else if (hasVariable(rhs)) { return rhs.invert(Decimal.root(unrefFormulaSource(lhs), value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integratePowBase(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.pow(rhs, x).div(Formula.ln(rhs)); } else if (hasVariable(rhs)) { if (!rhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = rhs.getIntegralFormula(stack); const denominator = Formula.add(lhs, 1); return Formula.pow(x, denominator).div(denominator); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertRoot(value: DecimalSource, lhs: FormulaSource, rhs: FormulaSource) { @@ -430,36 +487,42 @@ export function invertRoot(value: DecimalSource, lhs: FormulaSource, rhs: Formul } else if (hasVariable(rhs)) { return rhs.invert(Decimal.ln(unrefFormulaSource(lhs)).div(Decimal.ln(value))); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateRoot(stack: SubstitutionStack, lhs: FormulaSource, rhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.pow(x, Formula.recip(rhs).add(1)).times(rhs).div(Formula.add(rhs, 1)); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertExp(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.ln(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateExp(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.exp(x); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function tetrate( @@ -481,7 +544,8 @@ export function invertTetrate( return base.invert(Decimal.ssqrt(value)); } // Other params can't be inverted ATM - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function iteratedexp( @@ -509,7 +573,8 @@ export function invertIteratedExp( ); } // Other params can't be inverted ATM - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function iteratedLog( @@ -533,7 +598,8 @@ export function invertSlog(value: DecimalSource, lhs: FormulaSource, rhs: Formul ); } // Other params can't be inverted ATM - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function layeradd(value: DecimalSource, diff: DecimalSource, base: DecimalSource) { @@ -556,21 +622,24 @@ export function invertLayeradd( ); } // Other params can't be inverted ATM - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function invertLambertw(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.pow(Math.E, value).times(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function invertSsqrt(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.tetrate(value, 2)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function pentate(value: DecimalSource, height: DecimalSource, payload: DecimalSource) { @@ -582,226 +651,262 @@ export function invertSin(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.asin(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateSin(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.cos(x).neg(); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertCos(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.acos(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateCos(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.sin(x); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertTan(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.atan(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateTan(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.cos(x).ln().neg(); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertAsin(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.sin(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateAsin(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.asin(x) .times(x) .add(Formula.sqrt(Formula.sub(1, Formula.pow(x, 2)))); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertAcos(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.cos(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateAcos(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.acos(x) .times(x) .sub(Formula.sqrt(Formula.sub(1, Formula.pow(x, 2)))); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertAtan(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.tan(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateAtan(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.atan(x) .times(x) .sub(Formula.ln(Formula.pow(x, 2).add(1)).div(2)); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertSinh(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.asinh(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateSinh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.cosh(x); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertCosh(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.acosh(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateCosh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.sinh(x); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertTanh(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.atanh(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateTanh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.cosh(x).ln(); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertAsinh(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.sinh(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateAsinh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.asinh(x).times(x).sub(Formula.pow(x, 2).add(1).sqrt()); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertAcosh(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.cosh(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateAcosh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.acosh(x) .times(x) .sub(Formula.add(x, 1).sqrt().times(Formula.sub(x, 1).sqrt())); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function invertAtanh(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.tanh(value)); } - throw new Error("Could not invert due to no input being a variable"); + console.error("Could not invert due to no input being a variable"); + return 0; } export function integrateAtanh(stack: SubstitutionStack, lhs: FormulaSource) { if (hasVariable(lhs)) { if (!lhs.isIntegrable()) { - throw new Error("Could not integrate due to variable not being integrable"); + console.error("Could not integrate due to variable not being integrable"); + return Formula.constant(0); } const x = lhs.getIntegralFormula(stack); return Formula.atanh(x) .times(x) .add(Formula.sub(1, Formula.pow(x, 2)).ln().div(2)); } - throw new Error("Could not integrate due to no input being a variable"); + console.error("Could not integrate due to no input being a variable"); + return Formula.constant(0); } export function createPassthroughBinaryFormula( diff --git a/src/game/layers.tsx b/src/game/layers.tsx index 6294592..bbb6079 100644 --- a/src/game/layers.tsx +++ b/src/game/layers.tsx @@ -225,7 +225,9 @@ export function createLayer<T extends LayerOptions>( addingLayers[addingLayers.length - 1] == null || addingLayers[addingLayers.length - 1] !== id ) { - throw `Adding layers stack in invalid state. This should not happen\nStack: ${addingLayers}\nTrying to pop ${layer.id}`; + throw new Error( + `Adding layers stack in invalid state. This should not happen\nStack: ${addingLayers}\nTrying to pop ${layer.id}` + ); } addingLayers.pop(); diff --git a/src/game/persistence.ts b/src/game/persistence.ts index a61d9cf..e760411 100644 --- a/src/game/persistence.ts +++ b/src/game/persistence.ts @@ -116,12 +116,7 @@ function checkNaNAndWrite<T extends State>(persistent: Persistent<T>, value: T) state.NaNPath = persistent[SaveDataPath]; state.NaNPersistent = persistent as Persistent<DecimalSource>; } - console.error( - `Attempted to save NaN value to`, - persistent[SaveDataPath]?.join("."), - persistent - ); - throw new Error("Attempted to set NaN value. See above for details"); + console.error(`Attempted to save NaN value to ${persistent[SaveDataPath]?.join(".")}`); } persistent[PersistentState].value = value; } @@ -292,8 +287,8 @@ globalBus.on("addLayer", (layer: GenericLayer, saveData: Record<string, unknown> "." )}\` when it's already present at \`${value[SaveDataPath].join( "." - )}\`. This can cause unexpected behavior when loading saves between updates.`, - value + )}\`.`, + "This can cause unexpected behavior when loading saves between updates." ); } value[SaveDataPath] = newPath; @@ -368,9 +363,9 @@ globalBus.on("addLayer", (layer: GenericLayer, saveData: Record<string, unknown> return; } console.error( - `Created persistent ref in ${layer.id} without registering it to the layer! Make sure to include everything persistent in the returned object`, - persistent, - "\nCreated at:\n" + persistent[StackTrace] + `Created persistent ref in ${layer.id} without registering it to the layer!`, + "Make sure to include everything persistent in the returned object.\n\nCreated at:\n" + + persistent[StackTrace] ); }); persistentRefs[layer.id].clear(); diff --git a/src/game/state.ts b/src/game/state.ts index db71c7b..9e672c3 100644 --- a/src/game/state.ts +++ b/src/game/state.ts @@ -1,5 +1,5 @@ import type { DecimalSource } from "util/bignum"; -import { shallowReactive } from "vue"; +import { reactive, shallowReactive } from "vue"; import type { Persistent } from "./persistence"; /** An object of global data that is not persistent. */ @@ -12,6 +12,8 @@ export interface Transient { NaNPath?: string[]; /** The ref that was being set to NaN. */ NaNPersistent?: Persistent<DecimalSource>; + /** List of errors that have occurred, to show the user. */ + errors: Error[]; } declare global { @@ -24,5 +26,6 @@ declare global { export default window.state = shallowReactive<Transient>({ lastTenTicks: [], hasNaN: false, - NaNPath: [] + NaNPath: [], + errors: reactive([]) }); diff --git a/src/main.ts b/src/main.ts index 38c9ac3..9fb753b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -2,6 +2,7 @@ import "@fontsource/material-icons"; import App from "App.vue"; import projInfo from "data/projInfo.json"; import "game/notifications"; +import state from "game/state"; import { load } from "util/save"; import { useRegisterSW } from "virtual:pwa-register/vue"; import type { App as VueApp } from "vue"; @@ -23,11 +24,30 @@ declare global { } } +const error = console.error; +console.error = function (...args) { + if (import.meta.env.DEV) { + state.errors.push(new Error(args[0], { cause: args[1] })); + } + error(...args); +}; + +window.onerror = function (event, source, lineno, colno, error) { + state.errors.push(error instanceof Error ? error : new Error(JSON.stringify(error))); + return true; +}; +window.onunhandledrejection = function (event) { + state.errors.push( + event.reason instanceof Error ? event.reason : new Error(JSON.stringify(event.reason)) + ); +}; + document.title = projInfo.title; window.projInfo = projInfo; if (projInfo.id === "") { - throw new Error( - "Project ID is empty! Please select a unique ID for this project in /src/data/projInfo.json" + console.error( + "Project ID is empty!", + "Please select a unique ID for this project in /src/data/projInfo.json" ); } @@ -43,6 +63,9 @@ requestAnimationFrame(async () => { // Create Vue const vue = (window.vue = createApp(App)); + vue.config.errorHandler = function (err, instance, info) { + console.error(err, info, instance); + }; globalBus.emit("setupVue", vue); vue.mount("#app"); diff --git a/src/util/proxies.ts b/src/util/proxies.ts index f712470..ed5d4ac 100644 --- a/src/util/proxies.ts +++ b/src/util/proxies.ts @@ -40,7 +40,7 @@ export function createLazyProxy<T extends object, S extends T>( function calculateObj(): T { if (!calculated) { if (calculating) { - throw new Error("Cyclical dependency detected. Cannot evaluate lazy proxy."); + console.error("Cyclical dependency detected. Cannot evaluate lazy proxy."); } calculating = true; Object.assign(obj, objectFunc.call(obj, obj)); From a55f99daed57f48d20e3ab0d1134396309196561 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 17 May 2023 00:01:28 -0500 Subject: [PATCH 093/134] Fix merge conflicts --- src/features/conversion.ts | 3 ++- src/game/formulas/formulas.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/features/conversion.ts b/src/features/conversion.ts index aa19839..78ad7cd 100644 --- a/src/features/conversion.ts +++ b/src/features/conversion.ts @@ -1,4 +1,4 @@ -import type { OptionsFunc, Replace } from "features/feature"; +import type { CoercableComponent, OptionsFunc, Replace } from "features/feature"; import { setDefault } from "features/feature"; import type { Resource } from "features/resources/resource"; import Formula from "game/formulas/formulas"; @@ -12,6 +12,7 @@ import { createLazyProxy } from "util/proxies"; import type { Ref } from "vue"; import { computed, unref } from "vue"; import { GenericDecorator } from "./decorators/common"; +import { createBooleanRequirement } from "game/requirements"; /** An object that configures a {@link Conversion}. */ export interface ConversionOptions { diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index 37410cb..2bd34ac 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -2,7 +2,7 @@ import { Resource } from "features/resources/resource"; import { NonPersistent } from "game/persistence"; import Decimal, { DecimalSource, format } from "util/bignum"; import { Computable, ProcessedComputable, convertComputable } from "util/computed"; -import { Ref, computed, ref, unref } from "vue"; +import { ComputedRef, Ref, computed, ref, unref } from "vue"; import * as ops from "./operations"; import type { EvaluateFunction, From 3e23555b254b57ff97d9967eeccec27c88e7c289 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 17 May 2023 00:37:33 -0500 Subject: [PATCH 094/134] Fixed tests --- src/game/formulas/formulas.ts | 1 + tests/game/formulas.test.ts | 57 ++++++++++++++++++----------------- tests/utils.ts | 23 +++++++++++++- 3 files changed, 52 insertions(+), 29 deletions(-) diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index 2bd34ac..c9b8f8f 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -1344,6 +1344,7 @@ export default class Formula< // "Inner" part of the formula if (this.applySubstitution == null) { console.error("Cannot have two complex operations in an integrable formula"); + return Formula.constant(0); } stack.push((variable: GenericFormula) => // eslint-disable-next-line @typescript-eslint/no-non-null-assertion diff --git a/tests/game/formulas.test.ts b/tests/game/formulas.test.ts index c0c067a..bccb515 100644 --- a/tests/game/formulas.test.ts +++ b/tests/game/formulas.test.ts @@ -227,14 +227,15 @@ describe("Creating Formulas", () => { expect(formula.evaluate()).compare_tolerance(expectedValue)); // eslint-disable-next-line @typescript-eslint/ban-ts-comment /* @ts-ignore */ - test("Invert throws", () => expect(() => formula.invert(25)).toThrow()); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - /* @ts-ignore */ - test("Integrate throws", () => expect(() => formula.evaluateIntegral()).toThrow()); - test("Invert integral throws", () => + test("Invert errors", () => expect(() => formula.invert(25)).toLogError()); + test("Integrate errors", () => // eslint-disable-next-line @typescript-eslint/ban-ts-comment /* @ts-ignore */ - expect(() => formula.invertIntegral(25)).toThrow()); + expect(() => formula.evaluateIntegral()).toLogError()); + test("Invert integral errors", () => + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + /* @ts-ignore */ + expect(() => formula.invertIntegral(25)).toLogError()); }); } testConstant("number", () => Formula.constant(10)); @@ -256,10 +257,10 @@ describe("Creating Formulas", () => { // None of these formulas have variables, so they should all behave the same test("Is not marked as having a variable", () => expect(formula.hasVariable()).toBe(false)); test("Is not invertible", () => expect(formula.isInvertible()).toBe(false)); - test(`Formula throws if trying to invert`, () => + test(`Formula errors if trying to invert`, () => // eslint-disable-next-line @typescript-eslint/ban-ts-comment /* @ts-ignore */ - expect(() => formula.invert(10)).toThrow()); + expect(() => formula.invert(10)).toLogError()); test("Is not integrable", () => expect(formula.isIntegrable()).toBe(false)); test("Has a non-invertible integral", () => expect(formula.isIntegralInvertible()).toBe(false)); @@ -495,12 +496,12 @@ describe("Inverting", () => { test("Non-invertible constant", () => { const formula = Formula.add(variable, constant.ceil()); expect(formula.isInvertible()).toBe(true); - expect(() => formula.invert(10)).not.toThrow(); + expect(() => formula.invert(10)).not.toLogError(); }); test("Non-invertible variable", () => { const formula = Formula.add(variable.ceil(), constant); expect(formula.isInvertible()).toBe(false); - expect(() => formula.invert(10)).toThrow(); + expect(() => formula.invert(10)).toLogError(); }); }); }); @@ -624,19 +625,19 @@ describe("Integrating", () => { test("Integrating nested complex formulas", () => { const formula = Formula.pow(1.05, variable).times(100).pow(0.5); - expect(() => formula.evaluateIntegral()).toThrow(); + expect(() => formula.evaluateIntegral()).toLogError(); }); describe("Integrating with non-integrable sections", () => { test("Non-integrable constant", () => { const formula = Formula.add(variable, constant.ceil()); expect(formula.isIntegrable()).toBe(true); - expect(() => formula.evaluateIntegral()).not.toThrow(); + expect(() => formula.evaluateIntegral()).not.toLogError(); }); test("Non-integrable variable", () => { const formula = Formula.add(variable.ceil(), constant); expect(formula.isIntegrable()).toBe(false); - expect(() => formula.evaluateIntegral()).toThrow(); + expect(() => formula.evaluateIntegral()).toLogError(); }); }); }); @@ -657,7 +658,7 @@ describe("Inverting integrals", () => { describe("Invertible Integral functions marked as such", () => { function checkFormula(formula: InvertibleIntegralFormula) { expect(formula.isIntegralInvertible()).toBe(true); - expect(() => formula.invertIntegral(10)).to.not.throw(); + expect(() => formula.invertIntegral(10)).not.toLogError(); } invertibleIntegralZeroPramFunctionNames.forEach(name => { describe(name, () => { @@ -676,7 +677,7 @@ describe("Inverting integrals", () => { test(`${name}(var, var) is marked as not having an invertible integral`, () => { const formula = Formula[name](variable, variable); expect(formula.isIntegralInvertible()).toBe(false); - expect(() => formula.invertIntegral(10)).to.throw(); + expect(() => formula.invertIntegral(10)).toLogError(); }); }); }); @@ -732,7 +733,7 @@ describe("Inverting integrals", () => { test("Inverting integral of nested complex formulas", () => { const formula = Formula.pow(1.05, variable).times(100).pow(0.5); - expect(() => formula.invertIntegral(100)).toThrow(); + expect(() => formula.invertIntegral(100)).toLogError(); }); }); @@ -765,7 +766,7 @@ describe("Step-wise", () => { ); expect(() => Formula.step(constant, 10, value => Formula.add(value, 10)).evaluateIntegral() - ).toThrow(); + ).toLogError(); }); test("Formula never marked as having an invertible integral", () => { @@ -774,7 +775,7 @@ describe("Step-wise", () => { ).toBe(false); expect(() => Formula.step(constant, 10, value => Formula.add(value, 10)).invertIntegral(10) - ).toThrow(); + ).toLogError(); }); test("Formula modifiers with variables mark formula as non-invertible", () => { @@ -866,7 +867,7 @@ describe("Conditionals", () => { ); expect(() => Formula.if(constant, true, value => Formula.add(value, 10)).evaluateIntegral() - ).toThrow(); + ).toLogError(); }); test("Formula never marked as having an invertible integral", () => { @@ -875,7 +876,7 @@ describe("Conditionals", () => { ).toBe(false); expect(() => Formula.if(constant, true, value => Formula.add(value, 10)).invertIntegral(10) - ).toThrow(); + ).toLogError(); }); test("Formula modifiers with variables mark formula as non-invertible", () => { @@ -976,7 +977,7 @@ describe("Custom Formulas", () => { evaluate: () => 6, invert: value => value }).invert(10) - ).toThrow()); + ).toLogError()); test("One input inverts correctly", () => expect( new Formula({ @@ -1003,7 +1004,7 @@ describe("Custom Formulas", () => { evaluate: () => 0, integrate: stack => variable }).evaluateIntegral() - ).toThrow()); + ).toLogError()); test("One input integrates correctly", () => expect( new Formula({ @@ -1030,7 +1031,7 @@ describe("Custom Formulas", () => { evaluate: () => 0, integrate: stack => variable }).invertIntegral(20) - ).toThrow()); + ).toLogError()); test("One input inverts integral correctly", () => expect( new Formula({ @@ -1074,11 +1075,11 @@ describe("Buy Max", () => { resource = createResource(ref(100000)); }); describe("Without spending", () => { - test("Throws on formula with non-invertible integral", () => { + test("errors on formula with non-invertible integral", () => { // eslint-disable-next-line @typescript-eslint/ban-ts-comment /* @ts-ignore */ const maxAffordable = calculateMaxAffordable(Formula.neg(10), resource, false); - expect(() => maxAffordable.value).toThrow(); + expect(() => maxAffordable.value).toLogError(); }); test("Calculates max affordable and cost correctly", () => { const variable = Formula.variable(0); @@ -1103,9 +1104,9 @@ describe("Buy Max", () => { }); }); describe("With spending", () => { - test("Throws on calculating max affordable of non-invertible formula", () => { + test("errors on calculating max affordable of non-invertible formula", () => { const maxAffordable = calculateMaxAffordable(Formula.abs(10), resource); - expect(() => maxAffordable.value).toThrow(); + expect(() => maxAffordable.value).toLogError(); }); test("Estimates max affordable and cost correctly with 0 purchases", () => { const purchases = ref(0); @@ -1250,7 +1251,7 @@ describe("Buy Max", () => { test("Handles summing purchases of non-integrable formula", () => { const purchases = ref(0); const formula = Formula.variable(purchases).abs(); - expect(() => calculateCost(formula, 10)).not.toThrow(); + expect(() => calculateCost(formula, 10)).not.toLogError(); }); }); }); diff --git a/tests/utils.ts b/tests/utils.ts index a1e6084..4252eac 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -1,8 +1,9 @@ import Decimal, { DecimalSource, format } from "util/bignum"; -import { expect } from "vitest"; +import { Mock, expect, vi } from "vitest"; interface CustomMatchers<R = unknown> { compare_tolerance(expected: DecimalSource, tolerance?: number): R; + toLogError(): R; } declare global { @@ -36,5 +37,25 @@ expect.extend({ expected: format(expected), actual: format(received) }; + }, + toLogError(received: () => unknown) { + const { isNot } = this; + console.error = vi.fn(); + received(); + const calls = ( + console.error as unknown as Mock< + Parameters<typeof console.error>, + ReturnType<typeof console.error> + > + ).mock.calls.length; + const pass = calls >= 1; + vi.restoreAllMocks(); + return { + pass, + message: () => + `Expected ${received} to ${(isNot as boolean) ? " not" : ""} log an error`, + expected: "1+", + actual: calls + }; } }); From 056aa4d2f7c964cebc54291a47502354494c3e38 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 17 May 2023 08:15:10 -0500 Subject: [PATCH 095/134] Fix reset button showing currentAt if buyMax is true --- src/data/common.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/common.tsx b/src/data/common.tsx index 786afa4..c81fa0d 100644 --- a/src/data/common.tsx +++ b/src/data/common.tsx @@ -133,7 +133,7 @@ export function createResetButton<T extends ClickableOptions & ResetButtonOption {unref(resetButton.conversion.buyMax) ? "Next:" : "Req:"}{" "} {displayResource( resetButton.conversion.baseResource, - unref(resetButton.conversion.buyMax) || + !unref(resetButton.conversion.buyMax) || Decimal.lt(unref(resetButton.conversion.actualGain), 1) ? unref(resetButton.conversion.currentAt) : unref(resetButton.conversion.nextAt) From 7deacb41e1c95c7aed47a17020cab3cec821da77 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 17 May 2023 00:37:33 -0500 Subject: [PATCH 096/134] Fixed tests --- src/game/formulas/formulas.ts | 1 + tests/game/formulas.test.ts | 65 ++++++++++++++++++----------------- tests/utils.ts | 23 ++++++++++++- 3 files changed, 56 insertions(+), 33 deletions(-) diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index 6628293..d9a6bed 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -1344,6 +1344,7 @@ export default class Formula< // "Inner" part of the formula if (this.applySubstitution == null) { console.error("Cannot have two complex operations in an integrable formula"); + return Formula.constant(0); } stack.push((variable: GenericFormula) => // eslint-disable-next-line @typescript-eslint/no-non-null-assertion diff --git a/tests/game/formulas.test.ts b/tests/game/formulas.test.ts index 3acc944..a36d099 100644 --- a/tests/game/formulas.test.ts +++ b/tests/game/formulas.test.ts @@ -227,14 +227,15 @@ describe("Creating Formulas", () => { expect(formula.evaluate()).compare_tolerance(expectedValue)); // eslint-disable-next-line @typescript-eslint/ban-ts-comment /* @ts-ignore */ - test("Invert throws", () => expect(() => formula.invert(25)).toThrow()); - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - /* @ts-ignore */ - test("Integrate throws", () => expect(() => formula.evaluateIntegral()).toThrow()); - test("Invert integral throws", () => + test("Invert errors", () => expect(() => formula.invert(25)).toLogError()); + test("Integrate errors", () => // eslint-disable-next-line @typescript-eslint/ban-ts-comment /* @ts-ignore */ - expect(() => formula.invertIntegral(25)).toThrow()); + expect(() => formula.evaluateIntegral()).toLogError()); + test("Invert integral errors", () => + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + /* @ts-ignore */ + expect(() => formula.invertIntegral(25)).toLogError()); }); } testConstant("number", () => Formula.constant(10)); @@ -256,10 +257,10 @@ describe("Creating Formulas", () => { // None of these formulas have variables, so they should all behave the same test("Is not marked as having a variable", () => expect(formula.hasVariable()).toBe(false)); test("Is not invertible", () => expect(formula.isInvertible()).toBe(false)); - test(`Formula throws if trying to invert`, () => + test(`Formula errors if trying to invert`, () => // eslint-disable-next-line @typescript-eslint/ban-ts-comment /* @ts-ignore */ - expect(() => formula.invert(10)).toThrow()); + expect(() => formula.invert(10)).toLogError()); test("Is not integrable", () => expect(formula.isIntegrable()).toBe(false)); test("Has a non-invertible integral", () => expect(formula.isIntegralInvertible()).toBe(false)); @@ -495,12 +496,12 @@ describe("Inverting", () => { test("Non-invertible constant", () => { const formula = Formula.add(variable, constant.ceil()); expect(formula.isInvertible()).toBe(true); - expect(() => formula.invert(10)).not.toThrow(); + expect(() => formula.invert(10)).not.toLogError(); }); test("Non-invertible variable", () => { const formula = Formula.add(variable.ceil(), constant); expect(formula.isInvertible()).toBe(false); - expect(() => formula.invert(10)).toThrow(); + expect(() => formula.invert(10)).toLogError(); }); }); }); @@ -624,19 +625,19 @@ describe("Integrating", () => { test("Integrating nested complex formulas", () => { const formula = Formula.pow(1.05, variable).times(100).pow(0.5); - expect(() => formula.evaluateIntegral()).toThrow(); + expect(() => formula.evaluateIntegral()).toLogError(); }); describe("Integrating with non-integrable sections", () => { test("Non-integrable constant", () => { const formula = Formula.add(variable, constant.ceil()); expect(formula.isIntegrable()).toBe(true); - expect(() => formula.evaluateIntegral()).not.toThrow(); + expect(() => formula.evaluateIntegral()).not.toLogError(); }); test("Non-integrable variable", () => { const formula = Formula.add(variable.ceil(), constant); expect(formula.isIntegrable()).toBe(false); - expect(() => formula.evaluateIntegral()).toThrow(); + expect(() => formula.evaluateIntegral()).toLogError(); }); }); }); @@ -657,7 +658,7 @@ describe("Inverting integrals", () => { describe("Invertible Integral functions marked as such", () => { function checkFormula(formula: InvertibleIntegralFormula) { expect(formula.isIntegralInvertible()).toBe(true); - expect(() => formula.invertIntegral(10)).to.not.throw(); + expect(() => formula.invertIntegral(10)).not.toLogError(); } invertibleIntegralZeroPramFunctionNames.forEach(name => { describe(name, () => { @@ -676,7 +677,7 @@ describe("Inverting integrals", () => { test(`${name}(var, var) is marked as not having an invertible integral`, () => { const formula = Formula[name](variable, variable); expect(formula.isIntegralInvertible()).toBe(false); - expect(() => formula.invertIntegral(10)).to.throw(); + expect(() => formula.invertIntegral(10)).toLogError(); }); }); }); @@ -732,7 +733,7 @@ describe("Inverting integrals", () => { test("Inverting integral of nested complex formulas", () => { const formula = Formula.pow(1.05, variable).times(100).pow(0.5); - expect(() => formula.invertIntegral(100)).toThrow(); + expect(() => formula.invertIntegral(100)).toLogError(); }); }); @@ -765,7 +766,7 @@ describe("Step-wise", () => { ); expect(() => Formula.step(constant, 10, value => Formula.add(value, 10)).evaluateIntegral() - ).toThrow(); + ).toLogError(); }); test("Formula never marked as having an invertible integral", () => { @@ -774,7 +775,7 @@ describe("Step-wise", () => { ).toBe(false); expect(() => Formula.step(constant, 10, value => Formula.add(value, 10)).invertIntegral(10) - ).toThrow(); + ).toLogError(); }); test("Formula modifiers with variables mark formula as non-invertible", () => { @@ -866,7 +867,7 @@ describe("Conditionals", () => { ); expect(() => Formula.if(constant, true, value => Formula.add(value, 10)).evaluateIntegral() - ).toThrow(); + ).toLogError(); }); test("Formula never marked as having an invertible integral", () => { @@ -875,7 +876,7 @@ describe("Conditionals", () => { ).toBe(false); expect(() => Formula.if(constant, true, value => Formula.add(value, 10)).invertIntegral(10) - ).toThrow(); + ).toLogError(); }); test("Formula modifiers with variables mark formula as non-invertible", () => { @@ -976,7 +977,7 @@ describe("Custom Formulas", () => { evaluate: () => 6, invert: value => value }).invert(10) - ).toThrow()); + ).toLogError()); test("One input inverts correctly", () => expect( new Formula({ @@ -1003,7 +1004,7 @@ describe("Custom Formulas", () => { evaluate: () => 0, integrate: stack => variable }).evaluateIntegral() - ).toThrow()); + ).toLogError()); test("One input integrates correctly", () => expect( new Formula({ @@ -1030,7 +1031,7 @@ describe("Custom Formulas", () => { evaluate: () => 0, integrate: stack => variable }).invertIntegral(20) - ).toThrow()); + ).toLogError()); test("One input inverts integral correctly", () => expect( new Formula({ @@ -1074,18 +1075,18 @@ describe("Buy Max", () => { resource = createResource(ref(100000)); }); describe("Without cumulative cost", () => { - test("Throws on calculating max affordable of non-invertible formula", () => { + test("Errors on calculating max affordable of non-invertible formula", () => { const purchases = ref(1); const variable = Formula.variable(purchases); const formula = Formula.abs(variable); const maxAffordable = calculateMaxAffordable(formula, resource, false); - expect(() => maxAffordable.value).toThrow(); + expect(() => maxAffordable.value).toLogError(); }); - test("Throws on calculating cost of non-invertible formula", () => { + test("Errors on calculating cost of non-invertible formula", () => { const purchases = ref(1); const variable = Formula.variable(purchases); const formula = Formula.abs(variable); - expect(() => calculateCost(formula, 5, false, 0)).toThrow(); + expect(() => calculateCost(formula, 5, false, 0)).toLogError(); }); test("Calculates max affordable and cost correctly", () => { const variable = Formula.variable(0); @@ -1110,18 +1111,18 @@ describe("Buy Max", () => { }); }); describe("With cumulative cost", () => { - test("Throws on calculating max affordable of non-invertible formula", () => { + test("Errors on calculating max affordable of non-invertible formula", () => { const purchases = ref(1); const variable = Formula.variable(purchases); const formula = Formula.abs(variable); const maxAffordable = calculateMaxAffordable(formula, resource, true); - expect(() => maxAffordable.value).toThrow(); + expect(() => maxAffordable.value).toLogError(); }); - test("Throws on calculating cost of non-invertible formula", () => { + test("Errors on calculating cost of non-invertible formula", () => { const purchases = ref(1); const variable = Formula.variable(purchases); const formula = Formula.abs(variable); - expect(() => calculateCost(formula, 5, true, 0)).toThrow(); + expect(() => calculateCost(formula, 5, true, 0)).toLogError(); }); test("Estimates max affordable and cost correctly with 0 purchases", () => { const purchases = ref(0); @@ -1266,7 +1267,7 @@ describe("Buy Max", () => { test("Handles direct sum of non-integrable formula", () => { const purchases = ref(0); const formula = Formula.variable(purchases).abs(); - expect(() => calculateCost(formula, 10)).not.toThrow(); + expect(() => calculateCost(formula, 10)).not.toLogError(); }); }); }); diff --git a/tests/utils.ts b/tests/utils.ts index a1e6084..4252eac 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -1,8 +1,9 @@ import Decimal, { DecimalSource, format } from "util/bignum"; -import { expect } from "vitest"; +import { Mock, expect, vi } from "vitest"; interface CustomMatchers<R = unknown> { compare_tolerance(expected: DecimalSource, tolerance?: number): R; + toLogError(): R; } declare global { @@ -36,5 +37,25 @@ expect.extend({ expected: format(expected), actual: format(received) }; + }, + toLogError(received: () => unknown) { + const { isNot } = this; + console.error = vi.fn(); + received(); + const calls = ( + console.error as unknown as Mock< + Parameters<typeof console.error>, + ReturnType<typeof console.error> + > + ).mock.calls.length; + const pass = calls >= 1; + vi.restoreAllMocks(); + return { + pass, + message: () => + `Expected ${received} to ${(isNot as boolean) ? " not" : ""} log an error`, + expected: "1+", + actual: calls + }; } }); From 5c1152460f04a25dd4a5fbd2a09fa13b413123be Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 17 May 2023 18:52:22 -0500 Subject: [PATCH 097/134] Version Bump --- CHANGELOG.md | 36 ++++++++++++++++++++++++++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41df500..78e51ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,42 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.6.1] - 2023-05-17 +### Added +- Error boundaries around each layer, and errors now display on the page when in development +- Utility for creating requirement based on whether a conversion has met a requirement +### Changed +- **BREAKING** Formulas/requirements refactor + - spendResources renamed to cumulativeCost + - summedPurchases renamed to directSum + - calculateMaxAffordable now takes optional 'maxBulkAmount' parameter + - cost requirements now pass cumulativeCost, maxBulkAmount, and directSum to calculateMaxAffordable + - Non-integrable and non-invertible formulas will now work in more situations + - Repeatable.maximize is removed + - Challenge.maximize is removed +- Formulas have better typing information now +- Integrate functions now log errors if the variable input is not integrable +- Cyclical proxies now throw errors +- createFormulaPreview is now a JSX function +- Tree nodes are not automatically capitalized anymore +- upgrade.canPurchase now returns false if the upgrade is already bought +- TPS display is simplified and more performant now +### Fixed +- Actions could not be constructed +- Progress bar on actions was misaligned +- Many different issues the Board features (and many changes/improvements) +- Calculating max affordable could sometimes infinite loop +- Non-integrable formulas could cause errors in cost requirements +- estimateTime would not show "never" when production is 0 +- isInvertible and isIntegrable now properly handle nested formulas +- Repeatables' amount display would show the literal text "joinJSX" +- Repeatables would not buy max properly +- Reset buttons were showing wrong "currentAt" vs "nextAt" +- Step-wise formulas not updating their value correctly +- Bonus amount decorator now checks for `amount` property in the post construct callback +### Documentation +- Various typos fixed and a few sections made more thorough + ## [0.6.0] - 2023-04-20 ### Added - **BREAKING** New requirements system diff --git a/package-lock.json b/package-lock.json index 3e7acae..f747006 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "profectus", - "version": "0.6.0", + "version": "0.6.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "profectus", - "version": "0.6.0", + "version": "0.6.1", "dependencies": { "@fontsource/material-icons": "^4.5.4", "@fontsource/roboto-mono": "^4.5.8", diff --git a/package.json b/package.json index 4aa9568..3c1c415 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "profectus", - "version": "0.6.0", + "version": "0.6.1", "private": true, "scripts": { "start": "vite", From 56279e37941b371df2906a07f55281dcc70207c5 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 17 May 2023 20:05:37 -0500 Subject: [PATCH 098/134] Fix thrown errors not appearing in console --- src/main.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main.ts b/src/main.ts index 9fb753b..e416fa5 100644 --- a/src/main.ts +++ b/src/main.ts @@ -32,14 +32,16 @@ console.error = function (...args) { error(...args); }; -window.onerror = function (event, source, lineno, colno, error) { - state.errors.push(error instanceof Error ? error : new Error(JSON.stringify(error))); +window.onerror = function (event, source, lineno, colno, err) { + state.errors.push(err instanceof Error ? err : new Error(JSON.stringify(err))); + error(err); return true; }; window.onunhandledrejection = function (event) { state.errors.push( event.reason instanceof Error ? event.reason : new Error(JSON.stringify(event.reason)) ); + error(event.reason); }; document.title = projInfo.title; From 3b7436ab89d132c9ef07952049263328fbf7f08f Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Thu, 18 May 2023 16:49:22 -0500 Subject: [PATCH 099/134] Clarify progress is from 0 to 1 --- src/features/boards/board.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/boards/board.ts b/src/features/boards/board.ts index 4412918..8a9026f 100644 --- a/src/features/boards/board.ts +++ b/src/features/boards/board.ts @@ -104,7 +104,7 @@ export interface NodeTypeOptions { shape: NodeComputable<Shape>; /** Whether the node can accept another node being dropped upon it. */ canAccept?: NodeComputable<boolean, [BoardNode]>; - /** The progress value of the node. */ + /** The progress value of the node, from 0 to 1. */ progress?: NodeComputable<number>; /** How the progress should be displayed on the node. */ progressDisplay?: NodeComputable<ProgressDisplay>; From a5efed6e4ad60247021b5429483d8de38c4126df Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Thu, 18 May 2023 18:56:42 -0500 Subject: [PATCH 100/134] Add export save button to error component --- src/components/Error.vue | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/src/components/Error.vue b/src/components/Error.vue index 19b6fe4..16c9b6b 100644 --- a/src/components/Error.vue +++ b/src/components/Error.vue @@ -13,7 +13,11 @@ Check the console for more details, and consider sharing it with the developers on <a :href="projInfo.discordLink || 'https://discord.gg/yJ4fjnjU54'" class="discord-link" >discord</a - >!<br /> + >! + <FeedbackButton @click="exportSave" class="button" style="display: inline-flex" + ><span class="material-icons" style="font-size: 16px">content_paste</span + ><span style="margin-left: 8px; font-size: medium">Copy Save</span></FeedbackButton + ><br /> <div v-if="errors.length > 1" style="margin-top: 20px"><h3>Other errors</h3></div> <div v-for="(error, i) in errors.slice(1)" :key="i" style="margin-top: 20px"> <details class="error-details"> @@ -32,8 +36,10 @@ <script setup lang="ts"> import projInfo from "data/projInfo.json"; -import player from "game/player"; +import player, { stringifySave } from "game/player"; +import LZString from "lz-string"; import { computed, onMounted } from "vue"; +import FeedbackButton from "./fields/FeedbackButton.vue"; const props = defineProps<{ errors: Error[]; @@ -53,6 +59,32 @@ const causes = computed(() => ) ); +function exportSave() { + let saveToExport = stringifySave(player); + switch (projInfo.exportEncoding) { + default: + console.warn(`Unknown save encoding: ${projInfo.exportEncoding}. Defaulting to lz`); + case "lz": + saveToExport = LZString.compressToUTF16(saveToExport); + break; + case "base64": + saveToExport = btoa(unescape(encodeURIComponent(saveToExport))); + break; + case "plain": + break; + } + console.log(saveToExport); + + // Put on clipboard. Using the clipboard API asks for permissions and stuff + const el = document.createElement("textarea"); + el.value = saveToExport; + document.body.appendChild(el); + el.select(); + el.setSelectionRange(0, 99999); + document.execCommand("copy"); + document.body.removeChild(el); +} + onMounted(() => { player.autosave = false; player.devSpeed = 0; From e896fd84cffadad1de05fe6b498b46c09926745a Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Fri, 19 May 2023 08:04:04 -0500 Subject: [PATCH 101/134] Change formula testing values to hopefully catch any other miscalculations --- tests/game/formulas.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/game/formulas.test.ts b/tests/game/formulas.test.ts index a36d099..5209ff8 100644 --- a/tests/game/formulas.test.ts +++ b/tests/game/formulas.test.ts @@ -13,7 +13,7 @@ import { InvertibleIntegralFormula } from "game/formulas/types"; type FormulaFunctions = keyof GenericFormula & keyof typeof Formula & keyof typeof Decimal; -const testValues = [-1, "0", Decimal.dOne] as const; +const testValues = [-2, "0", new Decimal(10.5)] as const; const invertibleZeroParamFunctionNames = [ "neg", From 210c2290f05c2125f70381f0c20a31b94d8ed7e1 Mon Sep 17 00:00:00 2001 From: Anthony Lawn <thepaperpilot@gmail.com> Date: Fri, 19 May 2023 10:12:24 -0500 Subject: [PATCH 102/134] Fix #9 --- src/game/requirements.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/requirements.tsx b/src/game/requirements.tsx index 60f0e20..ea82a64 100644 --- a/src/game/requirements.tsx +++ b/src/game/requirements.tsx @@ -222,7 +222,7 @@ export function createCostRequirement<T extends CostRequirementOptions>( Decimal.gte( req.resource.value, unref(req.cost as ProcessedComputable<DecimalSource>) - ) + ) ? 1 : 0 ); } From d6c9f95851d39c53d49f4961d0d880ee5a91b8bb Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 20 May 2023 08:28:27 -0500 Subject: [PATCH 103/134] Fix error about pinnable tooltips --- src/data/layers/prestige.tsx | 3 ++- src/features/tooltips/tooltip.ts | 12 ------------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/src/data/layers/prestige.tsx b/src/data/layers/prestige.tsx index 30fe99f..6e3cb69 100644 --- a/src/data/layers/prestige.tsx +++ b/src/data/layers/prestige.tsx @@ -37,7 +37,7 @@ const layer = createLayer(id, function (this: BaseLayer) { color, reset })); - addTooltip(treeNode, { + const tooltip = addTooltip(treeNode, { display: createResourceTooltip(points), pinnable: true }); @@ -58,6 +58,7 @@ const layer = createLayer(id, function (this: BaseLayer) { name, color, points, + tooltip, display: jsx(() => ( <> <MainDisplay resource={points} color={color} /> diff --git a/src/features/tooltips/tooltip.ts b/src/features/tooltips/tooltip.ts index b5b1042..54d782c 100644 --- a/src/features/tooltips/tooltip.ts +++ b/src/features/tooltips/tooltip.ts @@ -95,18 +95,6 @@ export function addTooltip<T extends TooltipOptions>( } nextTick(() => { - if (options.pinnable) { - if ("pinned" in element) { - console.error( - "Cannot add pinnable tooltip to element that already has a property called 'pinned'" - ); - options.pinnable = false; - deletePersistent(options.pinned as Persistent<boolean>); - } else { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (element as any).pinned = options.pinned; - } - } const elementComponent = element[Component]; element[Component] = TooltipComponent as GenericComponent; const elementGatherProps = element[GatherProps].bind(element); From 63dcad4c1225883f846311c025480fecd1882f09 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 20 May 2023 08:30:07 -0500 Subject: [PATCH 104/134] Fix requirements tests --- tests/game/requirements.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/game/requirements.test.ts b/tests/game/requirements.test.ts index f6143ca..8ee3c43 100644 --- a/tests/game/requirements.test.ts +++ b/tests/game/requirements.test.ts @@ -83,7 +83,7 @@ describe("Creating cost requirement", () => { cost: 10, cumulativeCost: false })); - expect(unref(requirement.requirementMet)).toBe(true); + expect(unref(requirement.requirementMet)).toBe(1); }); test("Requirement not met when not meeting the cost", () => { @@ -92,7 +92,7 @@ describe("Creating cost requirement", () => { cost: 100, cumulativeCost: false })); - expect(unref(requirement.requirementMet)).toBe(false); + expect(unref(requirement.requirementMet)).toBe(0); }); describe("canMaximize works correctly", () => { From c8ba77b89b359881a4d85551b5249e278208091f Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 20 May 2023 21:24:59 -0500 Subject: [PATCH 105/134] Fix Direction.Left bars --- src/features/bars/Bar.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/bars/Bar.vue b/src/features/bars/Bar.vue index 89315bb..4d7bb16 100644 --- a/src/features/bars/Bar.vue +++ b/src/features/bars/Bar.vue @@ -120,7 +120,7 @@ export default defineComponent({ barStyle.clipPath = `inset(0% ${normalizedProgress.value}% 0% 0%)`; break; case Direction.Left: - barStyle.clipPath = `inset(0% 0% 0% ${normalizedProgress.value} + '%)`; + barStyle.clipPath = `inset(0% 0% 0% ${normalizedProgress.value}%)`; break; case Direction.Default: barStyle.clipPath = "inset(0% 50% 0% 0%)"; From e0f1296b35f68d30805c691d995fd1d9f23872a0 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sat, 20 May 2023 21:56:46 -0500 Subject: [PATCH 106/134] Rename "The Paper Pilot Community" to "Profectus & Friends" --- src/components/Info.vue | 2 +- src/components/NaNScreen.vue | 2 +- src/components/Nav.vue | 8 ++------ 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/components/Info.vue b/src/components/Info.vue index 9dd0c2d..15395bf 100644 --- a/src/components/Info.vue +++ b/src/components/Info.vue @@ -38,7 +38,7 @@ target="_blank" > <span class="material-icons info-modal-discord">discord</span> - The Paper Pilot Community + Profectus & Friends </a> </div> <div> diff --git a/src/components/NaNScreen.vue b/src/components/NaNScreen.vue index de69d5b..f9c7b6f 100644 --- a/src/components/NaNScreen.vue +++ b/src/components/NaNScreen.vue @@ -19,7 +19,7 @@ class="nan-modal-discord-link" > <span class="material-icons nan-modal-discord">discord</span> - {{ discordName || "The Paper Pilot Community" }} + {{ discordName || "Profectus & Friends" }} </a> </div> <br /> diff --git a/src/components/Nav.vue b/src/components/Nav.vue index a71f15d..c5d0026 100644 --- a/src/components/Nav.vue +++ b/src/components/Nav.vue @@ -15,9 +15,7 @@ <a :href="discordLink" target="_blank">{{ discordName }}</a> </li> <li> - <a href="https://discord.gg/yJ4fjnjU54" target="_blank" - >The Paper Pilot Community</a - > + <a href="https://discord.gg/yJ4fjnjU54" target="_blank">Profectus & Friends</a> </li> <li> <a href="https://discord.gg/F3xveHV" target="_blank">The Modding Tree</a> @@ -82,9 +80,7 @@ <a :href="discordLink" target="_blank">{{ discordName }}</a> </li> <li> - <a href="https://discord.gg/yJ4fjnjU54" target="_blank" - >The Paper Pilot Community</a - > + <a href="https://discord.gg/yJ4fjnjU54" target="_blank">Profectus & Friends</a> </li> <li> <a href="https://discord.gg/F3xveHV" target="_blank">The Modding Tree</a> From 6ad08c405255b60c68fb80cef1c179c5c4e0d93a Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 21 May 2023 17:27:04 -0500 Subject: [PATCH 107/134] Fix camelCase props not working on links --- src/features/boards/BoardLink.vue | 5 ++++- src/features/links/Link.vue | 5 ++++- src/util/common.ts | 5 +++++ src/util/vue.tsx | 8 ++++++++ 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/features/boards/BoardLink.vue b/src/features/boards/BoardLink.vue index 1f5ca17..30e5748 100644 --- a/src/features/boards/BoardLink.vue +++ b/src/features/boards/BoardLink.vue @@ -1,7 +1,7 @@ <template> <line class="link" - v-bind="link" + v-bind="linkProps" :class="{ pulsing: link.pulsing }" :x1="startPosition.x" :y1="startPosition.y" @@ -12,6 +12,7 @@ <script setup lang="ts"> import type { BoardNode, BoardNodeLink } from "features/boards/board"; +import { kebabifyObject } from "util/vue"; import { computed, toRefs, unref } from "vue"; const _props = defineProps<{ @@ -49,6 +50,8 @@ const endPosition = computed(() => { } return position; }); + +const linkProps = computed(() => kebabifyObject(_props.link as unknown as Record<string, unknown>)); </script> <style scoped> diff --git a/src/features/links/Link.vue b/src/features/links/Link.vue index f7b9580..815f511 100644 --- a/src/features/links/Link.vue +++ b/src/features/links/Link.vue @@ -2,7 +2,7 @@ <line stroke-width="15px" stroke="white" - v-bind="link" + v-bind="linkProps" :x1="startPosition.x" :y1="startPosition.y" :x2="endPosition.x" @@ -13,6 +13,7 @@ <script setup lang="ts"> import type { Link } from "features/links/links"; import type { FeatureNode } from "game/layers"; +import { kebabifyObject } from "util/vue"; import { computed, toRefs } from "vue"; const _props = defineProps<{ @@ -54,4 +55,6 @@ const endPosition = computed(() => { } return position; }); + +const linkProps = computed(() => kebabifyObject(_props.link as unknown as Record<string, unknown>)); </script> diff --git a/src/util/common.ts b/src/util/common.ts index d7560dd..dbbe233 100644 --- a/src/util/common.ts +++ b/src/util/common.ts @@ -12,6 +12,11 @@ export function camelToTitle(camel: string): string { return title; } +export function camelToKebab(camel: string) { + // Split off first character so function works on upper camel (pascal) case + return (camel[0] + camel.slice(1).replace(/[A-Z]/g, c => `-${c}`)).toLowerCase(); +} + export function isFunction<T, S extends ReadonlyArray<unknown>, R>( functionOrValue: ((...args: S) => T) | R ): functionOrValue is (...args: S) => T { diff --git a/src/util/vue.tsx b/src/util/vue.tsx index a3897a5..3ba5f06 100644 --- a/src/util/vue.tsx +++ b/src/util/vue.tsx @@ -21,6 +21,7 @@ import { unref, watchEffect } from "vue"; +import { camelToKebab } from "./common"; export function coerceComponent( component: CoercableComponent, @@ -241,3 +242,10 @@ export function trackHover(element: VueFeature): Ref<boolean> { return isHovered; } + +export function kebabifyObject(object: Record<string, unknown>) { + return Object.keys(object).reduce((acc, curr) => { + acc[camelToKebab(curr)] = object[curr]; + return acc; + }, {} as Record<string, unknown>); +} From 9edda4d957def8db36007958b387f3c278ad2b21 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Mon, 22 May 2023 21:15:55 -0500 Subject: [PATCH 108/134] Make links ignore pointer events --- src/features/boards/BoardLink.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/features/boards/BoardLink.vue b/src/features/boards/BoardLink.vue index 30e5748..5dacc66 100644 --- a/src/features/boards/BoardLink.vue +++ b/src/features/boards/BoardLink.vue @@ -57,6 +57,7 @@ const linkProps = computed(() => kebabifyObject(_props.link as unknown as Record <style scoped> .link { transition-duration: 0s; + pointer-events: none; } .link.pulsing { From eee5ac3e2de292636a982500c3822a605dfd9d09 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Tue, 30 May 2023 22:52:24 -0500 Subject: [PATCH 109/134] Fix passthroughs for inversions and make more operations invertible --- src/game/formulas/formulas.ts | 26 +++++++++++++++++++++----- src/game/formulas/operations.ts | 17 ++++++++++++++++- tests/game/formulas.test.ts | 24 ++++++++++++++---------- 3 files changed, 51 insertions(+), 16 deletions(-) diff --git a/src/game/formulas/formulas.ts b/src/game/formulas/formulas.ts index d9a6bed..7f88d0c 100644 --- a/src/game/formulas/formulas.ts +++ b/src/game/formulas/formulas.ts @@ -345,19 +345,35 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[ public static sgn = InternalFormula.sign; public static round(value: FormulaSource) { - return new Formula({ inputs: [value], evaluate: Decimal.round }); + return new Formula({ + inputs: [value], + evaluate: Decimal.round, + invert: ops.invertPassthrough + }); } public static floor(value: FormulaSource) { - return new Formula({ inputs: [value], evaluate: Decimal.floor }); + return new Formula({ + inputs: [value], + evaluate: Decimal.floor, + invert: ops.invertPassthrough + }); } public static ceil(value: FormulaSource) { - return new Formula({ inputs: [value], evaluate: Decimal.ceil }); + return new Formula({ + inputs: [value], + evaluate: Decimal.ceil, + invert: ops.invertPassthrough + }); } public static trunc(value: FormulaSource) { - return new Formula({ inputs: [value], evaluate: Decimal.trunc }); + return new Formula({ + inputs: [value], + evaluate: Decimal.trunc, + invert: ops.invertPassthrough + }); } public static add<T extends GenericFormula>(value: T, other: FormulaSource): T; @@ -459,7 +475,7 @@ export abstract class InternalFormula<T extends [FormulaSource] | FormulaSource[ return new Formula({ inputs: [value, min, max], evaluate: Decimal.clamp, - invert: ops.passthrough as InvertFunction<[FormulaSource, FormulaSource, FormulaSource]> + invert: ops.invertPassthrough }); } diff --git a/src/game/formulas/operations.ts b/src/game/formulas/operations.ts index e8bd04d..586319e 100644 --- a/src/game/formulas/operations.ts +++ b/src/game/formulas/operations.ts @@ -1,6 +1,12 @@ import Decimal, { DecimalSource } from "util/bignum"; import Formula, { hasVariable, unrefFormulaSource } from "./formulas"; -import { FormulaSource, GenericFormula, InvertFunction, SubstitutionStack } from "./types"; +import { + FormulaSource, + GenericFormula, + InvertFunction, + InvertibleFormula, + SubstitutionStack +} from "./types"; const ln10 = Decimal.ln(10); @@ -8,6 +14,15 @@ export function passthrough<T extends GenericFormula | DecimalSource>(value: T): return value; } +export function invertPassthrough(value: DecimalSource, ...inputs: FormulaSource[]) { + const variable = inputs.find(input => hasVariable(input)) as InvertibleFormula | undefined; + if (variable == null) { + console.error("Could not invert due to no input being a variable"); + return 0; + } + return variable.invert(value); +} + export function invertNeg(value: DecimalSource, lhs: FormulaSource) { if (hasVariable(lhs)) { return lhs.invert(Decimal.neg(value)); diff --git a/tests/game/formulas.test.ts b/tests/game/formulas.test.ts index 5209ff8..98bb82d 100644 --- a/tests/game/formulas.test.ts +++ b/tests/game/formulas.test.ts @@ -16,6 +16,10 @@ type FormulaFunctions = keyof GenericFormula & keyof typeof Formula & keyof type const testValues = [-2, "0", new Decimal(10.5)] as const; const invertibleZeroParamFunctionNames = [ + "round", + "floor", + "ceil", + "trunc", "neg", "recip", "log10", @@ -48,10 +52,6 @@ const invertibleZeroParamFunctionNames = [ const nonInvertibleZeroParamFunctionNames = [ "abs", "sign", - "round", - "floor", - "ceil", - "trunc", "pLog10", "absLog10", "factorial", @@ -85,6 +85,10 @@ const integrableZeroParamFunctionNames = [ ] as const; const nonIntegrableZeroParamFunctionNames = [ ...nonInvertibleZeroParamFunctionNames, + "round", + "floor", + "ceil", + "trunc", "lambertw", "ssqrt" ] as const; @@ -151,7 +155,7 @@ describe("Formula Equality Checking", () => { describe("Formula aliases", () => { function testAliases<T extends FormulaFunctions>( aliases: T[], - args: Parameters<(typeof Formula)[T]> + args: Parameters<typeof Formula[T]> ) { describe(aliases[0], () => { let formula: GenericFormula; @@ -246,7 +250,7 @@ describe("Creating Formulas", () => { function checkFormula<T extends FormulaFunctions>( functionName: T, - args: Readonly<Parameters<(typeof Formula)[T]>> + args: Readonly<Parameters<typeof Formula[T]>> ) { let formula: GenericFormula; beforeAll(() => { @@ -270,7 +274,7 @@ describe("Creating Formulas", () => { // It's a lot of tests, but I'd rather be exhaustive function testFormulaCall<T extends FormulaFunctions>( functionName: T, - args: Readonly<Parameters<(typeof Formula)[T]>> + args: Readonly<Parameters<typeof Formula[T]>> ) { if ((functionName === "slog" || functionName === "layeradd") && args[0] === -1) { // These cases in particular take a long time, so skip them @@ -488,18 +492,18 @@ describe("Inverting", () => { }); test("Inverting nested formulas", () => { - const formula = Formula.add(variable, constant).times(constant); + const formula = Formula.add(variable, constant).times(constant).floor(); expect(formula.invert(100)).compare_tolerance(0); }); describe("Inverting with non-invertible sections", () => { test("Non-invertible constant", () => { - const formula = Formula.add(variable, constant.ceil()); + const formula = Formula.add(variable, constant.sign()); expect(formula.isInvertible()).toBe(true); expect(() => formula.invert(10)).not.toLogError(); }); test("Non-invertible variable", () => { - const formula = Formula.add(variable.ceil(), constant); + const formula = Formula.add(variable.sign(), constant); expect(formula.isInvertible()).toBe(false); expect(() => formula.invert(10)).toLogError(); }); From 3fe03113311e738186dfa208e7a9b0923aae0e0d Mon Sep 17 00:00:00 2001 From: Anthony Lawn <thepaperpilot@gmail.com> Date: Fri, 9 Jun 2023 15:43:25 -0500 Subject: [PATCH 110/134] Try to allow actions to be run manually --- .github/workflows/deploy.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index f4210ed..8293b9e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -3,6 +3,7 @@ on: push: branches: - 'main' + workflow_dispatch: jobs: build-and-deploy: if: github.repository != 'profectus-engine/Profectus' # Don't build placeholder mod on main repo From d0fffd3b89aa6dbecf689bbb30cb0a6621afa24d Mon Sep 17 00:00:00 2001 From: Anthony Lawn <thepaperpilot@gmail.com> Date: Fri, 9 Jun 2023 15:45:56 -0500 Subject: [PATCH 111/134] Update test.yml --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c6b970d..de6f71a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,4 +1,4 @@ -name: Build and Deploy +name: Run Tests on: push: branches: [ main ] From 0cccf7aeccdc7a922ff92d8a149ab05db8d27ffe Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 11 Oct 2023 21:39:01 -0500 Subject: [PATCH 112/134] Add isRendered utility --- src/data/common.tsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/data/common.tsx b/src/data/common.tsx index c81fa0d..e5b1fce 100644 --- a/src/data/common.tsx +++ b/src/data/common.tsx @@ -9,6 +9,7 @@ import { Resource, displayResource } from "features/resources/resource"; import type { GenericTree, GenericTreeNode, TreeNode, TreeNodeOptions } from "features/trees/tree"; import { createTreeNode } from "features/trees/tree"; import type { GenericFormula } from "game/formulas/types"; +import { BaseLayer } from "game/layers"; import type { Modifier } from "game/modifiers"; import type { Persistent } from "game/persistence"; import { DefaultValue, persistent } from "game/persistence"; @@ -485,3 +486,16 @@ export function createFormulaPreview( return <>{formatSmall(formula.evaluate())}</>; }); } + +/** + * Utility function for getting a computed boolean for whether or not a given feature is currently rendered in the DOM. + * Note it will have a true value even if the feature is off screen. + * @param layer The layer the feature appears within + * @param id The ID of the feature + */ +export function isRendered(layer: BaseLayer, id: string): ComputedRef<boolean>; +export function isRendered(layer: BaseLayer, feature: { id: string }): ComputedRef<boolean>; +export function isRendered(layer: BaseLayer, idOrFeature: string | { id: string }) { + const id = typeof idOrFeature === "string" ? idOrFeature : idOrFeature.id; + return computed(() => id in layer.nodes.value); +} From a5204106aa09a15709828e234ad2cd49c8803fa7 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Wed, 11 Oct 2023 21:44:02 -0500 Subject: [PATCH 113/134] Forgot to comment the other signature --- src/data/common.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/data/common.tsx b/src/data/common.tsx index e5b1fce..4be7004 100644 --- a/src/data/common.tsx +++ b/src/data/common.tsx @@ -494,6 +494,12 @@ export function createFormulaPreview( * @param id The ID of the feature */ export function isRendered(layer: BaseLayer, id: string): ComputedRef<boolean>; +/** + * Utility function for getting a computed boolean for whether or not a given feature is currently rendered in the DOM. + * Note it will have a true value even if the feature is off screen. + * @param layer The layer the feature appears within + * @param feature The feature that may be rendered + */ export function isRendered(layer: BaseLayer, feature: { id: string }): ComputedRef<boolean>; export function isRendered(layer: BaseLayer, idOrFeature: string | { id: string }) { const id = typeof idOrFeature === "string" ? idOrFeature : idOrFeature.id; From 6d148da260e5d276554e1aeb441d618c68ac0736 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 5 Nov 2023 07:28:43 -0600 Subject: [PATCH 114/134] Add forgejo workflows --- .forgejo/workflows/deploy.yml | 26 ++++++++++++++++++++++++++ .forgejo/workflows/test.yml | 21 +++++++++++++++++++++ .github/workflows/test.yml | 2 +- 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 .forgejo/workflows/deploy.yml create mode 100644 .forgejo/workflows/test.yml diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml new file mode 100644 index 0000000..8666cbe --- /dev/null +++ b/.forgejo/workflows/deploy.yml @@ -0,0 +1,26 @@ +name: Build and Deploy +on: + push: + branches: + - 'main' + workflow_dispatch: +jobs: + build-and-deploy: + if: github.repository != 'profectus-engine/Profectus' # Don't build placeholder mod on main repo + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Install and Build 🔧 # This example project is built using npm and outputs the result to the 'build' folder. Replace with the commands required to build your project, or remove this step entirely if your site is pre-built. + run: | + npm ci + npm run build + + - name: Deploy 🚀 + uses: JamesIves/github-pages-deploy-action@v4.2.5 + with: + branch: pages # The branch the action should deploy to. + folder: dist # The folder the action should deploy. diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml new file mode 100644 index 0000000..c41d085 --- /dev/null +++ b/.forgejo/workflows/test.yml @@ -0,0 +1,21 @@ +name: Run Tests +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] +jobs: + test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Use Node.js 16.x + uses: actions/setup-node@v3 + with: + node-version: 16.x + - run: npm ci + - run: npm run build --if-present + - run: npm test diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index de6f71a..c41d085 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,7 +5,7 @@ on: pull_request: branches: [ main ] jobs: - build: + test: runs-on: ubuntu-latest steps: From 312cab1347e5513bf563283a9346262aa4f77d05 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 5 Nov 2023 07:42:28 -0600 Subject: [PATCH 115/134] Rename workflow files --- .forgejo/workflows/{deploy.yml => deploy.yaml} | 0 .forgejo/workflows/{test.yml => test.yaml} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename .forgejo/workflows/{deploy.yml => deploy.yaml} (100%) rename .forgejo/workflows/{test.yml => test.yaml} (100%) diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yaml similarity index 100% rename from .forgejo/workflows/deploy.yml rename to .forgejo/workflows/deploy.yaml diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yaml similarity index 100% rename from .forgejo/workflows/test.yml rename to .forgejo/workflows/test.yaml From d16bb55c3cb67a1ff05b44c04f8d4851e35bf10e Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 5 Nov 2023 07:46:30 -0600 Subject: [PATCH 116/134] Update runs-on --- .forgejo/workflows/test.yaml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/test.yaml b/.forgejo/workflows/test.yaml index c41d085..33df8d8 100644 --- a/.forgejo/workflows/test.yaml +++ b/.forgejo/workflows/test.yaml @@ -6,7 +6,7 @@ on: branches: [ main ] jobs: test: - runs-on: ubuntu-latest + runs-on: docker steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c41d085..33df8d8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,7 +6,7 @@ on: branches: [ main ] jobs: test: - runs-on: ubuntu-latest + runs-on: docker steps: - uses: actions/checkout@v3 From acf1d24c150ceb82821b821f2ea4d3ae7aa01b41 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 5 Nov 2023 08:27:35 -0600 Subject: [PATCH 117/134] Changed one of the wrong runs-on --- .forgejo/workflows/deploy.yaml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index 8666cbe..a0fcd36 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -7,7 +7,7 @@ on: jobs: build-and-deploy: if: github.repository != 'profectus-engine/Profectus' # Don't build placeholder mod on main repo - runs-on: ubuntu-latest + runs-on: docker steps: - name: Checkout 🛎️ uses: actions/checkout@v2 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 33df8d8..c41d085 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,7 +6,7 @@ on: branches: [ main ] jobs: test: - runs-on: docker + runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 From 65ff440e254623045490508eb05379e60fe1fb02 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 5 Nov 2023 08:42:39 -0600 Subject: [PATCH 118/134] Fully qualify pages deploy action --- .forgejo/workflows/deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index a0fcd36..edd50aa 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -20,7 +20,7 @@ jobs: npm run build - name: Deploy 🚀 - uses: JamesIves/github-pages-deploy-action@v4.2.5 + uses: https://github.com/JamesIves/github-pages-deploy-action@v4.2.5 with: branch: pages # The branch the action should deploy to. folder: dist # The folder the action should deploy. From 7330a6bda48b935ccc3fe343a9b1d95ffc2eddae Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 5 Nov 2023 09:09:47 -0600 Subject: [PATCH 119/134] Switch image to ubuntu:latest --- .forgejo/workflows/deploy.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index edd50aa..9eb9569 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -8,6 +8,7 @@ jobs: build-and-deploy: if: github.repository != 'profectus-engine/Profectus' # Don't build placeholder mod on main repo runs-on: docker + container: ubuntu:latest steps: - name: Checkout 🛎️ uses: actions/checkout@v2 From 005bf5da9a91d704d554377574440949fa93aa3b Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 5 Nov 2023 09:11:10 -0600 Subject: [PATCH 120/134] Try alpine instead --- .forgejo/workflows/deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index 9eb9569..7c86d47 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -8,7 +8,7 @@ jobs: build-and-deploy: if: github.repository != 'profectus-engine/Profectus' # Don't build placeholder mod on main repo runs-on: docker - container: ubuntu:latest + container: alpine:3.18 steps: - name: Checkout 🛎️ uses: actions/checkout@v2 From aabb0a1bbabd07321916940e6bfd03907eb10359 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 5 Nov 2023 09:13:56 -0600 Subject: [PATCH 121/134] Setup node --- .forgejo/workflows/deploy.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index 7c86d47..ce8ab1b 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -10,6 +10,11 @@ jobs: runs-on: docker container: alpine:3.18 steps: + - name: Setup NodeJS + uses: actions/setup-node@v3 + with: + node-version: 18 + - name: Checkout 🛎️ uses: actions/checkout@v2 with: From 52b500c9d84481efabac5fa98a37ebdd8021e3a7 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 5 Nov 2023 09:49:02 -0600 Subject: [PATCH 122/134] setup rsync --- .forgejo/workflows/deploy.yaml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index ce8ab1b..335e2c3 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -8,12 +8,10 @@ jobs: build-and-deploy: if: github.repository != 'profectus-engine/Profectus' # Don't build placeholder mod on main repo runs-on: docker - container: alpine:3.18 steps: - - name: Setup NodeJS - uses: actions/setup-node@v3 - with: - node-version: 18 + - name: Setup RSync + uses: GuillaumeFalourd/setup-rsync@v1.1 + run: rsync --version - name: Checkout 🛎️ uses: actions/checkout@v2 From c1d0b7eec6fbfe33c0e8c7a2cf0d6621635bb357 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 5 Nov 2023 09:55:52 -0600 Subject: [PATCH 123/134] Fully qualify >.< --- .forgejo/workflows/deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index 335e2c3..5923533 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -10,7 +10,7 @@ jobs: runs-on: docker steps: - name: Setup RSync - uses: GuillaumeFalourd/setup-rsync@v1.1 + uses: https://github.com/GuillaumeFalourd/setup-rsync@v1.1 run: rsync --version - name: Checkout 🛎️ From 766c600a70619d5a0e66c2e94f311dbded83ef75 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 5 Nov 2023 09:57:05 -0600 Subject: [PATCH 124/134] Were the rsync logs wrong --- .forgejo/workflows/deploy.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index 5923533..1e0dc2b 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -11,7 +11,6 @@ jobs: steps: - name: Setup RSync uses: https://github.com/GuillaumeFalourd/setup-rsync@v1.1 - run: rsync --version - name: Checkout 🛎️ uses: actions/checkout@v2 From 953cd8047e118562bc0423ca455d80280cffe2e7 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 5 Nov 2023 10:06:26 -0600 Subject: [PATCH 125/134] Install rsync the normal way --- .forgejo/workflows/deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index 1e0dc2b..3cac5ed 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -10,7 +10,7 @@ jobs: runs-on: docker steps: - name: Setup RSync - uses: https://github.com/GuillaumeFalourd/setup-rsync@v1.1 + run: apt get install rsync - name: Checkout 🛎️ uses: actions/checkout@v2 From 2c615ea5241c64b94a7f8410e050c7d79a22aff4 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 5 Nov 2023 10:07:06 -0600 Subject: [PATCH 126/134] Typo --- .forgejo/workflows/deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index 3cac5ed..6a16ddd 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -10,7 +10,7 @@ jobs: runs-on: docker steps: - name: Setup RSync - run: apt get install rsync + run: apt-get install rsync - name: Checkout 🛎️ uses: actions/checkout@v2 From e9283b5cca1ce3ed95e5748df1811d0189462e6d Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 5 Nov 2023 10:16:38 -0600 Subject: [PATCH 127/134] Update repos first --- .forgejo/workflows/deploy.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index 6a16ddd..233777d 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -10,7 +10,9 @@ jobs: runs-on: docker steps: - name: Setup RSync - run: apt-get install rsync + run: | + apt-get update + apt-get install rsync - name: Checkout 🛎️ uses: actions/checkout@v2 From 8065f8efa4900bfb7b2beb0acebff0d1cc5deee0 Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 5 Nov 2023 10:17:23 -0600 Subject: [PATCH 128/134] Approve install --- .forgejo/workflows/deploy.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml index 233777d..bc7210a 100644 --- a/.forgejo/workflows/deploy.yaml +++ b/.forgejo/workflows/deploy.yaml @@ -12,7 +12,7 @@ jobs: - name: Setup RSync run: | apt-get update - apt-get install rsync + apt-get install -y rsync - name: Checkout 🛎️ uses: actions/checkout@v2 From 2495dc9783f4d6f5bce1a8cdc6b87567e7baa27d Mon Sep 17 00:00:00 2001 From: thepaperpilot <thepaperpilot@gmail.com> Date: Sun, 5 Nov 2023 17:00:28 +0000 Subject: [PATCH 129/134] Implement forgejo actions workflows (#24) Reviewed-on: https://code.incremental.social/profectus/Profectus/pulls/24 Co-authored-by: thepaperpilot <thepaperpilot@gmail.com> Co-committed-by: thepaperpilot <thepaperpilot@gmail.com> --- .forgejo/workflows/deploy.yaml | 31 +++++++++++++++++++++++++++++++ .forgejo/workflows/test.yaml | 21 +++++++++++++++++++++ .github/workflows/test.yml | 2 +- 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 .forgejo/workflows/deploy.yaml create mode 100644 .forgejo/workflows/test.yaml diff --git a/.forgejo/workflows/deploy.yaml b/.forgejo/workflows/deploy.yaml new file mode 100644 index 0000000..bc7210a --- /dev/null +++ b/.forgejo/workflows/deploy.yaml @@ -0,0 +1,31 @@ +name: Build and Deploy +on: + push: + branches: + - 'main' + workflow_dispatch: +jobs: + build-and-deploy: + if: github.repository != 'profectus-engine/Profectus' # Don't build placeholder mod on main repo + runs-on: docker + steps: + - name: Setup RSync + run: | + apt-get update + apt-get install -y rsync + + - name: Checkout 🛎️ + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Install and Build 🔧 # This example project is built using npm and outputs the result to the 'build' folder. Replace with the commands required to build your project, or remove this step entirely if your site is pre-built. + run: | + npm ci + npm run build + + - name: Deploy 🚀 + uses: https://github.com/JamesIves/github-pages-deploy-action@v4.2.5 + with: + branch: pages # The branch the action should deploy to. + folder: dist # The folder the action should deploy. diff --git a/.forgejo/workflows/test.yaml b/.forgejo/workflows/test.yaml new file mode 100644 index 0000000..33df8d8 --- /dev/null +++ b/.forgejo/workflows/test.yaml @@ -0,0 +1,21 @@ +name: Run Tests +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] +jobs: + test: + runs-on: docker + + steps: + - uses: actions/checkout@v3 + with: + submodules: recursive + - name: Use Node.js 16.x + uses: actions/setup-node@v3 + with: + node-version: 16.x + - run: npm ci + - run: npm run build --if-present + - run: npm test diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index de6f71a..c41d085 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,7 +5,7 @@ on: pull_request: branches: [ main ] jobs: - build: + test: runs-on: ubuntu-latest steps: From 7750a3368d12be01f4543ee2583d985b05d228d3 Mon Sep 17 00:00:00 2001 From: Seth Posner <smartseth@hotmail.com> Date: Mon, 13 Nov 2023 14:09:48 -0800 Subject: [PATCH 130/134] Swap logic for nextAt display --- src/data/common.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/common.tsx b/src/data/common.tsx index 4be7004..c1286a2 100644 --- a/src/data/common.tsx +++ b/src/data/common.tsx @@ -134,8 +134,8 @@ export function createResetButton<T extends ClickableOptions & ResetButtonOption {unref(resetButton.conversion.buyMax) ? "Next:" : "Req:"}{" "} {displayResource( resetButton.conversion.baseResource, - !unref(resetButton.conversion.buyMax) || - Decimal.lt(unref(resetButton.conversion.actualGain), 1) + !unref(resetButton.conversion.buyMax) && + Decimal.gte(unref(resetButton.conversion.actualGain), 1) ? unref(resetButton.conversion.currentAt) : unref(resetButton.conversion.nextAt) )}{" "} From 8811996f640bb208ae7df872d48ac11c10231947 Mon Sep 17 00:00:00 2001 From: Seth Posner <smartseth@hotmail.com> Date: Mon, 13 Nov 2023 14:10:00 -0800 Subject: [PATCH 131/134] Add tests confirming low-input conversion values --- tests/features/conversions.test.ts | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tests/features/conversions.test.ts b/tests/features/conversions.test.ts index 09d6569..58e2e99 100644 --- a/tests/features/conversions.test.ts +++ b/tests/features/conversions.test.ts @@ -47,6 +47,10 @@ describe("Creating conversion", () => { baseResource.value = Decimal.pow(100, 2).times(10).add(1); expect(unref(conversion.currentGain)).compare_tolerance(100); }); + test("Zero", () => { + baseResource.value = Decimal.dZero; + expect(unref(conversion.currentGain)).compare_tolerance(0); + }); }); describe("Calculates actualGain correctly", () => { let conversion: GenericConversion; @@ -69,6 +73,10 @@ describe("Creating conversion", () => { baseResource.value = Decimal.pow(100, 2).times(10).add(1); expect(unref(conversion.actualGain)).compare_tolerance(100); }); + test("Zero", () => { + baseResource.value = Decimal.dZero; + expect(unref(conversion.actualGain)).compare_tolerance(0); + }); }); describe("Calculates currentAt correctly", () => { let conversion: GenericConversion; @@ -95,6 +103,10 @@ describe("Creating conversion", () => { Decimal.pow(100, 2).times(10) ); }); + test("Zero", () => { + baseResource.value = Decimal.dZero; + expect(unref(conversion.currentAt)).compare_tolerance(0); + }); }); describe("Calculates nextAt correctly", () => { let conversion: GenericConversion; @@ -117,6 +129,10 @@ describe("Creating conversion", () => { baseResource.value = Decimal.pow(100, 2).times(10).add(1); expect(unref(conversion.nextAt)).compare_tolerance(Decimal.pow(101, 2).times(10)); }); + test("Zero", () => { + baseResource.value = Decimal.dZero; + expect(unref(conversion.nextAt)).compare_tolerance(Decimal.dTen); + }); }); test("Converts correctly", () => { const conversion = createCumulativeConversion(() => ({ @@ -193,6 +209,10 @@ describe("Creating conversion", () => { baseResource.value = Decimal.pow(100, 2).times(10).add(1); expect(unref(conversion.currentGain)).compare_tolerance(100); }); + test("Zero", () => { + baseResource.value = Decimal.dZero; + expect(unref(conversion.currentGain)).compare_tolerance(1); + }); }); describe("Calculates actualGain correctly", () => { let conversion: GenericConversion; @@ -216,6 +236,10 @@ describe("Creating conversion", () => { baseResource.value = Decimal.pow(100, 2).times(10).add(1); expect(unref(conversion.actualGain)).compare_tolerance(99); }); + test("Zero", () => { + baseResource.value = Decimal.dZero; + expect(unref(conversion.actualGain)).compare_tolerance(0); + }); }); describe("Calculates currentAt correctly", () => { let conversion: GenericConversion; @@ -243,6 +267,10 @@ describe("Creating conversion", () => { Decimal.pow(100, 2).times(10) ); }); + test("Zero", () => { + baseResource.value = Decimal.dZero; + expect(unref(conversion.currentAt)).compare_tolerance(Decimal.pow(1, 2).times(10)); + }); }); describe("Calculates nextAt correctly", () => { let conversion: GenericConversion; @@ -266,6 +294,10 @@ describe("Creating conversion", () => { baseResource.value = Decimal.pow(100, 2).times(10).add(1); expect(unref(conversion.nextAt)).compare_tolerance(Decimal.pow(101, 2).times(10)); }); + test("Zero", () => { + baseResource.value = Decimal.dZero; + expect(unref(conversion.nextAt)).compare_tolerance(Decimal.pow(2, 2).times(10)); + }); }); test("Converts correctly", () => { const conversion = createIndependentConversion(() => ({ From cf6265d8ce78fcaec62f79689269a1e495c736cd Mon Sep 17 00:00:00 2001 From: Seth Posner <smartseth@hotmail.com> Date: Mon, 12 Feb 2024 07:58:39 -0800 Subject: [PATCH 132/134] Keep disabled modifiers when making formulas --- src/game/modifiers.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/modifiers.tsx b/src/game/modifiers.tsx index b65e7fc..1ee3905 100644 --- a/src/game/modifiers.tsx +++ b/src/game/modifiers.tsx @@ -297,9 +297,9 @@ export function createSequentialModifier< getFormula: modifiers.every(m => m.getFormula != null) ? (gain: FormulaSource) => modifiers - .filter(m => unref(m.enabled) !== false) // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - .reduce((acc, curr) => curr.getFormula!(acc), gain) + .reduce((acc, curr) => Formula.if(acc, curr.enabled ?? true, + acc => curr.getFormula!(acc), acc => acc), gain) : undefined, enabled: modifiers.some(m => m.enabled != null) ? computed(() => modifiers.filter(m => unref(m.enabled) !== false).length > 0) From 5e32fa4985d71991165d97b0c33b84e8b4b892b5 Mon Sep 17 00:00:00 2001 From: nif <nif@incremental.social> Date: Mon, 12 Feb 2024 19:46:31 +0000 Subject: [PATCH 133/134] Fix branchedResetPropagation BREAKING CHANGE - Forces branches to be directed Signed-off-by: nif <nif@incremental.social> --- src/features/trees/tree.ts | 43 +++++++++++++------------------------- 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/src/features/trees/tree.ts b/src/features/trees/tree.ts index da77f60..37b5ee6 100644 --- a/src/features/trees/tree.ts +++ b/src/features/trees/tree.ts @@ -338,34 +338,21 @@ export const branchedResetPropagation = function ( tree: GenericTree, resettingNode: GenericTreeNode ): void { - const visitedNodes = [resettingNode]; - let currentNodes = [resettingNode]; - if (tree.branches != null) { - const branches = unref(tree.branches); - while (currentNodes.length > 0) { - const nextNodes: GenericTreeNode[] = []; - currentNodes.forEach(node => { - branches - .filter(branch => branch.startNode === node || branch.endNode === node) - .map(branch => { - if (branch.startNode === node) { - return branch.endNode; - } - return branch.startNode; - }) - .filter(node => !visitedNodes.includes(node)) - .forEach(node => { - // Check here instead of in the filter because this check's results may - // change as we go through each node - if (!nextNodes.includes(node)) { - nextNodes.push(node); - node.reset?.reset(); - } - }); - }); - currentNodes = nextNodes; - visitedNodes.push(...currentNodes); - } + const links = unref(tree.branches); + if (links === undefined) return; + let reset: GenericTreeNode[] = []; + let current = [resettingNode]; + while (current.length != 0) { + let next: GenericTreeNode[] = []; + for (let node of current) { + for (let link of links.filter(link => link.startNode === node)) { + if ([...reset, ...current].includes(link.endNode)) continue + next.push(link.endNode); + link.endNode.reset?.reset(); + } + }; + reset = reset.concat(current); + current = next; } }; From 263c951cf85a0c1e156ff9c77f04e58e63dc47a1 Mon Sep 17 00:00:00 2001 From: TJCgames <minebloxdash@gmail.com> Date: Wed, 14 Feb 2024 15:56:18 +0000 Subject: [PATCH 134/134] Requested changes --- src/features/trees/tree.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/features/trees/tree.ts b/src/features/trees/tree.ts index 37b5ee6..8ec317f 100644 --- a/src/features/trees/tree.ts +++ b/src/features/trees/tree.ts @@ -339,19 +339,19 @@ export const branchedResetPropagation = function ( resettingNode: GenericTreeNode ): void { const links = unref(tree.branches); - if (links === undefined) return; - let reset: GenericTreeNode[] = []; + if (links == null) return; + const reset: GenericTreeNode[] = []; let current = [resettingNode]; while (current.length != 0) { - let next: GenericTreeNode[] = []; - for (let node of current) { - for (let link of links.filter(link => link.startNode === node)) { + const next: GenericTreeNode[] = []; + for (const node of current) { + for (const link of links.filter(link => link.startNode === node)) { if ([...reset, ...current].includes(link.endNode)) continue next.push(link.endNode); link.endNode.reset?.reset(); } }; - reset = reset.concat(current); + reset.push(...current); current = next; } };