From df103b622f3b2076b6cff8e5c087ec541088daa0 Mon Sep 17 00:00:00 2001 From: Mohamed EL AYADI Date: Fri, 25 Nov 2022 23:19:16 +0100 Subject: [PATCH 01/13] first bitwise brainstorming --- .../src/__tests__/other/read-source.test.ts | 6 +- .../src/__tests__/v2/get-flags.ts | 264 ++++++++++++++++ .../src/async-state/AsyncState.ts | 16 +- .../src/async-state/AsyncStateManager.ts | 8 +- .../src/async-state/utils.ts | 2 +- .../src/react/StateHookFlags.ts | 19 ++ .../src/react/loader-producer.ts | 4 +- .../src/react/useAsyncStateBase.ts | 14 +- .../react-async-states/src/react/useRun.ts | 4 +- .../src/react/useSelector.ts | 8 +- packages/react-async-states/src/react/v2.ts | 286 ++++++++++++++++++ .../react-async-states/src/types.internal.ts | 1 + 12 files changed, 601 insertions(+), 31 deletions(-) create mode 100644 packages/react-async-states/src/__tests__/v2/get-flags.ts create mode 100644 packages/react-async-states/src/react/StateHookFlags.ts create mode 100644 packages/react-async-states/src/react/v2.ts diff --git a/packages/react-async-states/src/__tests__/other/read-source.test.ts b/packages/react-async-states/src/__tests__/other/read-source.test.ts index 49dfdadf..38e48549 100644 --- a/packages/react-async-states/src/__tests__/other/read-source.test.ts +++ b/packages/react-async-states/src/__tests__/other/read-source.test.ts @@ -1,5 +1,5 @@ import { - readInstanceFromSource + readSource } from "../../async-state/AsyncState"; import {createSource} from "../../async-state"; @@ -9,7 +9,7 @@ describe('readSource', () => { const source = createSource("test", null, {initialValue: 0}); // when - const asyncState = readInstanceFromSource(source); + const asyncState = readSource(source); // then expect(asyncState.state.data).toEqual(0); @@ -20,7 +20,7 @@ describe('readSource', () => { // then // @ts-ignore - expect(() => readInstanceFromSource(source)) + expect(() => readSource(source)) .toThrow("You ve passed an incompatible source object. Please make sure to pass the received source object."); }); }); diff --git a/packages/react-async-states/src/__tests__/v2/get-flags.ts b/packages/react-async-states/src/__tests__/v2/get-flags.ts new file mode 100644 index 00000000..0e9e7cbe --- /dev/null +++ b/packages/react-async-states/src/__tests__/v2/get-flags.ts @@ -0,0 +1,264 @@ +import {getFlagsFromConfig} from "../../react/v2"; +import { + AUTO_RUN, CONFIG_FUNCTION, CONFIG_OBJECT, CONFIG_SOURCE, + CONFIG_STRING, FORK, HOIST, INSIDE_PROVIDER, LANE, SOURCE, + STANDALONE, WAIT +} from "../../react/StateHookFlags"; +import {AsyncStateManager, createSource} from "../../async-state"; + +describe('getFlagsFromConfig', () => { + describe('get flags from config outside provider', () => { + it('should correctly infer configuration from key: -- string --', () => { + expect(getFlagsFromConfig("key", null)) + .toEqual(CONFIG_STRING | STANDALONE); + + expect(getFlagsFromConfig("key", null, { + lazy: false, + hoistToProvider: true + })) + .toEqual(CONFIG_STRING | STANDALONE | AUTO_RUN | HOIST); + + expect(getFlagsFromConfig("key", null, {fork: true})) + .toEqual(CONFIG_STRING | STANDALONE | FORK); + + expect(getFlagsFromConfig("key", null, {lane: "lane"})) + .toEqual(CONFIG_STRING | STANDALONE | LANE); + }); + it('should correctly infer configuration from key: -- object with key --', () => { + let key = "key" + + expect(getFlagsFromConfig({key}, null)) + .toEqual(CONFIG_OBJECT | STANDALONE); + + expect(getFlagsFromConfig({key, lazy: false, hoistToProvider: true}, null)) + .toEqual(CONFIG_OBJECT | STANDALONE | AUTO_RUN | HOIST); + + expect(getFlagsFromConfig({key}, null, {fork: true})) + .toEqual(CONFIG_OBJECT | STANDALONE | FORK); + + expect(getFlagsFromConfig({key, lane: "lane"}, null)) + .toEqual(CONFIG_OBJECT | STANDALONE | LANE); + + expect(getFlagsFromConfig({key, producer: () => 5}, null, {lazy: false})) + .toEqual(CONFIG_OBJECT | STANDALONE | AUTO_RUN); + }); + it('should correctly infer configuration from source: -- source --', () => { + let source = createSource("tmp"); + + expect(getFlagsFromConfig(source, null)) + .toEqual(CONFIG_SOURCE | SOURCE); + + expect(getFlagsFromConfig(source, null, {lazy: false})) + .toEqual(CONFIG_SOURCE | SOURCE | AUTO_RUN); + + expect(getFlagsFromConfig(source, null, {fork: true})) + .toEqual(CONFIG_SOURCE | SOURCE | FORK); + + expect(getFlagsFromConfig(source, null, {lane: "lane"})) + .toEqual(CONFIG_SOURCE | SOURCE | LANE); + + expect(getFlagsFromConfig(source, null, {producer: () => 5, lazy: false})) + .toEqual(CONFIG_SOURCE | SOURCE | AUTO_RUN); + }); + it('should correctly infer configuration from source: -- object with source --', () => { + let source = createSource("tmp"); + + expect(getFlagsFromConfig({source}, null)) + .toEqual(CONFIG_OBJECT | SOURCE); + + expect(getFlagsFromConfig({source}, null, {lazy: false})) + .toEqual(CONFIG_OBJECT | SOURCE | AUTO_RUN); + + expect(getFlagsFromConfig({source}, null, {fork: true})) + .toEqual(CONFIG_OBJECT | SOURCE | FORK); + + expect(getFlagsFromConfig({source}, null, {lane: "lane"})) + .toEqual(CONFIG_OBJECT | SOURCE | LANE); + + expect(getFlagsFromConfig({source, producer: () => 5, lazy: false}, null)) + .toEqual(CONFIG_OBJECT | SOURCE | AUTO_RUN); + }); + it('should correctly infer configuration from producer: -- producer --', () => { + let producer = () => 5; + + expect(getFlagsFromConfig(producer, null)) + .toEqual(CONFIG_FUNCTION | STANDALONE); + + expect(getFlagsFromConfig(producer, null, {lazy: false})) + .toEqual(CONFIG_FUNCTION | STANDALONE | AUTO_RUN); + + expect(getFlagsFromConfig(producer, null, {fork: true})) + .toEqual(CONFIG_FUNCTION | STANDALONE | FORK); + + expect(getFlagsFromConfig(producer, null, {lane: "lane"})) + .toEqual(CONFIG_FUNCTION | STANDALONE | LANE); + }); + it('should correctly infer configuration from producer: -- object with producer --', () => { + let producer = () => 5; + + expect(getFlagsFromConfig({producer}, null)) + .toEqual(CONFIG_OBJECT | STANDALONE); + + expect(getFlagsFromConfig({producer}, null, {lazy: false})) + .toEqual(CONFIG_OBJECT | STANDALONE | AUTO_RUN); + + expect(getFlagsFromConfig({producer}, null, {fork: true})) + .toEqual(CONFIG_OBJECT | STANDALONE | FORK); + + expect(getFlagsFromConfig({producer}, null, {lane: "lane"})) + .toEqual(CONFIG_OBJECT | STANDALONE | LANE); + }); + it('should correctly infer configuration from object: -- remaining cases --', () => { + + expect(getFlagsFromConfig({ + key: "test", + payload: {}, + lazy: false, + producer: () => 5, + }, null)) + .toEqual(CONFIG_OBJECT | AUTO_RUN | STANDALONE); + + }); + }); + + describe('get flags from config inside provider', () => { + it('should correctly infer configuration from key: -- string --', () => { + let manager = AsyncStateManager({key: {key: "key"}}); + + expect(getFlagsFromConfig("key", manager)) + .toEqual(CONFIG_STRING | INSIDE_PROVIDER); + + expect(getFlagsFromConfig("not-existing", manager)) + .toEqual(CONFIG_STRING | INSIDE_PROVIDER | WAIT); + + expect(getFlagsFromConfig("key", manager, { + lazy: false, + hoistToProvider: true + })) + .toEqual(CONFIG_STRING | INSIDE_PROVIDER | HOIST | AUTO_RUN); + + expect(getFlagsFromConfig("key", manager, {fork: true})) + .toEqual(CONFIG_STRING | INSIDE_PROVIDER | FORK); + + expect(getFlagsFromConfig("key", manager, {lane: "lane"})) + .toEqual(CONFIG_STRING | INSIDE_PROVIDER | LANE); + }); + it('should correctly infer configuration from key: -- object with key --', () => { + let key = "key"; + let manager = AsyncStateManager({key: {key}}); + + expect(getFlagsFromConfig({key}, manager)) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER); + expect(getFlagsFromConfig({key: "not-existing", lazy: false}, manager)) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | WAIT | AUTO_RUN); + + expect(getFlagsFromConfig({key, lazy: false, hoistToProvider: true}, manager)) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | AUTO_RUN | HOIST); + + expect(getFlagsFromConfig({key}, manager, {fork: true})) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | FORK); + + expect(getFlagsFromConfig({key, lane: "lane"}, manager)) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | LANE); + + expect(getFlagsFromConfig({key, producer: () => 5}, manager, {lazy: false})) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | AUTO_RUN); + }); + it('should correctly infer configuration from source: -- source --', () => { + let source = createSource("tmp"); + let manager = AsyncStateManager({key: source}); + + expect(getFlagsFromConfig(source, manager)) + .toEqual(CONFIG_SOURCE | INSIDE_PROVIDER | SOURCE); + + expect(getFlagsFromConfig(source, manager, {lazy: false})) + .toEqual(CONFIG_SOURCE | INSIDE_PROVIDER | SOURCE | AUTO_RUN); + + expect(getFlagsFromConfig(source, manager, {fork: true})) + .toEqual(CONFIG_SOURCE | INSIDE_PROVIDER | SOURCE | FORK); + + expect(getFlagsFromConfig(source, manager, {lane: "lane"})) + .toEqual(CONFIG_SOURCE | INSIDE_PROVIDER | SOURCE | LANE); + + expect(getFlagsFromConfig(source, manager, {producer: () => 5, lazy: false})) + .toEqual(CONFIG_SOURCE | INSIDE_PROVIDER | SOURCE | AUTO_RUN); + }); + it('should correctly infer configuration from source: -- object with source --', () => { + let source = createSource("tmp"); + let manager = AsyncStateManager({key: source}); + + expect(getFlagsFromConfig({source}, manager)) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | SOURCE); + + expect(getFlagsFromConfig({source}, manager, {lazy: false})) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | SOURCE | AUTO_RUN); + + expect(getFlagsFromConfig({source}, manager, {fork: true})) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | SOURCE | FORK); + + expect(getFlagsFromConfig({source}, manager, {lane: "lane"})) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | SOURCE | LANE); + + expect(getFlagsFromConfig({source, producer: () => 5, lazy: false}, manager)) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | SOURCE | AUTO_RUN); + }); + it('should correctly infer configuration from producer: -- producer --', () => { + let producer = () => 5; + let manager = AsyncStateManager({key: {key: "key", producer}}); + + expect(getFlagsFromConfig(producer, manager)) + .toEqual(CONFIG_FUNCTION | INSIDE_PROVIDER | STANDALONE); + + expect(getFlagsFromConfig(producer, manager, {lazy: false})) + .toEqual(CONFIG_FUNCTION | INSIDE_PROVIDER | STANDALONE | AUTO_RUN); + + expect(getFlagsFromConfig(producer, manager, {fork: true})) + .toEqual(CONFIG_FUNCTION | INSIDE_PROVIDER | STANDALONE | FORK); + + expect(getFlagsFromConfig(producer, manager, {lane: "lane"})) + .toEqual(CONFIG_FUNCTION | INSIDE_PROVIDER | STANDALONE | LANE); + }); + it('should correctly infer configuration from producer: -- object with producer --', () => { + let producer = () => 5; + let manager = AsyncStateManager({key: {key: "key", producer}}); + + expect(getFlagsFromConfig({producer}, manager)) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | STANDALONE); + + expect(getFlagsFromConfig({producer}, manager, {lazy: false})) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | STANDALONE | AUTO_RUN); + + expect(getFlagsFromConfig({producer}, manager, {fork: true})) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | STANDALONE | FORK); + + expect(getFlagsFromConfig({producer}, manager, {lane: "lane"})) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | STANDALONE | LANE); + + // listen to the existing! + expect(getFlagsFromConfig({key: "key", producer, hoistToProvider: true}, manager)) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | HOIST); + }); + it('should correctly infer configuration from object: -- remaining cases --', () => { + + let manager = AsyncStateManager({key: {key: "key"}}); + + expect(getFlagsFromConfig({ + key: "test", + payload: {}, + lazy: false, + producer: () => 5, + }, manager)) + .toEqual(CONFIG_OBJECT | AUTO_RUN | INSIDE_PROVIDER | WAIT); + + expect(getFlagsFromConfig({ + key: "key", + payload: {}, + lazy: false, + producer: () => 5, + }, manager)) + .toEqual(CONFIG_OBJECT | AUTO_RUN | INSIDE_PROVIDER); + + }); + }); + +}); diff --git a/packages/react-async-states/src/async-state/AsyncState.ts b/packages/react-async-states/src/async-state/AsyncState.ts index 3d8ca378..013642a0 100644 --- a/packages/react-async-states/src/async-state/AsyncState.ts +++ b/packages/react-async-states/src/async-state/AsyncState.ts @@ -3,7 +3,7 @@ import { asyncStatesKey, didNotExpire, hash, - isAsyncStateSource, + isSource, sourceIsSourceSymbol, } from "./utils"; import devtools from "../devtools/Devtools"; @@ -687,7 +687,7 @@ function nextUniqueId() { return ++uniqueId; } -function readInstanceFromSource(possiblySource: Source): StateInterface { +function readSource(possiblySource: Source): StateInterface { try { const candidate = possiblySource.constructor(asyncStatesKey); if (!(candidate instanceof AsyncState)) { @@ -912,8 +912,8 @@ export function standaloneProducerRunEffectFunction( config: ProducerRunConfig | null, ...args: any[] ) { - if (isAsyncStateSource(input)) { - let instance = readInstanceFromSource(input as Source) + if (isSource(input)) { + let instance = readSource(input as Source) .getLane(config?.lane); return instance.run(standaloneProducerEffectsCreator, ...args); @@ -935,8 +935,8 @@ export function standaloneProducerRunpEffectFunction( ...args: any[] ) { - if (isAsyncStateSource(input)) { - let instance = readInstanceFromSource(input as Source).getLane(config?.lane); + if (isSource(input)) { + let instance = readSource(input as Source).getLane(config?.lane); return runWhileSubscribingToNextResolve(instance, props, args); } else if (typeof input === "function") { @@ -979,7 +979,7 @@ export function standaloneProducerSelectEffectFunction( input: ProducerRunInput, lane?: string, ) { - if (isAsyncStateSource(input)) { + if (isSource(input)) { return (input as Source).getLaneSource(lane).getState() } } @@ -1214,7 +1214,7 @@ function stepAsyncAndContinueStartedGenerator( //region Exports export default AsyncState; export { - readInstanceFromSource, + readSource, standaloneProducerEffectsCreator, }; //endregion diff --git a/packages/react-async-states/src/async-state/AsyncStateManager.ts b/packages/react-async-states/src/async-state/AsyncStateManager.ts index 2964be9a..77be41c5 100644 --- a/packages/react-async-states/src/async-state/AsyncStateManager.ts +++ b/packages/react-async-states/src/async-state/AsyncStateManager.ts @@ -11,14 +11,14 @@ import AsyncState, { Source, State, StateInterface, - readInstanceFromSource, + readSource, runWhileSubscribingToNextResolve, standaloneProducerRunEffectFunction, standaloneProducerRunpEffectFunction, standaloneProducerSelectEffectFunction } from "./AsyncState"; -import {isAsyncStateSource,} from "./utils"; +import {isSource,} from "./utils"; const listenersKey = Symbol(); @@ -281,10 +281,10 @@ function createInitialAsyncStatesReducer( result: AsyncStateEntries, current: ExtendedInitialAsyncState ): AsyncStateEntries { - if (isAsyncStateSource(current)) { + if (isSource(current)) { const key = current.key; const existingEntry = result[key]; - const asyncState = readInstanceFromSource( + const asyncState = readSource( current as Source); if (!existingEntry || asyncState !== existingEntry.instance) { diff --git a/packages/react-async-states/src/async-state/utils.ts b/packages/react-async-states/src/async-state/utils.ts index 5af7198f..9ce82ed1 100644 --- a/packages/react-async-states/src/async-state/utils.ts +++ b/packages/react-async-states/src/async-state/utils.ts @@ -23,7 +23,7 @@ export function didNotExpire(cachedState: CachedState) { export const sourceIsSourceSymbol: symbol = Symbol(); -export function isAsyncStateSource(possiblySource: any) { +export function isSource(possiblySource: any) { return possiblySource && possiblySource[sourceIsSourceSymbol] === true; } diff --git a/packages/react-async-states/src/react/StateHookFlags.ts b/packages/react-async-states/src/react/StateHookFlags.ts new file mode 100644 index 00000000..1db62a63 --- /dev/null +++ b/packages/react-async-states/src/react/StateHookFlags.ts @@ -0,0 +1,19 @@ +export const NO_MODE = 0b00000_00000_00000_00000; + +export const CONFIG_STRING = 0b00000_00000_00000_00001; +export const CONFIG_FUNCTION = 0b00000_00000_00000_00010; +export const CONFIG_SOURCE = 0b00000_00000_00000_00100; +export const CONFIG_OBJECT = 0b00000_00000_00000_01000; + +export const STANDALONE = 0b00000_00000_00001_00000; +export const SOURCE = 0b00000_00000_00010_00000; +export const FORK = 0b00000_00000_00100_00000; +export const HOIST = 0b00000_00000_01000_00000; + +export const INSIDE_PROVIDER = 0b00000_00001_00000_00000; +export const AUTO_RUN = 0b00000_00010_00000_00000; +export const WAIT = 0b00000_00100_00000_00000; +export const LANE = 0b00000_01000_00000_00000; + +export const CHANGE_EVENTS = 0b00001_00000_00000_00000; +export const SUBSCRIBE_EVENTS = 0b00010_00000_00000_00000; diff --git a/packages/react-async-states/src/react/loader-producer.ts b/packages/react-async-states/src/react/loader-producer.ts index ca101263..811e7137 100644 --- a/packages/react-async-states/src/react/loader-producer.ts +++ b/packages/react-async-states/src/react/loader-producer.ts @@ -6,14 +6,14 @@ import { import { makeUseAsyncStateReturnValue, } from "./useAsyncStateBase"; -import {readInstanceFromSource} from "../async-state/AsyncState"; +import {readSource} from "../async-state/AsyncState"; import {SubscriptionMode, UseAsyncState} from "../types.internal"; export function createLoaderProducer( producer: Loader, loaderKey?: string, config?: ProducerConfig): LoaderProducer { const source = createSource(`loader-${loaderKey}`, undefined, config) as Source; - let instance = readInstanceFromSource(source); + let instance = readSource(source); function wrapperProducer(props: ProducerProps) { diff --git a/packages/react-async-states/src/react/useAsyncStateBase.ts b/packages/react-async-states/src/react/useAsyncStateBase.ts index e8e968fd..d0abe15e 100644 --- a/packages/react-async-states/src/react/useAsyncStateBase.ts +++ b/packages/react-async-states/src/react/useAsyncStateBase.ts @@ -32,9 +32,9 @@ import { warnInDevAboutIrrelevantUseAsyncStateConfiguration } from "./helpers/configuration-warn"; import {supportsConcurrentMode} from "./helpers/supports-concurrent-mode"; -import {isAsyncStateSource} from "../async-state/utils"; +import {isSource} from "../async-state/utils"; import { - readInstanceFromSource, + readSource, standaloneProducerEffectsCreator } from "../async-state/AsyncState"; import useInDevSubscriptionKey from "./helpers/useCallerName"; @@ -208,7 +208,7 @@ export function useSourceLane( ): UseAsyncState> { let subscriptionKey; const contextValue = React.useContext(AsyncStateContext); - const asyncState = readInstanceFromSource(source).getLane(lane); + const asyncState = readSource(source).getLane(lane); const latestVersion = React.useRef(asyncState.version); // declare a state snapshot initialized by the initial selected value @@ -389,7 +389,7 @@ function readUserConfiguration( ); } // subscription via source directly as configuration - if (isAsyncStateSource(userConfig)) { + if (isSource(userConfig)) { return Object.assign( {}, defaultUseASConfig, @@ -399,7 +399,7 @@ function readUserConfiguration( } // subscription via source using object configuration if ( - isAsyncStateSource((userConfig as UseAsyncStateConfiguration)?.source) + isSource((userConfig as UseAsyncStateConfiguration)?.source) ) { return Object.assign( {}, @@ -584,10 +584,10 @@ function inferStateInstance( configuration, ); case SubscriptionMode.SRC: - return readInstanceFromSource( + return readSource( configuration.source as Source); case SubscriptionMode.SRC_FORK: { - const sourceAsyncState = readInstanceFromSource( + const sourceAsyncState = readSource( configuration.source as Source); return sourceAsyncState.fork(configuration.forkConfig); } diff --git a/packages/react-async-states/src/react/useRun.ts b/packages/react-async-states/src/react/useRun.ts index 0e542585..f69dff70 100644 --- a/packages/react-async-states/src/react/useRun.ts +++ b/packages/react-async-states/src/react/useRun.ts @@ -1,7 +1,7 @@ import * as React from "react"; import {AbortFn, AsyncStateKeyOrSource, Source} from "../async-state"; import {AsyncStateContext} from "./context"; -import {isAsyncStateSource} from "../async-state/utils"; +import {isSource} from "../async-state/utils"; import {StateContextValue} from "../types.internal"; type RunFunction = ((keyOrSource: AsyncStateKeyOrSource, ...args: any[]) => AbortFn); @@ -13,7 +13,7 @@ function runLaneFn( lane: string | undefined, ...args: any[] ) { - if (isAsyncStateSource(keyOrSource)) { + if (isSource(keyOrSource)) { return (keyOrSource as Source).getLaneSource(lane).run(...args); } if (contextValue !== null) { diff --git a/packages/react-async-states/src/react/useSelector.ts b/packages/react-async-states/src/react/useSelector.ts index cf152d37..4c564da4 100644 --- a/packages/react-async-states/src/react/useSelector.ts +++ b/packages/react-async-states/src/react/useSelector.ts @@ -7,7 +7,7 @@ import { StateContextValue, UseSelectorFunctionKeys, } from "../types.internal"; -import {isAsyncStateSource} from "../async-state/utils"; +import {isSource} from "../async-state/utils"; import AsyncState, { ManagerWatchCallbackValue, Source, @@ -17,7 +17,7 @@ import AsyncState, { FunctionSelectorItem, SimpleSelector } from "../async-state"; -import {readInstanceFromSource} from "../async-state/AsyncState"; +import {readSource} from "../async-state/AsyncState"; import {useCallerName} from "./helpers/useCallerName"; import {__DEV__, shallowEqual} from "../shared"; @@ -211,8 +211,8 @@ function computeInstancesMap( ): Record | undefined> { return fromKeys .reduce((result, current) => { - if (isAsyncStateSource(current)) { - const asyncState = readInstanceFromSource(current as Source); + if (isSource(current)) { + const asyncState = readSource(current as Source); result[asyncState.key] = asyncState; } else if (contextValue !== null) { result[current as string] = contextValue.get(current as string); diff --git a/packages/react-async-states/src/react/v2.ts b/packages/react-async-states/src/react/v2.ts new file mode 100644 index 00000000..ad3c2349 --- /dev/null +++ b/packages/react-async-states/src/react/v2.ts @@ -0,0 +1,286 @@ +import * as React from "react"; +import {Source, State, StateInterface} from "../async-state"; +import { + BaseConfig, + MixedConfig, + PartialUseAsyncStateConfiguration, + StateContextValue, + UseAsyncState +} from "../types.internal"; +import {AsyncStateContext} from "./context"; +import {isSource} from "../async-state/utils"; +import {readSource} from "../async-state/AsyncState"; +import { + AUTO_RUN, + CHANGE_EVENTS, + CONFIG_FUNCTION, CONFIG_OBJECT, CONFIG_SOURCE, CONFIG_STRING, FORK, HOIST, + INSIDE_PROVIDER, LANE, + NO_MODE, SOURCE, + STANDALONE, SUBSCRIBE_EVENTS, WAIT +} from "./StateHookFlags"; + + +export const useAsyncStateBase = function useAsyncStateImpl>( + mixedConfig: MixedConfig, + deps: any[] = [], + overrides?: PartialUseAsyncStateConfiguration, +): UseAsyncState { + + const [guard, setGuard] = React.useState(0); + const contextValue = React.useContext(AsyncStateContext); + + const hook: StateHook = useCurrentHook(); + + React.useMemo( + () => hook.update(mixedConfig, contextValue, overrides), + [contextValue, guard, ...deps] + ); + + React.useEffect( + () => { + let {flags, instance} = hook; + + if (flags & WAIT) { + let key: string = flags & CONFIG_STRING + ? (mixedConfig as string) : (mixedConfig as BaseConfig).key!; + + return contextValue!.watch(key, (maybeInstance) => { + if (maybeInstance !== instance) { + setGuard(old => old + 1); + } + }); + } + + if (flags & HOIST) { + contextValue!.hoist + } + + }, + [contextValue, hook.flags, hook.instance, ...deps] + ); + + +} + +class StateHookImpl implements StateHook { + flags: number; + config: MixedConfig; + instance: StateInterface | null; + + constructor() { + this.flags = NO_MODE; + } + + update( + newConfig: MixedConfig, + contextValue: StateContextValue | null, + overrides?: PartialUseAsyncStateConfiguration + ) { + let prevFlags = this.flags; + let nextFlags = getFlagsFromConfig(newConfig, contextValue, overrides); + let instance = resolveInstance(nextFlags, newConfig, contextValue, this); + + ensureInstanceResolveMatchesFlags(instance, nextFlags, contextValue); + + this.config = newConfig; + this.instance = instance; + } + +} +function resolveInstance( + flags: number, + config: MixedConfig, + contextValue: StateContextValue | null, + previousHook: StateHook +): StateInterface | null { + + if (flags & WAIT) { + return null; + } + + if (flags & SOURCE) { + if (flags & CONFIG_SOURCE) { + let instance = readSource(config as Source); + if (flags & FORK) { + instance = instance.fork(); + } + return instance; + } + + let givenConfig = config as BaseConfig; + let instance = readSource(givenConfig.source!); + if (flags & FORK) { + instance = instance.fork(givenConfig.forkConfig); + } + if (flags & LANE) { + return instance.getLane(givenConfig.lane!) + } + return instance; + } + + if (flags & STANDALONE) { + let canReuse = canReuseInstance(flags, config, previousHook); + if (canReuse) { + patchInstance(previousHook.instance, flags, config); + return previousHook.instance; + } + return constructNewInstance(flags, config); + } + + if (flags & INSIDE_PROVIDER) { + let key: string = flags & CONFIG_STRING + ? (config as string) : (config as BaseConfig).key!; + + let instance = contextValue!.get(key); + + if (flags & FORK) { + instance = instance.fork((config as BaseConfig).forkConfig); + } + if (flags & LANE) { + return instance.getLane((config as BaseConfig).lane!) + } + + return instance; + } + + return null; +} + +interface StateHook { + flags: number, + config: MixedConfig, + + instance: StateInterface | null, + + update( + newConfig: MixedConfig, + contextValue: StateContextValue | null, + overrides?: PartialUseAsyncStateConfiguration + ), +} + +function createStateHook(): StateHook { + return new StateHookImpl(); +} + +function useCurrentHook(): StateHook { + const ref = React.useRef>(null); + if (!ref) { + // don't know what about ts in the following line ! + (ref as React.MutableRefObject>).current = createStateHook(); + } + return ref.current!; +} + + +// +// function getMixedConfigTopLevelFlags(mixedConfig: MixedConfig): number { +// let flags = NO_MODE; +// +// if (typeof mixedConfig === "string") { +// flags |= LISTEN; +// } +// if (typeof mixedConfig === "function") { +// flags = flags | LISTEN | STANDALONE; +// } +// if (isAsyncStateSource(mixedConfig)) { +// flags = flags | LISTEN | SOURCE; +// } +// +// return flags; +// } +export function getFlagsFromConfig( + mixedConfig: MixedConfig, + contextValue: StateContextValue | null, + overrides?: PartialUseAsyncStateConfiguration, +): number { + let flags = NO_MODE; + + if (contextValue !== null) { + flags |= INSIDE_PROVIDER; + } + switch (typeof mixedConfig) { + case "function": { + flags |= STANDALONE | CONFIG_FUNCTION; + break; + } + case "string": { + flags |= CONFIG_STRING; + if (flags & INSIDE_PROVIDER) { + if (!contextValue!.get(mixedConfig)) { + flags |= WAIT; + } + } else { + flags |= STANDALONE; + } + break; + } + case "object": { + // attempt source first + if (isSource(mixedConfig)) { + flags |= SOURCE | CONFIG_SOURCE; + } else if (isSource((mixedConfig as BaseConfig).source)) { + flags |= getBaseConfigFlags(mixedConfig) | SOURCE | CONFIG_OBJECT; + } else { + // object and not a source + // bind other possible flags such as fork, hoist.. + flags |= CONFIG_OBJECT | getBaseConfigFlags(mixedConfig); + if (flags & INSIDE_PROVIDER) { + if ((mixedConfig as BaseConfig).key) { + if (!contextValue!.get((mixedConfig as BaseConfig).key!)) { + flags |= WAIT; + } + } else { + flags |= STANDALONE; + } + } else { + flags |= STANDALONE; + } + } + break; + } + default: + break; + } + // bind other possible flags such as fork, hoist.. + if (overrides) { + flags |= getBaseConfigFlags(overrides); + } + + return flags; +} + +function getBaseConfigFlags( + config?: BaseConfig +): number { + if (!config) { + return NO_MODE; + } + + let flags = NO_MODE; + + if (config.hoistToProvider) { + flags |= HOIST; + } + if (config.fork) { + flags |= FORK; + } + if (config.lane) { + flags |= LANE; + } + if (config.events) { + if (config.events.change) { + flags |= CHANGE_EVENTS; + } + if (config.events.subscribe) { + flags |= SUBSCRIBE_EVENTS; + } + } + + // default behavior is lazy=true; so only change if specified explicitly + if (config.lazy === false) { + flags |= AUTO_RUN; + } + + return flags; +} diff --git a/packages/react-async-states/src/types.internal.ts b/packages/react-async-states/src/types.internal.ts index f69e1f59..c81567ae 100644 --- a/packages/react-async-states/src/types.internal.ts +++ b/packages/react-async-states/src/types.internal.ts @@ -90,6 +90,7 @@ export type EqualityFn = ( export interface BaseConfig extends ProducerConfig{ key?: string, lane?: string, + source?: Source, autoRunArgs?: any[], subscriptionKey?: string, payload?: Record, From 49fe4dcfa2c8e5226cf8c65e5024bb30f8fcf0b4 Mon Sep 17 00:00:00 2001 From: Mohamed EL AYADI Date: Sat, 26 Nov 2022 12:25:44 +0100 Subject: [PATCH 02/13] resolve instance from flags --- .../v2/{get-flags.ts => get-flags.test.ts} | 5 +- .../src/__tests__/v2/resolve-instance.test.ts | 161 ++++++++++++++++++ .../src/async-state/AsyncState.ts | 4 +- packages/react-async-states/src/react/v2.ts | 128 +++++++++++--- .../react-async-states/src/types.internal.ts | 1 + 5 files changed, 268 insertions(+), 31 deletions(-) rename packages/react-async-states/src/__tests__/v2/{get-flags.ts => get-flags.test.ts} (97%) create mode 100644 packages/react-async-states/src/__tests__/v2/resolve-instance.test.ts diff --git a/packages/react-async-states/src/__tests__/v2/get-flags.ts b/packages/react-async-states/src/__tests__/v2/get-flags.test.ts similarity index 97% rename from packages/react-async-states/src/__tests__/v2/get-flags.ts rename to packages/react-async-states/src/__tests__/v2/get-flags.test.ts index 0e9e7cbe..7f5bebb3 100644 --- a/packages/react-async-states/src/__tests__/v2/get-flags.ts +++ b/packages/react-async-states/src/__tests__/v2/get-flags.test.ts @@ -235,8 +235,11 @@ describe('getFlagsFromConfig', () => { .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | STANDALONE | LANE); // listen to the existing! - expect(getFlagsFromConfig({key: "key", producer, hoistToProvider: true}, manager)) + expect(getFlagsFromConfig({key: "key", producer}, manager, {hoistToProvider: true})) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | HOIST); + + expect(getFlagsFromConfig({key: "key2", producer}, manager, {hoistToProvider: true})) + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | WAIT | HOIST); }); it('should correctly infer configuration from object: -- remaining cases --', () => { diff --git a/packages/react-async-states/src/__tests__/v2/resolve-instance.test.ts b/packages/react-async-states/src/__tests__/v2/resolve-instance.test.ts new file mode 100644 index 00000000..9d41f3f4 --- /dev/null +++ b/packages/react-async-states/src/__tests__/v2/resolve-instance.test.ts @@ -0,0 +1,161 @@ +import {createStateHook, resolveInstance, StateHook} from "../../react/v2"; +import { + CONFIG_OBJECT, + CONFIG_SOURCE, CONFIG_STRING, FORK, HOIST, + INSIDE_PROVIDER, LANE, + SOURCE, STANDALONE, + WAIT +} from "../../react/StateHookFlags"; +import AsyncState, {AsyncStateManager} from "../../async-state"; + +describe('resolveInstance', () => { + it('should resolve instance in WAIT mode', () => { + expect(resolveInstance(WAIT, "irrelevant", null, null)).toBe(null); + expect(resolveInstance(WAIT | INSIDE_PROVIDER, {}, null, null)).toBe(null); + }); + it('should resolve instance Sources', () => { + let instance = new AsyncState("key", null); + + expect(resolveInstance(CONFIG_SOURCE | SOURCE, instance._source, null, null)) + .toBe(instance); + + expect( + resolveInstance( + CONFIG_OBJECT | SOURCE | INSIDE_PROVIDER, + {source: instance._source}, + null, + null) + ).toBe(instance); + + expect( + resolveInstance( + CONFIG_OBJECT | SOURCE | INSIDE_PROVIDER | LANE, + {source: instance._source, lane: 'test'}, + null, + null) + ).toBe(instance.getLane('test')); + + expect( + resolveInstance( + CONFIG_OBJECT | SOURCE | INSIDE_PROVIDER | FORK, + {source: instance._source, fork: true}, + null, + null) + ).not.toBe(instance); + + expect( + resolveInstance( + CONFIG_SOURCE | SOURCE | INSIDE_PROVIDER | FORK, + instance._source, + null, + null) + ).not.toBe(instance); + }); + it('should resolve instance when inside provider', () => { + let instance = new AsyncState("key", null); + let manager = AsyncStateManager({ key: instance._source }); + + + expect( + resolveInstance( + CONFIG_OBJECT | INSIDE_PROVIDER | HOIST, + {key: "key", hoistToProviderConfig: {override: true}}, + manager, + null) + ).not.toBe(instance); + + expect( + resolveInstance( + CONFIG_STRING | INSIDE_PROVIDER | HOIST, + "key", + manager, + null) + ).toBe(instance); + + expect( + resolveInstance( + CONFIG_OBJECT | INSIDE_PROVIDER | HOIST, + {key: "key"}, + manager, + null) + ).toBe(instance); + + expect( + resolveInstance( + CONFIG_OBJECT | INSIDE_PROVIDER | HOIST | LANE, + {key: "key", lane: "test"}, + manager, + null) + ).toBe(instance.getLane("test")); + + expect( + resolveInstance( + CONFIG_OBJECT | INSIDE_PROVIDER | HOIST | FORK | LANE, + {key: "key", lane: "test"}, + manager, + null) + ).not.toBe(instance.getLane("test")); + + expect( + resolveInstance( + CONFIG_STRING | INSIDE_PROVIDER, + "key", + manager, + null) + ).toBe(instance); + }); + it('should resolve instance when standalone', () => { + let instance = new AsyncState("key", null); + let manager = AsyncStateManager({ key: instance._source }); + + expect( + resolveInstance( + CONFIG_OBJECT | INSIDE_PROVIDER | STANDALONE, + {initialValue: 5}, + manager, + null).config.initialValue + ).toBe(5); + + + expect( + resolveInstance( + STANDALONE, + undefined, + null, + null).key.startsWith("async-state-") + ).toBe(true); + + let hook: StateHook = createStateHook(); + + hook.flags = CONFIG_STRING | STANDALONE; + hook.instance = instance; + hook.config = "key"; + + + // reused instance with patches + let newInstance = resolveInstance( + CONFIG_OBJECT | STANDALONE, + {key: "key", initialValue: 15}, + null, + hook); + + expect(newInstance).toBe(instance); + expect(newInstance.config.initialValue).toBe(15); + expect(newInstance.originalProducer).toBe(undefined); + + // dont reuse becaue of flags + + hook.flags = CONFIG_STRING | WAIT; + hook.config = "key"; + + newInstance = resolveInstance( + CONFIG_OBJECT | STANDALONE, + {key: "key", initialValue: 15}, + null, + hook); + + expect(newInstance).not.toBe(instance); + expect(newInstance.config.initialValue).toBe(15); + expect(newInstance.originalProducer).toBe(undefined); + }); +}); diff --git a/packages/react-async-states/src/async-state/AsyncState.ts b/packages/react-async-states/src/async-state/AsyncState.ts index 013642a0..bee48516 100644 --- a/packages/react-async-states/src/async-state/AsyncState.ts +++ b/packages/react-async-states/src/async-state/AsyncState.ts @@ -109,7 +109,7 @@ class AsyncState implements StateInterface { return this.config; } - patchConfig(partialConfig: Partial>) { + patchConfig(partialConfig?: Partial>) { Object.assign(this.config, partialConfig); } @@ -1253,7 +1253,7 @@ export interface BaseSource { replaceCache(cacheKey: string, cache: CachedState): void, - patchConfig(partialConfig: Partial>), + patchConfig(partialConfig?: Partial>), getConfig(): ProducerConfig, } diff --git a/packages/react-async-states/src/react/v2.ts b/packages/react-async-states/src/react/v2.ts index ad3c2349..b7902967 100644 --- a/packages/react-async-states/src/react/v2.ts +++ b/packages/react-async-states/src/react/v2.ts @@ -1,5 +1,11 @@ import * as React from "react"; -import {Source, State, StateInterface} from "../async-state"; +import AsyncState, { + createSource, + Producer, + Source, + State, + StateInterface +} from "../async-state"; import { BaseConfig, MixedConfig, @@ -18,6 +24,7 @@ import { NO_MODE, SOURCE, STANDALONE, SUBSCRIBE_EVENTS, WAIT } from "./StateHookFlags"; +import {nextKey} from "../async-state/key-gen"; export const useAsyncStateBase = function useAsyncStateImpl>( @@ -56,7 +63,7 @@ export const useAsyncStateBase = function useAsyncStateImpl>( } }, - [contextValue, hook.flags, hook.instance, ...deps] + [contextValue, hook.flags, hook.instance] ); @@ -76,18 +83,84 @@ class StateHookImpl implements StateHook { contextValue: StateContextValue | null, overrides?: PartialUseAsyncStateConfiguration ) { - let prevFlags = this.flags; let nextFlags = getFlagsFromConfig(newConfig, contextValue, overrides); let instance = resolveInstance(nextFlags, newConfig, contextValue, this); - ensureInstanceResolveMatchesFlags(instance, nextFlags, contextValue); + if (!instance && !(nextFlags & WAIT)) { + throw new Error("Mode isn't wait and instance isn't defined! this is a bug"); + } + this.flags = nextFlags; this.config = newConfig; this.instance = instance; } } -function resolveInstance( + +/** + * this is called only when the new mode is standalone + * so it is good to make some assumptions: + * - if the previous flags weren't standalone, instance cannot be reused + */ +function canReuseInstance( + flags: number, + hook: StateHook +): boolean { + return !!hook.instance && !!(hook.flags & STANDALONE); +} + + +// come here only in standalone mode +function patchInstance( + instance: StateInterface, + flags: number, + config: MixedConfig +) { + let key = readKeyFromConfig(flags, config, instance); + let producer = readProducerFromConfig(flags, config); + let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; + + instance.key = key; + instance.replaceProducer(producer); + instance.patchConfig(producerConfig); +} + +function readProducerFromConfig( + flags: number, + config: MixedConfig, +): Producer | undefined { + if (flags & CONFIG_FUNCTION) { + return config as Producer; + } + + if (flags & CONFIG_OBJECT) { + return (config as BaseConfig).producer; + } + + return undefined; +} + +function readKeyFromConfig( + flags: number, + config: MixedConfig, + prevInstance: StateInterface | null +): string { + if (flags & CONFIG_STRING) { + return config as string; + } + + if (flags & CONFIG_OBJECT && (config as BaseConfig).key) { + return (config as BaseConfig).key!; + } + + if (!prevInstance) { + return nextKey(); + } + + return prevInstance.key; +} + +export function resolveInstance( flags: number, config: MixedConfig, contextValue: StateContextValue | null, @@ -119,20 +192,36 @@ function resolveInstance( } if (flags & STANDALONE) { - let canReuse = canReuseInstance(flags, config, previousHook); + let canReuse = !!previousHook?.instance && !!(previousHook.flags & STANDALONE); if (canReuse) { - patchInstance(previousHook.instance, flags, config); + patchInstance(previousHook.instance!, flags, config); return previousHook.instance; } - return constructNewInstance(flags, config); + + let key = readKeyFromConfig(flags, config, null); + let producer = readProducerFromConfig(flags, config); + let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; + + return new AsyncState(key, producer, producerConfig); } if (flags & INSIDE_PROVIDER) { let key: string = flags & CONFIG_STRING ? (config as string) : (config as BaseConfig).key!; - let instance = contextValue!.get(key); + if ( + flags & HOIST && + (config as BaseConfig).hoistToProviderConfig?.override) { + // do not check on existing because it is guaranteed to exist + // or else we would have a WAIT flag and quit earlier! + let key = readKeyFromConfig(flags, config, null); + let producer = readProducerFromConfig(flags, config); + let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; + return new AsyncState(key, producer, producerConfig); + } + + let instance = contextValue!.get(key); if (flags & FORK) { instance = instance.fork((config as BaseConfig).forkConfig); } @@ -146,7 +235,7 @@ function resolveInstance( return null; } -interface StateHook { +export interface StateHook { flags: number, config: MixedConfig, @@ -159,7 +248,7 @@ interface StateHook { ), } -function createStateHook(): StateHook { +export function createStateHook(): StateHook { return new StateHookImpl(); } @@ -172,23 +261,6 @@ function useCurrentHook(): StateHook { return ref.current!; } - -// -// function getMixedConfigTopLevelFlags(mixedConfig: MixedConfig): number { -// let flags = NO_MODE; -// -// if (typeof mixedConfig === "string") { -// flags |= LISTEN; -// } -// if (typeof mixedConfig === "function") { -// flags = flags | LISTEN | STANDALONE; -// } -// if (isAsyncStateSource(mixedConfig)) { -// flags = flags | LISTEN | SOURCE; -// } -// -// return flags; -// } export function getFlagsFromConfig( mixedConfig: MixedConfig, contextValue: StateContextValue | null, diff --git a/packages/react-async-states/src/types.internal.ts b/packages/react-async-states/src/types.internal.ts index c81567ae..9fc20db5 100644 --- a/packages/react-async-states/src/types.internal.ts +++ b/packages/react-async-states/src/types.internal.ts @@ -92,6 +92,7 @@ export interface BaseConfig extends ProducerConfig{ lane?: string, source?: Source, autoRunArgs?: any[], + producer?: Producer, subscriptionKey?: string, payload?: Record, events?: UseAsyncStateEvents, From aedc4f825ca01e7e00be8046349bb6ea77539648 Mon Sep 17 00:00:00 2001 From: Mohamed EL AYADI Date: Sat, 26 Nov 2022 17:20:49 +0100 Subject: [PATCH 03/13] first checkpoint of rewriting to bitwise operators --- .../src/DevtoolsView/CurrentStateDisplay.tsx | 2 +- .../src/DevtoolsView/sources.ts | 13 +- packages/docs/docs/api/4-use-async-state.md | 23 - .../Provider/provider.test.tsx | 26 +- .../StateBoundary/index.test.tsx | 18 +- .../useAsyncState/payload/index.test.tsx | 7 +- .../subscription/events/index.test.tsx | 1 - .../subscription/fork/index.test.tsx | 9 +- .../subscription/hoist/index.test.tsx | 15 +- .../subscription/listen/index.test.tsx | 11 +- .../subscription/standalone/index.test.tsx | 13 +- .../useProducer/index.test.tsx | 13 +- .../useSource/index.test.tsx | 7 +- .../src/__tests__/v2/get-flags.test.ts | 8 +- .../src/__tests__/v2/resolve-instance.test.ts | 2 +- packages/react-async-states/src/index.ts | 2 - .../src/react/StateHookFlags.ts | 2 + .../src/react/helpers/configuration-warn.ts | 65 - .../src/react/helpers/useCallerName.ts | 2 +- .../src/react/loader-producer.ts | 48 - .../src/react/useAsyncStateBase.ts | 1363 ++++++++--------- .../react-async-states/src/react/utils.ts | 13 + packages/react-async-states/src/react/v2.ts | 358 ----- .../react-async-states/src/types.internal.ts | 18 +- 24 files changed, 691 insertions(+), 1348 deletions(-) delete mode 100644 packages/react-async-states/src/react/helpers/configuration-warn.ts delete mode 100644 packages/react-async-states/src/react/loader-producer.ts create mode 100644 packages/react-async-states/src/react/utils.ts delete mode 100644 packages/react-async-states/src/react/v2.ts diff --git a/packages/devtools-extension/src/DevtoolsView/CurrentStateDisplay.tsx b/packages/devtools-extension/src/DevtoolsView/CurrentStateDisplay.tsx index d8b9f737..b047f1d8 100644 --- a/packages/devtools-extension/src/DevtoolsView/CurrentStateDisplay.tsx +++ b/packages/devtools-extension/src/DevtoolsView/CurrentStateDisplay.tsx @@ -132,7 +132,7 @@ export const SideKey = React.memo(function SiderKey({ ); }, [uniqueId, dev]); - const {state} = useSourceLane(journalSource, `${uniqueId}`); + const {state, devFlags, version, source} = useSourceLane(journalSource, `${uniqueId}`); const {status} = state.data?.state ?? {}; diff --git a/packages/devtools-extension/src/DevtoolsView/sources.ts b/packages/devtools-extension/src/DevtoolsView/sources.ts index 269b03bc..18ff6b17 100644 --- a/packages/devtools-extension/src/DevtoolsView/sources.ts +++ b/packages/devtools-extension/src/DevtoolsView/sources.ts @@ -68,6 +68,7 @@ function gatewayProducer(props) { port.postMessage(DevtoolsMessagesBuilder.getKeys(dev)); port.onMessage.addListener(message => { + console.log('received', message) if (message.source !== "async-states-agent") { return; } @@ -77,7 +78,8 @@ function gatewayProducer(props) { } case DevtoolsEvent.setAsyncState: { updatesMeter.setState(old => old.data + 1); - return journalSource.getLaneSource(`${message.uniqueId}`).setState(message.payload); + journalSource.getLaneSource(`${message.uniqueId}`).setState(message.payload); + return ; } case DevtoolsEvent.partialSync: { applyPartialUpdate(message); @@ -95,6 +97,7 @@ function gatewayProducer(props) { } function applyPartialUpdate(message) { + const {eventType} = message.payload; switch (eventType) { case DevtoolsJournalEvent.run: { @@ -124,8 +127,8 @@ function applyPartialUpdate(message) { let prevData = old.data ?? {}; return { ...prevData, - subscriptions: [...prevData.subscriptions, message.payload.eventPayload], - journal: [...prevData.journal, message.payload], + subscriptions: [...(prevData.subscriptions ?? []), message.payload.eventPayload], + journal: [...(prevData.journal ?? []), message.payload], } }); return; @@ -135,8 +138,8 @@ function applyPartialUpdate(message) { let prevData = old.data ?? {}; return { ...prevData, - subscriptions: prevData.subscriptions?.filter(t => t !== message.payload.eventPayload), - journal: [...prevData.journal, message.payload], + subscriptions: (prevData.subscriptions ?? [])?.filter(t => t !== message.payload.eventPayload), + journal: [...(prevData.journal ?? []), message.payload], } }); return; diff --git a/packages/docs/docs/api/4-use-async-state.md b/packages/docs/docs/api/4-use-async-state.md index 042e98c0..798f9439 100644 --- a/packages/docs/docs/api/4-use-async-state.md +++ b/packages/docs/docs/api/4-use-async-state.md @@ -860,29 +860,6 @@ const {source} = useAsyncState(); ### `uniqueId` This is only used in development mode and was originally added with the devtools. -### `mode` -This corresponds to `AsyncStateSubscriptionMode` - -Here is the full list: - -```typescript - -enum AsyncStateSubscriptionMode { - LISTEN = "LISTEN", - HOIST = "HOIST", - STANDALONE = "STANDALONE", - WAITING = "WAITING", - FORK = "FORK", - NOOP = "NOOP", - SOURCE = "SOURCE", - SOURCE_FORK = "SOURCE_FORK", - OUTSIDE_PROVIDER = "OUTSIDE_PROVIDER", -} - -``` - -Read more about it [here](/docs/faq/how-the-library-works#how-useasyncstate-subscription-mode-works-). - In general, you would never use this (unless you are a contributor and debugging things). ### `state` diff --git a/packages/react-async-states/src/__tests__/react-async-state/Provider/provider.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/Provider/provider.test.tsx index e296a152..789b4f85 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/Provider/provider.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/Provider/provider.test.tsx @@ -23,13 +23,13 @@ describe('dynamic provider states hoisting', () => { function Father() { const run = useRunLane(); - const {key, mode, state, uniqueId} = useAsyncState({ + const {key, devFlags, state} = useAsyncState({ key: "counter", initialValue: 0, hoistToProvider: true }); return ; } @@ -60,7 +60,7 @@ describe('dynamic provider states hoisting', () => { function SimpleSub({subKey, alias, subIndex}) { const { - mode, + devFlags, state, run } = useAsyncState({key: subKey}, [subKey]) as UseAsyncState; @@ -72,7 +72,7 @@ describe('dynamic provider states hoisting', () => { return (

) @@ -137,7 +137,7 @@ describe('dynamic provider states hoisting', () => { }); expect(screen.getByTestId("subscription-counter-1-global-0-button").innerHTML) - .toEqual("counter-1 - LISTEN - 9"); + .toEqual("counter-1 - [\"CONFIG_OBJECT\",\"INSIDE_PROVIDER\"] - 9"); act(() => { @@ -146,7 +146,7 @@ describe('dynamic provider states hoisting', () => { }); expect(screen.getByTestId("subscription-counter-1-dynamic-0-button").innerHTML) - .toEqual("counter-1 - LISTEN - 9"); + .toEqual("counter-1 - [\"CONFIG_OBJECT\",\"INSIDE_PROVIDER\"] - 9"); act(() => { // increment value @@ -155,9 +155,9 @@ describe('dynamic provider states hoisting', () => { expect(screen.getByTestId("subscription-counter-1-global-0-button").innerHTML) - .toEqual("counter-1 - LISTEN - 10"); + .toEqual("counter-1 - [\"CONFIG_OBJECT\",\"INSIDE_PROVIDER\"] - 10"); expect(screen.getByTestId("subscription-counter-1-dynamic-0-button").innerHTML) - .toEqual("counter-1 - LISTEN - 10"); + .toEqual("counter-1 - [\"CONFIG_OBJECT\",\"INSIDE_PROVIDER\"] - 10"); }); it('should add subscriber and wait for entries', async () => { // given @@ -185,7 +185,7 @@ describe('dynamic provider states hoisting', () => { expect(screen.getByTestId("subscription-counter-1-dynamic-0-button").innerHTML) - .toEqual("counter-1 - WAIT - "); + .toEqual("counter-1 - [\"CONFIG_OBJECT\",\"INSIDE_PROVIDER\",\"WAIT\"] - "); // then act(() => { @@ -194,14 +194,14 @@ describe('dynamic provider states hoisting', () => { }); expect(screen.getByTestId("subscription-counter-1-global-0-button").innerHTML) - .toEqual("counter-1 - LISTEN - 9"); + .toEqual("counter-1 - [\"CONFIG_OBJECT\",\"INSIDE_PROVIDER\"] - 9"); await act(async () => { await flushPromises(); }); expect(screen.getByTestId("subscription-counter-1-dynamic-0-button").innerHTML) - .toEqual("counter-1 - LISTEN - 9"); + .toEqual("counter-1 - [\"CONFIG_OBJECT\",\"INSIDE_PROVIDER\"] - 9"); act(() => { @@ -211,8 +211,8 @@ describe('dynamic provider states hoisting', () => { expect(screen.getByTestId("subscription-counter-1-global-0-button").innerHTML) - .toEqual("counter-1 - LISTEN - 10"); + .toEqual("counter-1 - [\"CONFIG_OBJECT\",\"INSIDE_PROVIDER\"] - 10"); expect(screen.getByTestId("subscription-counter-1-dynamic-0-button").innerHTML) - .toEqual("counter-1 - LISTEN - 10"); + .toEqual("counter-1 - [\"CONFIG_OBJECT\",\"INSIDE_PROVIDER\"] - 10"); }); }); diff --git a/packages/react-async-states/src/__tests__/react-async-state/StateBoundary/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/StateBoundary/index.test.tsx index 509a6cf2..fd217e79 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/StateBoundary/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/StateBoundary/index.test.tsx @@ -8,7 +8,7 @@ import { AsyncStateStatus, createSource } from "../../../async-state"; -import {RenderStrategy, SubscriptionMode} from "../../../types.internal"; +import {RenderStrategy} from "../../../types.internal"; import {flushPromises} from "../utils/test-utils"; describe('StateBoundary', () => { @@ -19,10 +19,10 @@ describe('StateBoundary', () => { // when function Component() { - const {mode, state} = useCurrentState(); + const {devFlags, state} = useCurrentState(); return (
- {mode} + {JSON.stringify(devFlags)} {state.status}
); @@ -39,7 +39,7 @@ describe('StateBoundary', () => { // then expect(screen.getByTestId("current-mode").innerHTML) - .toEqual(SubscriptionMode.SRC); + .toEqual("[\"AUTO_RUN\",\"CONFIG_SOURCE\",\"SOURCE\"]"); expect(screen.getByTestId("current-status").innerHTML) .toEqual(AsyncStateStatus.pending); @@ -57,10 +57,10 @@ describe('StateBoundary', () => { // when function Component() { - const {mode, state} = useCurrentState(); + const {devFlags, state} = useCurrentState(); return (
- {mode} + {JSON.stringify(devFlags)} {state.status}
); @@ -86,7 +86,7 @@ describe('StateBoundary', () => { }); expect(screen.getByTestId("current-mode")?.innerHTML) - .toEqual(SubscriptionMode.SRC); + .toEqual("[\"CONFIG_SOURCE\",\"SOURCE\"]"); expect(screen.getByTestId("current-status").innerHTML) .toEqual(AsyncStateStatus.success); }); @@ -97,10 +97,10 @@ describe('StateBoundary', () => { // when function Component() { - const {mode, state} = useCurrentState(); + const {devFlags, state} = useCurrentState(); return (
- {mode} + {JSON.stringify(devFlags)} {state.status}
); diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/payload/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/payload/index.test.tsx index a71e9fee..6e5d74dd 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/payload/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/payload/index.test.tsx @@ -1,7 +1,6 @@ import * as React from "react"; import {fireEvent, render, screen} from "@testing-library/react"; import { - SubscriptionMode, UseAsyncState } from "../../../../types.internal"; import {useAsyncState} from "../../../../react/useAsyncState"; @@ -19,7 +18,7 @@ describe('should add static payload to async state', () => { function Component() { const { run, - mode, + devFlags, state, }: UseAsyncState = useAsyncState({ initialValue: 0, @@ -36,7 +35,7 @@ describe('should add static payload to async state', () => { return (
- {mode} + {JSON.stringify(devFlags)} {state.data}
); } @@ -52,7 +51,7 @@ describe('should add static payload to async state', () => { const incrementBtn = screen.getByTestId("increment"); // then expect(screen.getByTestId("mode").innerHTML) - .toEqual(SubscriptionMode.OUTSIDE); + .toEqual("[\"CONFIG_OBJECT\",\"STANDALONE\"]"); // +1 fireEvent.click(incrementBtn); diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/events/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/events/index.test.tsx index 26520cfa..974db8b9 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/events/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/events/index.test.tsx @@ -1,7 +1,6 @@ import * as React from "react"; import {act, fireEvent, render, screen} from "@testing-library/react"; import { - SubscriptionMode, UseAsyncState } from "../../../../../types.internal"; import {useAsyncState} from "../../../../../react/useAsyncState"; diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/fork/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/fork/index.test.tsx index 72615fdc..434ca2fd 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/fork/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/fork/index.test.tsx @@ -1,7 +1,6 @@ import * as React from "react"; import {act, fireEvent, render, screen} from "@testing-library/react"; import { - SubscriptionMode, UseAsyncState } from "../../../../../types.internal"; import {useAsyncState} from "../../../../../react/useAsyncState"; @@ -30,7 +29,7 @@ describe('should fork an initially hoisted async state', () => { const { key, run, - mode, + devFlags, state, }: UseAsyncState = useAsyncState({ fork, @@ -43,7 +42,7 @@ describe('should fork an initially hoisted async state', () => { - {mode} + {JSON.stringify(devFlags)} {state.data} ); @@ -58,9 +57,9 @@ describe('should fork an initially hoisted async state', () => { // then expect(screen.getByTestId("mode-counter").innerHTML) - .toEqual(SubscriptionMode.LISTEN); + .toEqual("[\"CONFIG_OBJECT\",\"INSIDE_PROVIDER\"]"); expect(screen.getByTestId("mode-counter-fork").innerHTML) - .toEqual(SubscriptionMode.FORK); + .toEqual("[\"CONFIG_OBJECT\",\"FORK\",\"INSIDE_PROVIDER\"]"); expect(screen.getByTestId("result-counter").innerHTML).toEqual("0"); expect(screen.getByTestId("result-counter-fork").innerHTML).toEqual("0"); diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/hoist/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/hoist/index.test.tsx index b7d3ccd9..4c990a91 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/hoist/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/hoist/index.test.tsx @@ -1,7 +1,6 @@ import * as React from "react"; import {act, fireEvent, render, screen} from "@testing-library/react"; import { - SubscriptionMode, UseAsyncState } from "../../../../../types.internal"; import {useAsyncState} from "../../../../../react/useAsyncState"; @@ -26,11 +25,11 @@ describe('should hoist an async state to provider', () => { } function Hoister() { - const {mode} = useAsyncState.hoist({ + const {devFlags} = useAsyncState.hoist({ key: "counter", initialValue: 0, }); - return {mode}; + return {JSON.stringify(devFlags)}; } function Wrapper({children, initialValue = false}) { @@ -50,13 +49,13 @@ describe('should hoist an async state to provider', () => { subscribesTo, }: { subscribesTo: string }) { const { - mode, + devFlags, state, }: UseAsyncState = useAsyncState(subscribesTo); return (
- {mode} + {JSON.stringify(devFlags)} {JSON.stringify(state)}
); @@ -72,7 +71,7 @@ describe('should hoist an async state to provider', () => { // then expect(screen.getByTestId("mode-counter").innerHTML) - .toEqual(SubscriptionMode.WAIT); + .toEqual("[\"CONFIG_STRING\",\"INSIDE_PROVIDER\",\"WAIT\"]"); act(() => { @@ -80,13 +79,13 @@ describe('should hoist an async state to provider', () => { }); expect(screen.getByTestId("hoister-mode").innerHTML) - .toEqual(SubscriptionMode.HOIST); + .toEqual("[\"CONFIG_OBJECT\",\"HOIST\",\"INSIDE_PROVIDER\"]"); await act(async () => { await flushPromises(); }); expect(screen.getByTestId("mode-counter").innerHTML) - .toEqual(SubscriptionMode.LISTEN); + .toEqual("[\"CONFIG_STRING\",\"INSIDE_PROVIDER\"]"); expect(screen.getByTestId("result-counter").innerHTML) .toEqual(JSON.stringify({ diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/listen/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/listen/index.test.tsx index a59c7e74..d390cb60 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/listen/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/listen/index.test.tsx @@ -1,7 +1,6 @@ import * as React from "react"; import {render, screen} from "@testing-library/react"; import { - SubscriptionMode, UseAsyncState } from "../../../../../types.internal"; import {useAsyncState} from "../../../../../react/useAsyncState"; @@ -35,13 +34,13 @@ describe('should subscribe to an async state in provider', () => { subscribesTo, }: { subscribesTo: string }) { const { - mode, + devFlags, state, }: UseAsyncState = useAsyncState(subscribesTo); return (
- {mode} + {JSON.stringify(devFlags)} {JSON.stringify(state)}
); @@ -57,13 +56,13 @@ describe('should subscribe to an async state in provider', () => { // then expect(screen.getByTestId("mode-counter").innerHTML) - .toEqual(SubscriptionMode.LISTEN); + .toEqual("[\"CONFIG_STRING\",\"INSIDE_PROVIDER\"]"); expect(screen.getByTestId("mode-todos").innerHTML) - .toEqual(SubscriptionMode.LISTEN); + .toEqual("[\"CONFIG_STRING\",\"INSIDE_PROVIDER\"]"); expect(screen.getByTestId("mode-doesntExist").innerHTML) - .toEqual(SubscriptionMode.WAIT); + .toEqual("[\"CONFIG_STRING\",\"INSIDE_PROVIDER\",\"WAIT\"]"); expect(screen.getByTestId("result-todos").innerHTML) .toEqual(JSON.stringify({ diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/standalone/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/standalone/index.test.tsx index c613d952..ee386cb6 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/standalone/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/standalone/index.test.tsx @@ -1,7 +1,6 @@ import * as React from "react"; import {fireEvent, render, screen} from "@testing-library/react"; import { - SubscriptionMode, UseAsyncState } from "../../../../../types.internal"; import {useAsyncState} from "../../../../../react/useAsyncState"; @@ -21,7 +20,7 @@ describe('should declare a standalone producer inside a provider', () => { function Component() { const { run, - mode, + devFlags, state, }: UseAsyncState = useAsyncState({ selector: d => d.data, @@ -43,7 +42,7 @@ describe('should declare a standalone producer inside a provider', () => {
- {mode} + {JSON.stringify(devFlags)} {state}
); } @@ -60,7 +59,7 @@ describe('should declare a standalone producer inside a provider', () => { const decrementBtn = screen.getByTestId("decrement"); // then expect(screen.getByTestId("mode").innerHTML) - .toEqual(SubscriptionMode.ALONE); + .toEqual("[\"CONFIG_OBJECT\",\"INSIDE_PROVIDER\",\"SELECTOR\",\"STANDALONE\"]"); // +1 fireEvent.click(incrementBtn); @@ -82,7 +81,7 @@ describe('should declare a standalone producer inside a provider', () => { function Component() { const { - mode, + devFlags, }: UseAsyncState = useAsyncState({ key: "standalone", producer(props) { @@ -91,7 +90,7 @@ describe('should declare a standalone producer inside a provider', () => { initialValue: 0, selector: d => d.data, }); - return {mode}; + return {JSON.stringify(devFlags)}; } // when @@ -104,6 +103,6 @@ describe('should declare a standalone producer inside a provider', () => { // then expect(screen.getByTestId("mode").innerHTML) - .toEqual(SubscriptionMode.ALONE); + .toEqual("[\"CONFIG_OBJECT\",\"INSIDE_PROVIDER\",\"SELECTOR\",\"WAIT\"]"); }); }); diff --git a/packages/react-async-states/src/__tests__/react-async-state/useProducer/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useProducer/index.test.tsx index caf8af9d..a6a400f3 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useProducer/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useProducer/index.test.tsx @@ -1,7 +1,6 @@ import * as React from "react"; import {fireEvent, render, screen} from "@testing-library/react"; import {AsyncStateProvider} from "../../../react/AsyncStateProvider"; -import {SubscriptionMode} from "../../../types.internal"; import {useProducer} from "../../../react/useAsyncStateBase"; describe('should useProducer', () => { @@ -20,8 +19,8 @@ describe('should useProducer', () => { function Component() { const { run, - mode, state, + devFlags, } = useProducer(producer); function increment() { @@ -31,7 +30,7 @@ describe('should useProducer', () => { return (
- {mode} + {JSON.stringify(devFlags)} {state.data}
); } @@ -48,7 +47,7 @@ describe('should useProducer', () => { // then expect(screen.getByTestId("result").innerHTML).toEqual(""); expect(screen.getByTestId("mode").innerHTML) - .toEqual(SubscriptionMode.ALONE); + .toEqual("[\"CONFIG_FUNCTION\",\"STANDALONE\"]"); // +1 fireEvent.click(incrementBtn); @@ -73,7 +72,7 @@ describe('should useProducer', () => { function Component() { const { run, - mode, + devFlags, state, } = useProducer(producer); @@ -84,7 +83,7 @@ describe('should useProducer', () => { return (
- {mode} + {JSON.stringify(devFlags)} {state.data}
); } @@ -101,7 +100,7 @@ describe('should useProducer', () => { // then expect(screen.getByTestId("result").innerHTML).toEqual(""); expect(screen.getByTestId("mode").innerHTML) - .toEqual(SubscriptionMode.ALONE); + .toEqual("[\"CONFIG_FUNCTION\",\"INSIDE_PROVIDER\",\"STANDALONE\"]"); // +1 fireEvent.click(incrementBtn); diff --git a/packages/react-async-states/src/__tests__/react-async-state/useSource/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useSource/index.test.tsx index 9396387a..43ad6931 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useSource/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useSource/index.test.tsx @@ -1,7 +1,6 @@ import * as React from "react"; import {act, render, screen} from "@testing-library/react"; import {useSource} from "../../../react/useAsyncStateBase"; -import {SubscriptionMode} from "../../../types.internal"; import {createSource} from "../../../async-state"; describe('should useSource', () => { @@ -18,13 +17,13 @@ describe('should useSource', () => { function Component() { const { run, - mode, + devFlags, state, } = useSource(source); return (
- {mode} + {JSON.stringify(devFlags)} {state.data}
); } @@ -40,7 +39,7 @@ describe('should useSource', () => { // then expect(screen.getByTestId("result").innerHTML).toEqual("8"); expect(screen.getByTestId("mode").innerHTML) - .toEqual(SubscriptionMode.SRC); + .toEqual("[\"CONFIG_SOURCE\",\"SOURCE\"]"); act(() => { source.setState(5); diff --git a/packages/react-async-states/src/__tests__/v2/get-flags.test.ts b/packages/react-async-states/src/__tests__/v2/get-flags.test.ts index 7f5bebb3..cf875ea7 100644 --- a/packages/react-async-states/src/__tests__/v2/get-flags.test.ts +++ b/packages/react-async-states/src/__tests__/v2/get-flags.test.ts @@ -1,4 +1,4 @@ -import {getFlagsFromConfig} from "../../react/v2"; +import {getFlagsFromConfig} from "../../react/useAsyncStateBase"; import { AUTO_RUN, CONFIG_FUNCTION, CONFIG_OBJECT, CONFIG_SOURCE, CONFIG_STRING, FORK, HOIST, INSIDE_PROVIDER, LANE, SOURCE, @@ -16,7 +16,7 @@ describe('getFlagsFromConfig', () => { lazy: false, hoistToProvider: true })) - .toEqual(CONFIG_STRING | STANDALONE | AUTO_RUN | HOIST); + .toEqual(CONFIG_STRING | AUTO_RUN | HOIST); expect(getFlagsFromConfig("key", null, {fork: true})) .toEqual(CONFIG_STRING | STANDALONE | FORK); @@ -31,7 +31,7 @@ describe('getFlagsFromConfig', () => { .toEqual(CONFIG_OBJECT | STANDALONE); expect(getFlagsFromConfig({key, lazy: false, hoistToProvider: true}, null)) - .toEqual(CONFIG_OBJECT | STANDALONE | AUTO_RUN | HOIST); + .toEqual(CONFIG_OBJECT | AUTO_RUN | HOIST); expect(getFlagsFromConfig({key}, null, {fork: true})) .toEqual(CONFIG_OBJECT | STANDALONE | FORK); @@ -239,7 +239,7 @@ describe('getFlagsFromConfig', () => { .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | HOIST); expect(getFlagsFromConfig({key: "key2", producer}, manager, {hoistToProvider: true})) - .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | WAIT | HOIST); + .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | HOIST); }); it('should correctly infer configuration from object: -- remaining cases --', () => { diff --git a/packages/react-async-states/src/__tests__/v2/resolve-instance.test.ts b/packages/react-async-states/src/__tests__/v2/resolve-instance.test.ts index 9d41f3f4..43dfe1c4 100644 --- a/packages/react-async-states/src/__tests__/v2/resolve-instance.test.ts +++ b/packages/react-async-states/src/__tests__/v2/resolve-instance.test.ts @@ -1,4 +1,4 @@ -import {createStateHook, resolveInstance, StateHook} from "../../react/v2"; +import {createStateHook, resolveInstance, StateHook} from "../../react/useAsyncStateBase"; import { CONFIG_OBJECT, CONFIG_SOURCE, CONFIG_STRING, FORK, HOIST, diff --git a/packages/react-async-states/src/index.ts b/packages/react-async-states/src/index.ts index 2809dccc..c50039b1 100644 --- a/packages/react-async-states/src/index.ts +++ b/packages/react-async-states/src/index.ts @@ -18,10 +18,8 @@ export { AsyncStateManager, } from "./async-state"; -export {createLoaderProducer} from "./react/loader-producer" export { RenderStrategy, - SubscriptionMode, } from "./types.internal"; export {StateBoundary, useCurrentState} from "./react/StateBoundary"; diff --git a/packages/react-async-states/src/react/StateHookFlags.ts b/packages/react-async-states/src/react/StateHookFlags.ts index 1db62a63..233f25c4 100644 --- a/packages/react-async-states/src/react/StateHookFlags.ts +++ b/packages/react-async-states/src/react/StateHookFlags.ts @@ -17,3 +17,5 @@ export const LANE = 0b00000_01000_00000_00000; export const CHANGE_EVENTS = 0b00001_00000_00000_00000; export const SUBSCRIBE_EVENTS = 0b00010_00000_00000_00000; +export const SELECTOR = 0b00100_00000_00000_00000; +export const EQUALITY_CHECK = 0b01000_00000_00000_00000; diff --git a/packages/react-async-states/src/react/helpers/configuration-warn.ts b/packages/react-async-states/src/react/helpers/configuration-warn.ts deleted file mode 100644 index 6033f089..00000000 --- a/packages/react-async-states/src/react/helpers/configuration-warn.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { - SubscriptionMode, - UseAsyncStateConfiguration -} from "../../types.internal"; -import {computeCallerName} from "./useCallerName"; -import {__DEV__} from "../../shared"; - -let creationProperties, hoistProperties, forkProperties, irrelevantPropertiesByMode; - -if (__DEV__) { - creationProperties = [ - "producer", - "runEffect", - "cacheConfig", - "initialValue", - "skipPendingDelayMs", - "runEffectDurationMs", - "resetStateOnDispose", - ]; - hoistProperties = [ - "hoistToProvider", - "hoistToProviderConfig", - ]; - forkProperties = [ - "fork", - "forkConfig", - ]; - irrelevantPropertiesByMode = { - LISTEN: [...creationProperties, ...hoistProperties, ...forkProperties], - HOIST: [...forkProperties], - ALONE: [...hoistProperties, ...forkProperties], - WAIT: [...creationProperties, ...hoistProperties, ...forkProperties], - FORK: [...creationProperties, ...hoistProperties], - NA: [], - SRC: [...creationProperties, ...hoistProperties, ...forkProperties], - SRC_FORK: [...creationProperties, ...hoistProperties], - OUTSIDE: [...hoistProperties, ...forkProperties], - }; -} - - - -export function warnInDevAboutIrrelevantUseAsyncStateConfiguration( - mode: SubscriptionMode, - userConfig: UseAsyncStateConfiguration -) { - if (__DEV__) { - const irrelevantProperties = irrelevantPropertiesByMode[mode]; - if (!irrelevantProperties.length) { - return; - } - - const usedIrrelevantProperties = irrelevantProperties.filter( - prop => userConfig[prop] !== undefined - ) - - if (usedIrrelevantProperties.length) { - const caller = computeCallerName(9); - console.error(`[Incompatible configuration] - Subscription to '${userConfig.key}' ` + - `${userConfig.subscriptionKey ? '(with subscriptionKey=' + - userConfig.subscriptionKey + ') ' : ''}from '${caller}' is using incompatible ` + - `['${usedIrrelevantProperties.join(", ")}'] properties with its mode '${mode}'`); - } - } -} diff --git a/packages/react-async-states/src/react/helpers/useCallerName.ts b/packages/react-async-states/src/react/helpers/useCallerName.ts index 09ee66a1..d15f25aa 100644 --- a/packages/react-async-states/src/react/helpers/useCallerName.ts +++ b/packages/react-async-states/src/react/helpers/useCallerName.ts @@ -17,7 +17,7 @@ type WarnInDevSelf = { export default function useInDevSubscriptionKey( subKey: string | undefined, - asyncState: StateInterface, + asyncState: StateInterface | null, from: string, // 1: useAsyncState, 2: useSourceLane, 3: useProducer, 4: useSelector ): string | undefined { if (__DEV__) { diff --git a/packages/react-async-states/src/react/loader-producer.ts b/packages/react-async-states/src/react/loader-producer.ts deleted file mode 100644 index 811e7137..00000000 --- a/packages/react-async-states/src/react/loader-producer.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { - createSource, - ProducerConfig, - ProducerProps, Source, State -} from "../async-state"; -import { - makeUseAsyncStateReturnValue, -} from "./useAsyncStateBase"; -import {readSource} from "../async-state/AsyncState"; -import {SubscriptionMode, UseAsyncState} from "../types.internal"; - -export function createLoaderProducer( - producer: Loader, loaderKey?: string, config?: ProducerConfig): LoaderProducer { - - const source = createSource(`loader-${loaderKey}`, undefined, config) as Source; - let instance = readSource(source); - - function wrapperProducer(props: ProducerProps) { - - const loaderProps: LoaderProps = props.args[0]; - const nextProps: LoaderProducerProps = Object.assign({}, props, loaderProps); - - return producer(nextProps); - } - - return async function loader(props: LoaderProps) { - source.replaceProducer(wrapperProducer); - const result = await source.runp(props); - let mode = SubscriptionMode.SRC; - - return makeUseAsyncStateReturnValue(instance, result, source.key, null, mode); - } -} - -type LoaderProps = { - signal: AbortSignal, - params: Record, -} -type Loader = { - (props: LoaderProps): T -} - -type LoaderProducer = (props: LoaderProps) => Promise>>> - -interface LoaderProducerProps extends ProducerProps { - signal: AbortSignal, - params: Record, -} diff --git a/packages/react-async-states/src/react/useAsyncStateBase.ts b/packages/react-async-states/src/react/useAsyncStateBase.ts index d0abe15e..32442f24 100644 --- a/packages/react-async-states/src/react/useAsyncStateBase.ts +++ b/packages/react-async-states/src/react/useAsyncStateBase.ts @@ -1,191 +1,125 @@ import * as React from "react"; -import {__DEV__, shallowClone, shallowEqual} from "../shared"; -import {AsyncStateContext} from "./context"; +import AsyncState, { + AbortFn, + AsyncStateStatus, + Producer, + Source, + State, + StateInterface +} from "../async-state"; import { + BaseConfig, BaseUseAsyncState, CleanupFn, MixedConfig, PartialUseAsyncStateConfiguration, StateContextValue, SubscribeEventProps, - SubscriptionInfo, - SubscriptionMode, UseAsyncState, - UseAsyncStateConfiguration, - UseAsyncStateContextType, UseAsyncStateEventFn, UseAsyncStateEvents, UseAsyncStateEventSubscribe, - UseAsyncStateRef, - useSelector } from "../types.internal"; -import AsyncState, { - AbortFn, - AsyncStateStatus, - Producer, - Source, - State, - StateInterface -} from "../async-state"; -import {nextKey} from "../async-state/key-gen"; -import { - warnInDevAboutIrrelevantUseAsyncStateConfiguration -} from "./helpers/configuration-warn"; -import {supportsConcurrentMode} from "./helpers/supports-concurrent-mode"; +import {AsyncStateContext} from "./context"; import {isSource} from "../async-state/utils"; import { readSource, standaloneProducerEffectsCreator } from "../async-state/AsyncState"; +import { + AUTO_RUN, + CHANGE_EVENTS, + CONFIG_FUNCTION, + CONFIG_OBJECT, + CONFIG_SOURCE, + CONFIG_STRING, + EQUALITY_CHECK, + FORK, + HOIST, + INSIDE_PROVIDER, + LANE, + NO_MODE, + SELECTOR, + SOURCE, + STANDALONE, + SUBSCRIBE_EVENTS, + WAIT +} from "./StateHookFlags"; +import {nextKey} from "../async-state/key-gen"; +import {__DEV__, shallowClone} from "../shared"; import useInDevSubscriptionKey from "./helpers/useCallerName"; +import {supportsConcurrentMode} from "./helpers/supports-concurrent-mode"; +import {humanizeDevFlags} from "./utils"; + +const emptyArray = []; -const defaultDependencies: any[] = []; export const useAsyncStateBase = function useAsyncStateImpl>( - subscriptionConfig: MixedConfig, - deps: any[] = defaultDependencies, - configOverrides?: PartialUseAsyncStateConfiguration, + mixedConfig: MixedConfig, + deps: any[] = emptyArray, + overrides?: PartialUseAsyncStateConfiguration, ): UseAsyncState { - // When inside provider, the subscribed instance might change - // this gard serves to trigger the memo recalculation + const hook: StateHook = useCurrentHook(); const [guard, setGuard] = React.useState(0); - const contextValue = React.useContext(AsyncStateContext); - // this is similar to a ref, it is used a mutable object between renders - // Besides a ref (that may get reset according to the rumors), this won't - // get reset . And can keep track of the old configuration - // and pass it to the parseConfiguration function. - // We only mutate this during render, and we only assign a value to it if different - const selfMemo = React - .useMemo>(createEmptyObject, []); - - const subscriptionInfo = React - .useMemo>(parseConfiguration, [contextValue, guard, ...deps]); - - const {mode, asyncState, configuration} = subscriptionInfo; - const run = subscriptionInfo.baseReturn.run; - const {selector, areEqual, events} = configuration; - - let {subscriptionKey} = configuration; - if (__DEV__) { - subscriptionKey = useInDevSubscriptionKey(subscriptionKey, asyncState, "1"); - } + const contextValue = React.useContext(AsyncStateContext); + React.useMemo(() => hook.update(mixedConfig, contextValue, overrides), + [contextValue, guard, ...deps]); - const [selectedValue, setSelectedValue] = React - .useState>>(calculateStateValue); + let subscriptionKey = hook.flags & CONFIG_OBJECT + ? (mixedConfig as BaseConfig).subscriptionKey : undefined; - // this reference inequality means that memo has been just recalculated - if (selfMemo.subscriptionInfo !== subscriptionInfo) { - selfMemo.subscriptionInfo = subscriptionInfo; + if (__DEV__) { + subscriptionKey = useInDevSubscriptionKey(subscriptionKey, hook.instance, "1"); } + const [selectedValue, setSelectedValue] = React + .useState>>(calculateStateValue.bind(null, hook)); + if ( - selectedValue.version !== asyncState?.version || - selectedValue.source !== subscriptionInfo.asyncState?._source + selectedValue.version !== hook.instance?.version || + selectedValue.source !== hook.instance?._source ) { updateSelectedValue(); } - if (selfMemo.latestData !== selectedValue.state) { - selfMemo.latestData = selectedValue.state; + if (hook.current !== selectedValue.state) { + hook.current = selectedValue.state; } - if (selfMemo.latestVersion !== selectedValue.version) { - selfMemo.latestVersion = selectedValue.version; + if (hook.version !== selectedValue.version) { + hook.version = selectedValue.version; } - // if inside provider: watch over the async state - // check if the effect should do a no-op early - // this hook is safe to be inside this precise condition, which, if changed - // react during reconciliation would throw the old tree to GC. - if (contextValue !== null) { - React.useEffect(subscribeToAsyncState, - [contextValue, subscriptionKey, areEqual, selector, asyncState, events]); - React.useEffect(watchAsyncState, [contextValue, mode, asyncState, configuration]); - } else { - - React.useEffect(subscribeToAsyncState, - [contextValue, subscriptionKey, areEqual, selector, asyncState, events]); - } + React.useEffect( + hook.subscribe.bind(null, setGuard, updateSelectedValue, subscriptionKey), + [contextValue, hook.flags, hook.instance, subscriptionKey] + ); React.useEffect(autoRunAsyncState, deps); return selectedValue; - function calculateStateValue(): Readonly> { - const newValue = (asyncState ? readStateFromAsyncState(asyncState, selector) : undefined) as E; - - const newState = shallowClone(subscriptionInfo.baseReturn); - newState.read = createReadInConcurrentMode(asyncState, newValue); - newState.state = newValue; - newState.version = asyncState?.version; - newState.lastSuccess = asyncState?.lastSuccess; - return newState; - } function updateSelectedValue() { - setSelectedValue(calculateStateValue()); - selfMemo.latestVersion = asyncState?.version; + setSelectedValue(calculateStateValue(hook)); + hook.version = hook.instance?.version; } - - function parseConfiguration() { - return parseUseAsyncStateConfiguration( - subscriptionConfig, - contextValue, - guard, - selfMemo, - deps, - configOverrides - ); - } - function autoRunAsyncState(): CleanupFn { // auto run only if condition is met, and it is not lazy - const shouldAutoRun = configuration.condition && !configuration.lazy; - if (!shouldAutoRun) { + if (!(hook.flags & AUTO_RUN)) { return; } // if dependencies change, if we run, the cleanup shall abort - if (configuration.autoRunArgs && Array.isArray(configuration.autoRunArgs)) { - return run(...configuration.autoRunArgs); - } - return run(); - } + let config = (hook.config as BaseConfig); - function subscribeToAsyncState() { - function onStateChange() { - const newState = asyncState.state; - const newSelectedState = readStateFromAsyncState(asyncState, selector); - - if (!areEqual(newSelectedState, selfMemo.latestData)) { - updateSelectedValue(); - } - invokeChangeEvents(newState, events); + if (config.autoRunArgs && Array.isArray(config.autoRunArgs)) { + return hook.base.run(...config.autoRunArgs); } - - return newSubscribeToAsyncState( - mode, - run, - () => selfMemo.latestVersion, - asyncState, - subscriptionKey, - events, - onStateChange, - updateSelectedValue, - ); - } - - function watchAsyncState() { - return watchOverAsyncState( - asyncState, - contextValue!, - mode, - configuration, - setGuard, - subscriptionInfo.dispose - ); + return hook.base.run(); } } + // this is a mini version of useAsyncState // this hook uses fewer hooks and has fewer capabilities that useAsyncState // its usage should be when you want to have control over a source @@ -207,64 +141,46 @@ export function useSourceLane( lane?: string, ): UseAsyncState> { let subscriptionKey; - const contextValue = React.useContext(AsyncStateContext); - const asyncState = readSource(source).getLane(lane); - const latestVersion = React.useRef(asyncState.version); + const hook: StateHook> = useCurrentHook(); + const contextValue = React.useContext(AsyncStateContext); + + React.useMemo(() => hook.update({source, lane}, contextValue), + [contextValue, lane]); + + if (__DEV__) { + subscriptionKey = useInDevSubscriptionKey(subscriptionKey, hook.instance, "2"); + } - // declare a state snapshot initialized by the initial selected value - // useState const [selectedValue, setSelectedValue] = React - .useState>>>(calculateSelectedValue); + .useState>>>(calculateStateValue.bind(null, hook)); if ( - selectedValue.version !== asyncState.version || - selectedValue.source !== asyncState._source + selectedValue.version !== hook.instance?.version || + selectedValue.source !== hook.instance?._source ) { updateSelectedValue(); } - if (latestVersion.current !== selectedValue.version) { - latestVersion.current = selectedValue.version; + if (hook.current !== selectedValue.state) { + hook.current = selectedValue.state; } - - if (__DEV__) { - subscriptionKey = useInDevSubscriptionKey(subscriptionKey, asyncState, "2"); + if (hook.version !== selectedValue.version) { + hook.version = selectedValue.version; } - // subscribe to async state - React.useEffect(subscribeToAsyncState, [contextValue, asyncState]); + React.useEffect( + hook.subscribe.bind(null, noop, updateSelectedValue, subscriptionKey), + [contextValue, hook.flags, hook.instance, subscriptionKey] + ); return selectedValue; - function calculateSelectedValue(): Readonly>> { - return makeUseAsyncStateReturnValue( - asyncState, - asyncState.state, - source.key, - contextValue, - SubscriptionMode.SRC - ); - } function updateSelectedValue() { - setSelectedValue(calculateSelectedValue()); - } - - function subscribeToAsyncState() { - return newSubscribeToAsyncState( - SubscriptionMode.SRC, - asyncState.run.bind( - asyncState, - contextValue?.producerEffectsCreator ?? standaloneProducerEffectsCreator - ), - () => latestVersion.current, - asyncState, - subscriptionKey, - undefined, - updateSelectedValue, - updateSelectedValue, - ); + setSelectedValue(calculateStateValue(hook)); + hook.version = hook.instance?.version; } + } // this is a mini version of useAsyncState @@ -280,711 +196,638 @@ export function useSourceLane( export function useProducer( producer: Producer, ): UseAsyncState> { - let subscriptionKey: string | undefined = undefined; - const contextValue = React.useContext(AsyncStateContext); - const [asyncState] = React.useState>(createInstance); - const latestVersion = React.useRef(asyncState.version); + let subscriptionKey; + const hook: StateHook> = useCurrentHook(); + const contextValue = React.useContext(AsyncStateContext); - // declare a state snapshot initialized by the initial selected value - // useState - const [selectedValue, setSelectedValue] = React - .useState>>>(calculateSelectedValue); + React.useMemo(() => hook.update(producer, contextValue), [contextValue]); - if (latestVersion.current !== selectedValue.version) { - latestVersion.current = selectedValue.version; + if (__DEV__) { + subscriptionKey = useInDevSubscriptionKey(subscriptionKey, hook.instance, "3"); } - if (selectedValue.version !== asyncState.version) { + const [selectedValue, setSelectedValue] = React + .useState>>>(calculateStateValue.bind(null, hook)); + + if ( + selectedValue.version !== hook.instance?.version || + selectedValue.source !== hook.instance?._source + ) { updateSelectedValue(); } - if (asyncState.originalProducer !== producer) { - asyncState.replaceProducer(producer); + if (hook.current !== selectedValue.state) { + hook.current = selectedValue.state; + } + if (hook.version !== selectedValue.version) { + hook.version = selectedValue.version; } - if (__DEV__) { - subscriptionKey = useInDevSubscriptionKey(subscriptionKey, asyncState, "3"); + if (hook.instance!.originalProducer !== producer) { + hook.instance!.replaceProducer(producer); } - // subscribe to async state - React.useEffect(subscribeToAsyncState, [contextValue, asyncState]); + React.useEffect( + hook.subscribe.bind(null, noop, updateSelectedValue, subscriptionKey), + [contextValue, hook.flags, hook.instance, subscriptionKey] + ); return selectedValue; - function createInstance() { - return new AsyncState(nextKey(), producer); - } - - function calculateSelectedValue(): Readonly>> { - return makeUseAsyncStateReturnValue( - asyncState, - asyncState.state, - asyncState.key, - contextValue, - SubscriptionMode.ALONE - ); - } function updateSelectedValue() { - setSelectedValue(calculateSelectedValue()); - } - - function subscribeToAsyncState() { - return newSubscribeToAsyncState( - SubscriptionMode.ALONE, - asyncState.run.bind( - asyncState, - contextValue?.producerEffectsCreator ?? standaloneProducerEffectsCreator - ), - () => latestVersion.current, - asyncState, - subscriptionKey, - undefined, - updateSelectedValue, - updateSelectedValue, - ); + setSelectedValue(calculateStateValue(hook)); + hook.version = hook.instance?.version; } } -//region configuration parsing -const sourceConfigurationSecretSymbol = Symbol(); -const defaultUseASConfig = Object.freeze({ - lazy: true, - condition: true, - areEqual: shallowEqual, - selector: oneObjectIdentity, -}); +function invokeSubscribeEvents( + events: UseAsyncStateEventSubscribe | undefined, + run: (...args: any[]) => AbortFn, + instance?: StateInterface, +): CleanupFn[] | null { + if (!events || !instance) { + return null; + } -function oneObjectIdentity(obj: T): T { - return obj; -} + let eventProps: SubscribeEventProps = { + run, + getState: () => instance.state, + invalidateCache: instance.invalidateCache, + }; + let handlers: ((props: SubscribeEventProps) => CleanupFn)[] + = Array.isArray(events) ? events : [events]; -// userConfig is the config the developer wrote -function readUserConfiguration( - // the configuration that the developer emitted, can be of many forms - userConfig: MixedConfig, - // overrides that the library may use to control something - overrides?: PartialUseAsyncStateConfiguration -): UseAsyncStateConfiguration { - // this is direct anonymous producer configuration - if (typeof userConfig === "function") { - return Object.assign( - {}, - defaultUseASConfig, - overrides, - {producer: userConfig} - ); - } - // subscription to a state inside provider by key (or wait) - // or a standalone outside provider with an undefined producer - if (typeof userConfig === "string") { - return Object.assign( - {}, - defaultUseASConfig, - overrides, - {key: userConfig} - ); - } - // subscription via source directly as configuration - if (isSource(userConfig)) { - return Object.assign( - {}, - defaultUseASConfig, - overrides, - {source: userConfig, [sourceConfigurationSecretSymbol]: true} - ); - } - // subscription via source using object configuration - if ( - isSource((userConfig as UseAsyncStateConfiguration)?.source) - ) { - return Object.assign( - {}, - defaultUseASConfig, - userConfig, - overrides, - { - [sourceConfigurationSecretSymbol]: true - } - ); - } - return Object.assign( - {}, - defaultUseASConfig, - overrides, - userConfig - ); + return handlers.map(handler => handler(eventProps)); } -function assignAutomaticKeyIfNotProvided(newConfig, newMode) { - if (newConfig.key !== undefined) { + +function invokeChangeEvents( + nextState: State, + events: UseAsyncStateEvents | undefined +) { + if (!events?.change) { return; } - if ( - newMode === SubscriptionMode.SRC || - newMode === SubscriptionMode.SRC_FORK - ) { - newConfig.key = newConfig.source!.key; - } else { - newConfig.key = nextKey(); - } -} - -function parseUseAsyncStateConfiguration>( - // the configuration that the developer emitted, can be of many forms - mixedConfig: MixedConfig, - // the context value, nullable - contextValue: StateContextValue | null, - // the current version of the external calculation - guard: number, - // the ref holding previous configuration - ownRef: UseAsyncStateRef, - // the hook dependencies - dependencies: any[], - // overrides that the library may use to control something - overrides?: PartialUseAsyncStateConfiguration, -): SubscriptionInfo { - - const newConfig = readUserConfiguration(mixedConfig, overrides); - const newMode = inferSubscriptionMode(contextValue, newConfig); - - const recalculateInstance = shouldRecalculateInstance( - newConfig, newMode, guard, ownRef.subscriptionInfo); - - assignAutomaticKeyIfNotProvided(newConfig, newMode); - if (__DEV__) { - warnInDevAboutIrrelevantUseAsyncStateConfiguration(newMode, newConfig); - } + const changeHandlers: UseAsyncStateEventFn[] + = Array.isArray(events.change) ? events.change : [events.change]; - let newAsyncState: StateInterface; - let previousInstance = ownRef.subscriptionInfo?.asyncState; + const eventProps = {state: nextState}; - if (recalculateInstance) { - newAsyncState = inferStateInstance(newMode, newConfig, contextValue); - } else { - newAsyncState = previousInstance; - } + changeHandlers.forEach(event => { + if (typeof event === "object") { + const {handler, status} = event; + if (!status || nextState.status === status) { + handler(eventProps); + } + } else { + event(eventProps); + } + }); +} - if (newConfig.lane) { - newAsyncState = newAsyncState.getLane(newConfig.lane); +function readStateFromInstance>( + asyncState: StateInterface | null, + flags: number, + config: MixedConfig +): E { + if (!asyncState) { + return undefined as E; } + const selector = flags & SELECTOR + ? (config as PartialUseAsyncStateConfiguration).selector! + : + ((obj): K => obj); + return selector(asyncState.state, asyncState.lastSuccess, asyncState.cache); +} - let didInstanceChange = previousInstance !== newAsyncState; - let didModeChange = newMode !== ownRef.subscriptionInfo?.mode; - - let shouldCalculateNewOutput = didInstanceChange || didModeChange; - - let output: SubscriptionInfo; - - if (shouldCalculateNewOutput) { - let configKey: string = newConfig.key as string; // not falsy - let disposeFn = disposeAsyncStateSubscriptionFn(newMode, newAsyncState, contextValue); - - output = { - mode: newMode, - dispose: disposeFn, - asyncState: newAsyncState, - baseReturn: Object.freeze(makeUseAsyncStateBaseReturnValue( - newAsyncState, configKey, contextValue, newMode)), - - guard, - deps: dependencies, - configuration: newConfig, - }; - } else { - output = shallowClone(ownRef.subscriptionInfo); +class StateHookImpl implements StateHook { + current: E; + flags: number; + config: MixedConfig; + version: number | undefined; + base: BaseUseAsyncState; + context: StateContextValue | null; + instance: StateInterface | null; + + subscribe: ( + setGuard: React.Dispatch>, + onChange: () => void, + subscriptionKey?: string, + ) => AbortFn + + constructor() { + this.flags = NO_MODE; + this.context = null; + } + + update( + newConfig: MixedConfig, + contextValue: StateContextValue | null, + overrides?: PartialUseAsyncStateConfiguration + ) { + let nextFlags = getFlagsFromConfig(newConfig, contextValue, overrides); + let instance = resolveInstance(nextFlags, newConfig, contextValue, this); - output.guard = guard; - output.deps = dependencies; - output.configuration = newConfig; - } + if (!instance && !(nextFlags & WAIT)) { + throw new Error("Mode isn't wait and instance isn't defined! this is a bug"); + } - // assign payload - if (output.asyncState) { - if (contextValue) { - const contextPayload = contextValue.getPayload(); - if (contextPayload) { - output.asyncState.mergePayload(contextPayload); - } + if (instance && (nextFlags & CONFIG_OBJECT && (newConfig as BaseConfig).payload)) { + instance.mergePayload((newConfig as BaseConfig).payload); } - if (newConfig.payload) { - output.asyncState.mergePayload(newConfig.payload); + if (instance && (nextFlags & INSIDE_PROVIDER)) { + instance.mergePayload(contextValue?.getPayload()); } + + this.flags = nextFlags; + this.config = newConfig; + this.instance = instance; + this.context = contextValue; + this.base = makeBaseReturn(this); + this.subscribe = createSubscribeAndWatchFunction(this); } - return output; } -// we only dispose what we hoist, other states are disposed -// automatically when their subscribers go to 0 -function disposeAsyncStateSubscriptionFn( - mode: SubscriptionMode, - asyncState: StateInterface, - contextValue: UseAsyncStateContextType -): () => (boolean | undefined) { - return function dispose() { - switch (mode) { - case SubscriptionMode.FORK: - case SubscriptionMode.HOIST: - case SubscriptionMode.LISTEN: - case SubscriptionMode.ALONE: - return contextValue!.dispose(asyncState); - // NoOp - should not happen - case SubscriptionMode.SRC: - case SubscriptionMode.SRC_FORK: - case SubscriptionMode.OUTSIDE: - case SubscriptionMode.NA: - case SubscriptionMode.WAIT: - default: - return undefined; +//region useAsyncState value construction +// @ts-ignore +function noop(): undefined { + // that's a noop fn +} +function makeBaseReturn(hook: StateHook) { + if (!hook.instance) { + let output = { + run: noop, + runc: noop, + abort: noop, + replay: noop, + setState: noop, + flags: hook.flags, + mergePayload: noop, + uniqueId: undefined, + key: "configurationKey", + invalidateCache: noop, + // @ts-ignore + runp: noop as ((...args: any[]) => Promise>), + // @ts-ignore + } as BaseUseAsyncState; + if (__DEV__) { + // @ts-ignore + output.devFlags = humanizeDevFlags(hook.flags); } + return output; + } + + let instance = hook.instance; + const effectsCreator = hook.context?.producerEffectsCreator ?? standaloneProducerEffectsCreator; + + let output = { + flags: hook.flags, + key: instance.key, + abort: instance.abort, + replay: instance.replay, + source: instance._source, + version: instance.version, + setState: instance.setState, + uniqueId: instance.uniqueId, + mergePayload: instance.mergePayload, + invalidateCache: instance.invalidateCache, + + run: instance.run.bind(instance, effectsCreator), + runp: instance.runp.bind(instance, effectsCreator), + runc: instance.runc.bind(instance, effectsCreator), }; + if (__DEV__) { + // @ts-ignore + output.devFlags = humanizeDevFlags(hook.flags); + } + return output; } -// this functions search for the instance that you desire to subscribe to -function inferStateInstance( - // the subscription mode - mode: SubscriptionMode, - // the configuration - configuration: UseAsyncStateConfiguration, - // the context, if applicable - contextValue: UseAsyncStateContextType -): StateInterface { - const candidate = contextValue - ?.get(configuration.key as string) as StateInterface; - - switch (mode) { - case SubscriptionMode.FORK: - const parentInstance = contextValue!.get(configuration.key!); - return parentInstance.fork(configuration.forkConfig); - case SubscriptionMode.HOIST: - if (candidate) { - return candidate; - } - - const {key, producer} = configuration; +// come here only in standalone mode +function patchInstance( + instance: StateInterface, + flags: number, + config: MixedConfig +) { + let key = readKeyFromConfig(flags, config, instance); + let producer = readProducerFromConfig(flags, config); + let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; - return new AsyncState( - key!, - producer, - configuration, - ); - case SubscriptionMode.LISTEN: - return candidate; - case SubscriptionMode.ALONE: - case SubscriptionMode.OUTSIDE: - return new AsyncState( - configuration.key as string, - configuration.producer, - configuration, - ); - case SubscriptionMode.SRC: - return readSource( - configuration.source as Source); - case SubscriptionMode.SRC_FORK: { - const sourceAsyncState = readSource( - configuration.source as Source); - return sourceAsyncState.fork(configuration.forkConfig); - } - case SubscriptionMode.NA: - case SubscriptionMode.WAIT: - // @ts-ignore - return null; - default: - return candidate; - } + instance.key = key; + instance.replaceProducer(producer); + instance.patchConfig(producerConfig); } -//endregion +function readProducerFromConfig( + flags: number, + config: MixedConfig, +): Producer | undefined { + if (flags & CONFIG_FUNCTION) { + return config as Producer; + } -//region subscription functions + if (flags & CONFIG_OBJECT) { + return (config as BaseConfig).producer; + } -function createEmptyObject(): UseAsyncStateRef { - return Object.create(null); + return undefined; } -function inferSubscriptionMode( - contextValue: UseAsyncStateContextType, - configuration: UseAsyncStateConfiguration -): SubscriptionMode { - // the subscription via source passes directly - if (configuration[sourceConfigurationSecretSymbol] === true) { - return configuration.fork - ? - SubscriptionMode.SRC_FORK - : - SubscriptionMode.SRC; +function readKeyFromConfig( + flags: number, + config: MixedConfig, + prevInstance: StateInterface | null +): string { + if (flags & CONFIG_STRING) { + return config as string; } - if (contextValue === null) { - return SubscriptionMode.OUTSIDE; + if (flags & CONFIG_OBJECT && (config as BaseConfig).key) { + return (config as BaseConfig).key!; } - const {key, fork, hoistToProvider, producer} = configuration; - if (key === undefined && configuration.source?.key === undefined) { - return SubscriptionMode.ALONE; + if (!prevInstance) { + return nextKey(); } - const existsInProvider = !!contextValue.get(key as string); + return prevInstance.key; +} - // early decide that this is a listener and return it immediately - // because this is the most common use case that it will be - // we'll be optimizing this path first - if (existsInProvider && !hoistToProvider && !fork) { - return SubscriptionMode.LISTEN; - } +export function resolveInstance( + flags: number, + config: MixedConfig, + contextValue: StateContextValue | null, + previousHook: StateHook +): StateInterface | null { - // we dont want to hoist or fork - if (!hoistToProvider && !fork && producer) { - return SubscriptionMode.ALONE; + if (flags & WAIT) { + return null; } - // we want to hoist while (not in provider or we dont want to fork) - if (hoistToProvider && (!existsInProvider || !fork)) { - return SubscriptionMode.HOIST; - } + if (flags & SOURCE) { + if (flags & CONFIG_SOURCE) { + let instance = readSource(config as Source); + if (flags & FORK) { + instance = instance.fork(); + } + if (flags & LANE) { + instance = instance.getLane((config as BaseConfig).lane); + } + return instance; + } - // fork a hoisted - // the provider will hoist it again - if (fork && existsInProvider) { - return SubscriptionMode.FORK; + let givenConfig = config as BaseConfig; + let instance = readSource(givenConfig.source!); + if (flags & FORK) { + instance = instance.fork(givenConfig.forkConfig); + } + if (flags & LANE) { + return instance.getLane(givenConfig.lane!) + } + return instance; } - // not found in provider; so either a mistake, or still not hoisted from - if (!existsInProvider) { - // waiting, or may be we should throw ? - return SubscriptionMode.WAIT; + if (flags & STANDALONE) { + let canReuse = !!previousHook?.instance && !!(previousHook.flags & STANDALONE); + if (canReuse) { + patchInstance(previousHook.instance!, flags, config); + return previousHook.instance; + } + + let key = readKeyFromConfig(flags, config, null); + let producer = readProducerFromConfig(flags, config); + let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; + + return new AsyncState(key, producer, producerConfig); } - return SubscriptionMode.NA; // we should not be here -} + if (flags & INSIDE_PROVIDER) { + let key: string = flags & CONFIG_STRING + ? (config as string) : (config as BaseConfig).key!; + if ( + flags & HOIST && + (config as BaseConfig).hoistToProviderConfig?.override) { + // do not check on existing because it is guaranteed to exist + // or else we would have a WAIT flag and quit earlier! + let key = readKeyFromConfig(flags, config, null); + let producer = readProducerFromConfig(flags, config); + let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; -function shouldRecalculateInstance( - newConfig: UseAsyncStateConfiguration, - newMode: SubscriptionMode, - newGuard: Object, - oldSubscriptionInfo: SubscriptionInfo | undefined -): boolean { - // here we check on relevant information to decide on the asyncState instance - return !oldSubscriptionInfo || - newGuard !== oldSubscriptionInfo.guard || - newMode !== oldSubscriptionInfo.mode || - newConfig.producer !== oldSubscriptionInfo.configuration.producer || - newConfig.key !== undefined && newConfig.key !== oldSubscriptionInfo.configuration.key || - newConfig.source !== oldSubscriptionInfo.configuration.source || - newConfig.lane !== oldSubscriptionInfo.configuration.lane || - - newConfig.fork !== oldSubscriptionInfo.configuration.fork || - newConfig.resetStateOnDispose !== oldSubscriptionInfo.configuration.resetStateOnDispose || - newConfig.forkConfig?.keepState !== oldSubscriptionInfo.configuration.forkConfig?.keepState || - - newConfig.hoistToProvider !== oldSubscriptionInfo.configuration.hoistToProvider || - newConfig.hoistToProviderConfig?.override !== oldSubscriptionInfo.configuration.hoistToProviderConfig?.override; -} + return new AsyncState(key, producer, producerConfig); + } -function watchOverAsyncState>( - // the instance - asyncState: StateInterface, - // this function only works inside provider, todo: remove the | null - contextValue: StateContextValue, - // the watching mode (waiting, listen, hoist..) - mode: SubscriptionMode, - // the configuration, will read key and hoistToProviderConfig in case of hoist - configuration: UseAsyncStateConfiguration, - // a callback that notifies when the watch decided that a recalculation is necessary - setGuard: (value: React.SetStateAction) => void, - // the dispose function that serves to destroy the old instance in case we need a new one for hoist mode - dispose: (() => (boolean | undefined)), -) { - let didClean = false; - - // if we are waiting and do not have an asyncState - // this case is when this renders before the component hoisting the state - // the notifyWatchers is scheduled via microTaskQueue, - // that occurs after the layoutEffect and before is effect - // This means that we will miss the notification about the awaited state - // so, if we are waiting without an asyncState, recalculate the memo - if (mode === SubscriptionMode.WAIT) { - let candidate = contextValue.get(configuration.key as string); - if (candidate) { - if (!asyncState || candidate !== asyncState) { - // schedule the recalculation of the memo - setGuard(old => old + 1); - return; + let instance = contextValue!.get(key); + if (instance) { + if (flags & FORK) { + instance = instance.fork((config as BaseConfig).forkConfig); + } + if (flags & LANE) { + return instance.getLane((config as BaseConfig).lane!) } + return instance; + } else { + let key = readKeyFromConfig(flags, config, null); + let producer = readProducerFromConfig(flags, config); + let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; + + return new AsyncState(key, producer, producerConfig); } } - if (mode === SubscriptionMode.HOIST) { - const hoistedInstance = contextValue.hoist( - configuration.key!, - asyncState, - configuration.hoistToProviderConfig - ); - if (hoistedInstance !== asyncState) { - setGuard(old => old + 1); - return; - } + return null; +} - return dispose; - } +export interface StateHook { + current: E, + flags: number, + config: MixedConfig, + version: number | undefined, + base: BaseUseAsyncState, + context: StateContextValue | null, + subscribe: ( + setGuard: React.Dispatch>, + onChange: () => void, + subscriptionKey?: string, + ) => AbortFn, + + instance: StateInterface | null, + + update( + newConfig: MixedConfig, + contextValue: StateContextValue | null, + overrides?: PartialUseAsyncStateConfiguration + ), +} - if (mode === SubscriptionMode.FORK) { - const hoistedInstance = contextValue.hoist( - asyncState.key, - asyncState, - configuration.hoistToProviderConfig - ); - if (hoistedInstance !== asyncState) { - setGuard(old => old + 1); - return; - } +export function createStateHook(): StateHook { + return new StateHookImpl(); +} - return dispose; - } +function useCurrentHook(): StateHook { + return React.useMemo>(createStateHook, emptyArray); +} - if ( - mode === SubscriptionMode.WAIT || - mode === SubscriptionMode.LISTEN - ) { - let watchedKey = SubscriptionMode.WAIT === mode - ? configuration.key : asyncState?.key; - - const unwatch = contextValue.watch( - watchedKey!, - function notify(mayBeNewAsyncState) { - if (didClean) { - return; - } - // only trigger a rerender if the newAsyncState is different - if (mayBeNewAsyncState !== asyncState) { - setGuard(old => old + 1); - } - } - ); - return function cleanup() { - didClean = true; +export function getFlagsFromConfig( + mixedConfig: MixedConfig, + contextValue: StateContextValue | null, + overrides?: PartialUseAsyncStateConfiguration, +): number { + let flags = NO_MODE; - if (typeof unwatch === "function") { - unwatch(); + if (contextValue !== null) { + flags |= INSIDE_PROVIDER; + } + switch (typeof mixedConfig) { + case "function": { + flags |= STANDALONE | CONFIG_FUNCTION; + break; + } + case "string": { + flags |= CONFIG_STRING | getBaseConfigFlags(overrides); + + if (!(flags & HOIST)) { + if (flags & INSIDE_PROVIDER) { + if (!contextValue!.get(mixedConfig)) { + flags |= WAIT; + } + } else { + flags |= STANDALONE; + } } - - if (mode === SubscriptionMode.LISTEN) { - dispose(); + break; + } + case "object": { + // attempt source first + if (isSource(mixedConfig)) { + flags |= SOURCE | CONFIG_SOURCE; + } else if (isSource((mixedConfig as BaseConfig).source)) { + flags |= getBaseConfigFlags(mixedConfig) | SOURCE | CONFIG_OBJECT; + } else { + // object and not a source + // bind other possible flags such as fork, hoist.. + flags |= CONFIG_OBJECT | getBaseConfigFlags(mixedConfig) | getBaseConfigFlags(overrides); + if (!(flags & HOIST)) { + if (flags & INSIDE_PROVIDER) { + if ((mixedConfig as BaseConfig).key) { + if (!contextValue!.get((mixedConfig as BaseConfig).key!)) { + flags |= WAIT; + } + } else { + flags |= STANDALONE; + } + } else { + flags |= STANDALONE; + } + } } - }; + break; + } + default: + break; } - - if (mode === SubscriptionMode.ALONE) { - dispose(); + // bind other possible flags such as fork, hoist.. + if (overrides) { + flags |= getBaseConfigFlags(overrides); } - return undefined; + return flags; } -function newSubscribeToAsyncState( - mode: SubscriptionMode, - run: (...args: any[]) => AbortFn, - getLatestRenderedVersion: () => number | undefined, - asyncState: StateInterface, - subscriptionKey: string | undefined, - events: UseAsyncStateEvents | undefined, - onUpdate: (newState: State) => void, - onVersionMismatch: () => void, -): CleanupFn { - if (!asyncState || !onUpdate) { - return; +function getBaseConfigFlags( + config?: BaseConfig | PartialUseAsyncStateConfiguration +): number { + if (!config) { + return NO_MODE; } - let unsubscribe = asyncState.subscribe(onUpdate, subscriptionKey); - let unsubscribeFromEvents = invokeSubscribeEvents( - events?.subscribe, run, mode, asyncState); - if (asyncState.version !== getLatestRenderedVersion() && typeof onVersionMismatch === "function") { - onVersionMismatch!(); - } + let flags = NO_MODE; - return function cleanup() { - if (unsubscribeFromEvents) { - unsubscribeFromEvents.forEach(cb => { - if (typeof cb === "function") { - cb(); - } - }); + if (config.hoistToProvider) { + flags |= HOIST; + } + if (config.fork) { + flags |= FORK; + } + if (config.lane) { + flags |= LANE; + } + if ((config as PartialUseAsyncStateConfiguration).selector) { + flags |= SELECTOR; + } + if ((config as PartialUseAsyncStateConfiguration).areEqual) { + flags |= EQUALITY_CHECK; + } + if (config.events) { + if (config.events.change) { + flags |= CHANGE_EVENTS; + } + if (config.events.subscribe) { + flags |= SUBSCRIBE_EVENTS; } - unsubscribe!(); } -} -function invokeChangeEvents( - nextState: State, - events: UseAsyncStateEvents | undefined -) { - if (!events?.change) { - return; + // default behavior is lazy=true; so only change if specified explicitly + if (config.lazy === false && config.condition !== false) { + flags |= AUTO_RUN; } - const changeHandlers: UseAsyncStateEventFn[] - = Array.isArray(events.change) ? events.change : [events.change]; - - const eventProps = {state: nextState}; + return flags; +} - changeHandlers.forEach(event => { - if (typeof event === "object") { - const {handler, status} = event; - if (!status || nextState.status === status) { - handler(eventProps); +function createReadInConcurrentMode( + instance: StateInterface | null, + stateValue: E +) { + return function readInConcurrentMode() { + if (!instance) { + return stateValue; + } + if (supportsConcurrentMode()) { + if ( + AsyncStateStatus.pending === instance.state?.status && + instance.suspender + ) { + throw instance.suspender; } - } else { - event(eventProps); } - }); + return stateValue; + } } -function invokeSubscribeEvents( - events: UseAsyncStateEventSubscribe | undefined, - run: (...args: any[]) => AbortFn, - mode: SubscriptionMode, - asyncState?: StateInterface, -): CleanupFn[] | null { - if (!events || !asyncState) { - return null; - } +function createSubscribeAndWatchFunction( + hook: StateHook, +): ((...args) => AbortFn) { + return function subscribeAndWatch( + setGuard: React.Dispatch>, + onChange: () => void, + subscriptionKey?: string, + ) { - let eventProps: SubscribeEventProps = { - run, - mode, - getState: () => asyncState.state, - invalidateCache: asyncState.invalidateCache, - }; + let contextValue = hook.context!; + let {flags, instance, config} = hook; - let handlers: ((props: SubscribeEventProps) => CleanupFn)[] - = Array.isArray(events) ? events : [events]; - return handlers.map(handler => handler(eventProps)); -} + if (flags & WAIT) { + let key: string = flags & CONFIG_STRING + ? (config as string) : (config as BaseConfig).key!; -function readStateFromAsyncState>( - asyncState: StateInterface, - selector: useSelector -): E { - return selector(asyncState.state, asyncState.lastSuccess, asyncState.cache); -} + return hook.context!.watch(key, (maybeInstance) => { + if (maybeInstance !== instance) { + setGuard(old => old + 1); + } + }); + } + // if we are hoisting or forking, spread the instance for watchers + if (flags & INSIDE_PROVIDER && flags & (HOIST | FORK)) { + const hoistedInstance = contextValue.hoist( + instance!.key, + instance!, + (config as BaseConfig).hoistToProviderConfig + ); + if (hoistedInstance !== instance) { + setGuard(old => old + 1); + return; + } + } -//endregion + let didClean = false; + let cleanups: AbortFn[] = [() => didClean = true]; -//region useAsyncState value construction -// @ts-ignore -function noop(): undefined { - // that's a noop fn -} + function watch(mayBeNewAsyncState) { + if (didClean) { + return; + } + if (mayBeNewAsyncState !== instance) { + setGuard(old => old + 1); + } + } -function makeUseAsyncStateBaseReturnValue( - asyncState: StateInterface, - configurationKey: string, - contextValue: UseAsyncStateContextType, - mode: SubscriptionMode -) { - if (!asyncState) { - return { - mode, - run: noop, - runc: noop, - abort: noop, - replay: noop, - setState: noop, - mergePayload: noop, - uniqueId: undefined, - key: configurationKey, - invalidateCache: noop, - // @ts-ignore - runp: noop as ((...args: any[]) => Promise>), - // @ts-ignore - } as BaseUseAsyncState; - } + if ( + flags & INSIDE_PROVIDER && + !(flags & SOURCE) && + !(flags & STANDALONE) + ) { + cleanups.push(contextValue!.watch(instance!.key, watch)); + } - const effectsCreator = contextValue?.producerEffectsCreator ?? standaloneProducerEffectsCreator; + // if inside provider and not source request context disposal of instance + if ( + flags & INSIDE_PROVIDER && + !(flags & SOURCE) && + (flags & (HOIST | FORK | STANDALONE)) + ) { + cleanups.push(() => contextValue!.dispose(instance!)); + } - return { - mode, - key: asyncState.key, - abort: asyncState.abort, - replay: asyncState.replay, - source: asyncState._source, - version: asyncState.version, - setState: asyncState.setState, - uniqueId: asyncState.uniqueId, - mergePayload: asyncState.mergePayload, - invalidateCache: asyncState.invalidateCache, + function onStateChange() { + let newSelectedState = readStateFromInstance(instance!, flags, config); - run: asyncState.run.bind(asyncState, effectsCreator), - runp: asyncState.runp.bind(asyncState, effectsCreator), - runc: asyncState.runc.bind(asyncState, effectsCreator), - }; -} + if (flags & EQUALITY_CHECK) { + let areEqual = (config as PartialUseAsyncStateConfiguration) + .areEqual!(newSelectedState, hook.current); -export function makeUseAsyncStateReturnValue( - asyncState: StateInterface, - stateValue: E, - configurationKey: string, - contextValue: UseAsyncStateContextType, - mode: SubscriptionMode -): Readonly> { + if (!areEqual) { + onChange(); + } + } else { + onChange(); + } - // @ts-ignore - // ok ts! I will append missing properties right now! - const base: UseAsyncState = makeUseAsyncStateBaseReturnValue( - asyncState, configurationKey, contextValue, mode); + if (flags & CHANGE_EVENTS) { + invokeChangeEvents(instance!.state, (config as BaseConfig).events); + } + } + // subscription - base.state = stateValue; - if (!asyncState) { - base.read = function () { - return stateValue; - }; - base.payload = null; - return Object.freeze(base); - } - base.payload = asyncState.payload; - base.lastSuccess = asyncState.lastSuccess; - base.read = createReadInConcurrentMode(asyncState, stateValue); - return Object.freeze(base); -} + cleanups.push(instance!.subscribe(onStateChange, subscriptionKey)); + if (instance!.version !== hook.version) { + onChange(); + } -let didWarnAboutUnsupportedConcurrentFeatures = false; + if (flags & SUBSCRIBE_EVENTS) { + const effectsCreator = flags & INSIDE_PROVIDER ? + contextValue!.producerEffectsCreator : standaloneProducerEffectsCreator; -function createReadInConcurrentMode( - asyncState: StateInterface, - stateValue: E -) { - return function readInConcurrentMode() { - if (supportsConcurrentMode()) { - if ( - AsyncStateStatus.pending === asyncState.state?.status && - asyncState.suspender - ) { - throw asyncState.suspender; + let unsubscribeFns = invokeSubscribeEvents( + (config as BaseConfig).events!.subscribe!, + instance!.run.bind(instance!, effectsCreator), + instance!, + ); + + if (unsubscribeFns) { + cleanups = cleanups.concat(unsubscribeFns); } - } else { - if (__DEV__) { - if (!didWarnAboutUnsupportedConcurrentFeatures) { - console.error( - "[Warning] You are calling useAsyncState().read() without having" + - " react 18 or above. If the library throws, you will get an error" + - " in your app. You will be receiving the state value without" + - " any suspension.Please consider upgrading to " + - "react 18 or above to use concurrent features." - ); - didWarnAboutUnsupportedConcurrentFeatures = true; + } + + return function cleanup() { + + cleanups.forEach(cb => { + if (cb) { + cb(); } - } + }); } - return stateValue; } } +function calculateStateValue( + hook: StateHook, +): Readonly> { + let instance = hook.instance; -//endregion + const newState = shallowClone(hook.base); + const newValue = readStateFromInstance(instance, hook.flags, hook.config); + + newState.read = createReadInConcurrentMode(instance, newValue); + newState.state = newValue; + newState.version = instance?.version; + newState.lastSuccess = instance?.lastSuccess; + return newState; +} diff --git a/packages/react-async-states/src/react/utils.ts b/packages/react-async-states/src/react/utils.ts new file mode 100644 index 00000000..f050c79a --- /dev/null +++ b/packages/react-async-states/src/react/utils.ts @@ -0,0 +1,13 @@ +import * as Flags from './StateHookFlags'; + +export function humanizeDevFlags(flags: number) { + let out: string[] = []; + Object + .entries(Flags) + .forEach(([name, value]) => { + if (value & flags) { + out.push(name); + } + }); + return out; +} diff --git a/packages/react-async-states/src/react/v2.ts b/packages/react-async-states/src/react/v2.ts deleted file mode 100644 index b7902967..00000000 --- a/packages/react-async-states/src/react/v2.ts +++ /dev/null @@ -1,358 +0,0 @@ -import * as React from "react"; -import AsyncState, { - createSource, - Producer, - Source, - State, - StateInterface -} from "../async-state"; -import { - BaseConfig, - MixedConfig, - PartialUseAsyncStateConfiguration, - StateContextValue, - UseAsyncState -} from "../types.internal"; -import {AsyncStateContext} from "./context"; -import {isSource} from "../async-state/utils"; -import {readSource} from "../async-state/AsyncState"; -import { - AUTO_RUN, - CHANGE_EVENTS, - CONFIG_FUNCTION, CONFIG_OBJECT, CONFIG_SOURCE, CONFIG_STRING, FORK, HOIST, - INSIDE_PROVIDER, LANE, - NO_MODE, SOURCE, - STANDALONE, SUBSCRIBE_EVENTS, WAIT -} from "./StateHookFlags"; -import {nextKey} from "../async-state/key-gen"; - - -export const useAsyncStateBase = function useAsyncStateImpl>( - mixedConfig: MixedConfig, - deps: any[] = [], - overrides?: PartialUseAsyncStateConfiguration, -): UseAsyncState { - - const [guard, setGuard] = React.useState(0); - const contextValue = React.useContext(AsyncStateContext); - - const hook: StateHook = useCurrentHook(); - - React.useMemo( - () => hook.update(mixedConfig, contextValue, overrides), - [contextValue, guard, ...deps] - ); - - React.useEffect( - () => { - let {flags, instance} = hook; - - if (flags & WAIT) { - let key: string = flags & CONFIG_STRING - ? (mixedConfig as string) : (mixedConfig as BaseConfig).key!; - - return contextValue!.watch(key, (maybeInstance) => { - if (maybeInstance !== instance) { - setGuard(old => old + 1); - } - }); - } - - if (flags & HOIST) { - contextValue!.hoist - } - - }, - [contextValue, hook.flags, hook.instance] - ); - - -} - -class StateHookImpl implements StateHook { - flags: number; - config: MixedConfig; - instance: StateInterface | null; - - constructor() { - this.flags = NO_MODE; - } - - update( - newConfig: MixedConfig, - contextValue: StateContextValue | null, - overrides?: PartialUseAsyncStateConfiguration - ) { - let nextFlags = getFlagsFromConfig(newConfig, contextValue, overrides); - let instance = resolveInstance(nextFlags, newConfig, contextValue, this); - - if (!instance && !(nextFlags & WAIT)) { - throw new Error("Mode isn't wait and instance isn't defined! this is a bug"); - } - - this.flags = nextFlags; - this.config = newConfig; - this.instance = instance; - } - -} - -/** - * this is called only when the new mode is standalone - * so it is good to make some assumptions: - * - if the previous flags weren't standalone, instance cannot be reused - */ -function canReuseInstance( - flags: number, - hook: StateHook -): boolean { - return !!hook.instance && !!(hook.flags & STANDALONE); -} - - -// come here only in standalone mode -function patchInstance( - instance: StateInterface, - flags: number, - config: MixedConfig -) { - let key = readKeyFromConfig(flags, config, instance); - let producer = readProducerFromConfig(flags, config); - let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; - - instance.key = key; - instance.replaceProducer(producer); - instance.patchConfig(producerConfig); -} - -function readProducerFromConfig( - flags: number, - config: MixedConfig, -): Producer | undefined { - if (flags & CONFIG_FUNCTION) { - return config as Producer; - } - - if (flags & CONFIG_OBJECT) { - return (config as BaseConfig).producer; - } - - return undefined; -} - -function readKeyFromConfig( - flags: number, - config: MixedConfig, - prevInstance: StateInterface | null -): string { - if (flags & CONFIG_STRING) { - return config as string; - } - - if (flags & CONFIG_OBJECT && (config as BaseConfig).key) { - return (config as BaseConfig).key!; - } - - if (!prevInstance) { - return nextKey(); - } - - return prevInstance.key; -} - -export function resolveInstance( - flags: number, - config: MixedConfig, - contextValue: StateContextValue | null, - previousHook: StateHook -): StateInterface | null { - - if (flags & WAIT) { - return null; - } - - if (flags & SOURCE) { - if (flags & CONFIG_SOURCE) { - let instance = readSource(config as Source); - if (flags & FORK) { - instance = instance.fork(); - } - return instance; - } - - let givenConfig = config as BaseConfig; - let instance = readSource(givenConfig.source!); - if (flags & FORK) { - instance = instance.fork(givenConfig.forkConfig); - } - if (flags & LANE) { - return instance.getLane(givenConfig.lane!) - } - return instance; - } - - if (flags & STANDALONE) { - let canReuse = !!previousHook?.instance && !!(previousHook.flags & STANDALONE); - if (canReuse) { - patchInstance(previousHook.instance!, flags, config); - return previousHook.instance; - } - - let key = readKeyFromConfig(flags, config, null); - let producer = readProducerFromConfig(flags, config); - let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; - - return new AsyncState(key, producer, producerConfig); - } - - if (flags & INSIDE_PROVIDER) { - let key: string = flags & CONFIG_STRING - ? (config as string) : (config as BaseConfig).key!; - - if ( - flags & HOIST && - (config as BaseConfig).hoistToProviderConfig?.override) { - // do not check on existing because it is guaranteed to exist - // or else we would have a WAIT flag and quit earlier! - let key = readKeyFromConfig(flags, config, null); - let producer = readProducerFromConfig(flags, config); - let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; - - return new AsyncState(key, producer, producerConfig); - } - - let instance = contextValue!.get(key); - if (flags & FORK) { - instance = instance.fork((config as BaseConfig).forkConfig); - } - if (flags & LANE) { - return instance.getLane((config as BaseConfig).lane!) - } - - return instance; - } - - return null; -} - -export interface StateHook { - flags: number, - config: MixedConfig, - - instance: StateInterface | null, - - update( - newConfig: MixedConfig, - contextValue: StateContextValue | null, - overrides?: PartialUseAsyncStateConfiguration - ), -} - -export function createStateHook(): StateHook { - return new StateHookImpl(); -} - -function useCurrentHook(): StateHook { - const ref = React.useRef>(null); - if (!ref) { - // don't know what about ts in the following line ! - (ref as React.MutableRefObject>).current = createStateHook(); - } - return ref.current!; -} - -export function getFlagsFromConfig( - mixedConfig: MixedConfig, - contextValue: StateContextValue | null, - overrides?: PartialUseAsyncStateConfiguration, -): number { - let flags = NO_MODE; - - if (contextValue !== null) { - flags |= INSIDE_PROVIDER; - } - switch (typeof mixedConfig) { - case "function": { - flags |= STANDALONE | CONFIG_FUNCTION; - break; - } - case "string": { - flags |= CONFIG_STRING; - if (flags & INSIDE_PROVIDER) { - if (!contextValue!.get(mixedConfig)) { - flags |= WAIT; - } - } else { - flags |= STANDALONE; - } - break; - } - case "object": { - // attempt source first - if (isSource(mixedConfig)) { - flags |= SOURCE | CONFIG_SOURCE; - } else if (isSource((mixedConfig as BaseConfig).source)) { - flags |= getBaseConfigFlags(mixedConfig) | SOURCE | CONFIG_OBJECT; - } else { - // object and not a source - // bind other possible flags such as fork, hoist.. - flags |= CONFIG_OBJECT | getBaseConfigFlags(mixedConfig); - if (flags & INSIDE_PROVIDER) { - if ((mixedConfig as BaseConfig).key) { - if (!contextValue!.get((mixedConfig as BaseConfig).key!)) { - flags |= WAIT; - } - } else { - flags |= STANDALONE; - } - } else { - flags |= STANDALONE; - } - } - break; - } - default: - break; - } - // bind other possible flags such as fork, hoist.. - if (overrides) { - flags |= getBaseConfigFlags(overrides); - } - - return flags; -} - -function getBaseConfigFlags( - config?: BaseConfig -): number { - if (!config) { - return NO_MODE; - } - - let flags = NO_MODE; - - if (config.hoistToProvider) { - flags |= HOIST; - } - if (config.fork) { - flags |= FORK; - } - if (config.lane) { - flags |= LANE; - } - if (config.events) { - if (config.events.change) { - flags |= CHANGE_EVENTS; - } - if (config.events.subscribe) { - flags |= SUBSCRIBE_EVENTS; - } - } - - // default behavior is lazy=true; so only change if specified explicitly - if (config.lazy === false) { - flags |= AUTO_RUN; - } - - return flags; -} diff --git a/packages/react-async-states/src/types.internal.ts b/packages/react-async-states/src/types.internal.ts index 9fc20db5..c603d327 100644 --- a/packages/react-async-states/src/types.internal.ts +++ b/packages/react-async-states/src/types.internal.ts @@ -24,18 +24,6 @@ export interface AsyncStateInitializer { config?: ProducerConfig } -export enum SubscriptionMode { - LISTEN = "LISTEN", // simple listener - HOIST = "HOIST", // hoisting a producer, for first time and intended to be shared, more like of an injection - ALONE = "ALONE", // working standalone even if inside provider - WAIT = "WAIT", // waits for the original to be hoisted - FORK = "FORK", // forking an existing one in the provider - NA = "NA", // a weird case that should not happen - SRC = "SRC", // subscription via source property - SRC_FORK = "SRC_FORK", // subscription via source property and fork - OUTSIDE = "OUTSIDE", // standalone outside provider -} - export type StateContextValue = AsyncStateManagerInterface; // use async state @@ -43,8 +31,9 @@ export type StateContextValue = AsyncStateManagerInterface; export interface BaseUseAsyncState> { key: string, + flags?: number, + devFlags?: number, source?: Source, - mode: SubscriptionMode, replay(): AbortFn, abort(reason?: any): void, @@ -71,7 +60,6 @@ export interface UseAsyncState> extends BaseUseAsyncState // // key: string, // version?: number, -// mode: SubscriptionMode, // uniqueId: number | undefined, // source?: Source | undefined, // @@ -221,7 +209,6 @@ export type UseAsyncStateEvents = { export type SubscribeEventProps = { getState: () => State, run: (...args: any[]) => AbortFn, - mode: SubscriptionMode, invalidateCache: (cacheKey?: string) => void, } @@ -234,7 +221,6 @@ export type useSelector = export type PartialUseAsyncStateConfiguration = Partial> export type SubscriptionInfo = { - mode: SubscriptionMode, asyncState: StateInterface, configuration: UseAsyncStateConfiguration, From f0ecfd6790d17a8d77587c522fe8902f7841e43b Mon Sep 17 00:00:00 2001 From: Mohamed EL AYADI Date: Sat, 26 Nov 2022 17:32:33 +0100 Subject: [PATCH 04/13] fixes --- .gitignore | 1 + packages/example/.env | 5 + packages/example/package.json | 30 + packages/example/pnpm-lock.yaml | 9722 +++++++++++++++++ packages/example/public/index.html | 24 + packages/example/public/manifest.json | 8 + packages/example/src/App2.js | 67 + packages/example/src/example1/index.js | 5 + packages/example/src/index.bak.js | 126 + packages/example/src/index.css | 51 + packages/example/src/index.js | 218 + packages/example/src/past/App.js | 181 + packages/example/src/past/App2.js | 16 + packages/example/src/past/BasicUsageDemo.js | 149 + packages/example/src/past/BrokerDemo.js | 84 + packages/example/src/past/DemoDemo.js | 84 + packages/example/src/past/EmitDemo.js | 134 + packages/example/src/past/LanesDemo.js | 184 + packages/example/src/past/Navigation.js | 72 + packages/example/src/past/NextDemo.js | 183 + packages/example/src/past/Provider.js | 94 + packages/example/src/past/ReducersDemo.js | 72 + packages/example/src/past/ReduxDemo.js | 63 + packages/example/src/past/ReplaceStateDemo.js | 42 + packages/example/src/past/RoutingDemo.js | 106 + packages/example/src/past/SelectorsDemo.js | 111 + packages/example/src/past/StandaloneDemo.js | 50 + packages/example/src/past/Subscription.js | 144 + packages/example/src/past/bug.js | 110 + packages/example/src/past/index.js | 8 + packages/example/src/past/producers.js | 57 + packages/example/src/past/v2/App.js | 28 + packages/example/src/past/v2/Bug.js | 89 + packages/example/src/past/v2/Bug2.js | 202 + packages/example/src/past/v2/Bug3.js | 125 + .../src/past/v2/core/AsyncStateProvider.js | 22 + .../example/src/past/v2/domain/posts/api.js | 0 .../example/src/past/v2/domain/posts/index.js | 0 .../src/past/v2/domain/posts/promises.js | 0 .../src/past/v2/domain/posts/selectors.js | 0 .../example/src/past/v2/domain/users/api.js | 13 + .../example/src/past/v2/domain/users/index.js | 186 + .../src/past/v2/domain/users/producers.js | 47 + packages/example/src/past/v2/routing/index.js | 0 packages/example/src/past/v2/shared/utils.js | 64 + .../example/src/past/v2/suspense/Component.js | 22 + .../src/past/v2/suspense/Component2.js | 22 + .../src/past/v2/suspense/ComponentNested.js | 22 + .../src/past/v2/suspense/abstraction.js | 25 + .../src/past/v2/suspense/index-nested.js | 11 + .../example/src/past/v2/suspense/index.js | 11 + .../example/src/past/v2/suspense/index2.js | 11 + pnpm-lock.yaml | 506 +- 53 files changed, 13131 insertions(+), 476 deletions(-) create mode 100644 packages/example/.env create mode 100644 packages/example/package.json create mode 100644 packages/example/pnpm-lock.yaml create mode 100644 packages/example/public/index.html create mode 100644 packages/example/public/manifest.json create mode 100644 packages/example/src/App2.js create mode 100644 packages/example/src/example1/index.js create mode 100644 packages/example/src/index.bak.js create mode 100644 packages/example/src/index.css create mode 100644 packages/example/src/index.js create mode 100644 packages/example/src/past/App.js create mode 100644 packages/example/src/past/App2.js create mode 100644 packages/example/src/past/BasicUsageDemo.js create mode 100644 packages/example/src/past/BrokerDemo.js create mode 100644 packages/example/src/past/DemoDemo.js create mode 100644 packages/example/src/past/EmitDemo.js create mode 100644 packages/example/src/past/LanesDemo.js create mode 100644 packages/example/src/past/Navigation.js create mode 100644 packages/example/src/past/NextDemo.js create mode 100644 packages/example/src/past/Provider.js create mode 100644 packages/example/src/past/ReducersDemo.js create mode 100644 packages/example/src/past/ReduxDemo.js create mode 100644 packages/example/src/past/ReplaceStateDemo.js create mode 100644 packages/example/src/past/RoutingDemo.js create mode 100644 packages/example/src/past/SelectorsDemo.js create mode 100644 packages/example/src/past/StandaloneDemo.js create mode 100644 packages/example/src/past/Subscription.js create mode 100644 packages/example/src/past/bug.js create mode 100644 packages/example/src/past/index.js create mode 100644 packages/example/src/past/producers.js create mode 100644 packages/example/src/past/v2/App.js create mode 100644 packages/example/src/past/v2/Bug.js create mode 100644 packages/example/src/past/v2/Bug2.js create mode 100644 packages/example/src/past/v2/Bug3.js create mode 100644 packages/example/src/past/v2/core/AsyncStateProvider.js create mode 100644 packages/example/src/past/v2/domain/posts/api.js create mode 100644 packages/example/src/past/v2/domain/posts/index.js create mode 100644 packages/example/src/past/v2/domain/posts/promises.js create mode 100644 packages/example/src/past/v2/domain/posts/selectors.js create mode 100644 packages/example/src/past/v2/domain/users/api.js create mode 100644 packages/example/src/past/v2/domain/users/index.js create mode 100644 packages/example/src/past/v2/domain/users/producers.js create mode 100644 packages/example/src/past/v2/routing/index.js create mode 100644 packages/example/src/past/v2/shared/utils.js create mode 100644 packages/example/src/past/v2/suspense/Component.js create mode 100644 packages/example/src/past/v2/suspense/Component2.js create mode 100644 packages/example/src/past/v2/suspense/ComponentNested.js create mode 100644 packages/example/src/past/v2/suspense/abstraction.js create mode 100644 packages/example/src/past/v2/suspense/index-nested.js create mode 100644 packages/example/src/past/v2/suspense/index.js create mode 100644 packages/example/src/past/v2/suspense/index2.js diff --git a/.gitignore b/.gitignore index e1f33a79..dbae2f3b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ build node_modules stats.json dist +packages/example # Cruft .DS_Store diff --git a/packages/example/.env b/packages/example/.env new file mode 100644 index 00000000..726e0d16 --- /dev/null +++ b/packages/example/.env @@ -0,0 +1,5 @@ +# Added to prevent error with mismatching eslint versions +# between the package and the /example due to the way npm/yarn link work. +# See issue for more info: https://github.com/Hermanya/create-react-hook/issues/3 +SKIP_PREFLIGHT_CHECK=true +PUBLIC_URL=/ diff --git a/packages/example/package.json b/packages/example/package.json new file mode 100644 index 00000000..4b65ccda --- /dev/null +++ b/packages/example/package.json @@ -0,0 +1,30 @@ +{ + "name": "react-async-state-example", + "homepage": "https://incepter.github.io/react-async-states", + "version": "0.0.0", + "license": "MIT", + "private": true, + "dependencies": { + "axios": "^0.21.1", + "lodash": "^4.17.21", + "prop-types": "^15.6.2", + "react": "18.2.0", + "react-async-states": "workspace:*", + "async-states-devtools": "workspace:*", + "react-dom": "18.2.0", + "react-router-dom": "6.4.3", + "react-scripts": "5.0.1" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test --env=jsdom", + "eject": "react-scripts eject" + }, + "browserslist": [ + ">0.2%", + "not dead", + "not ie <= 11", + "not op_mini all" + ] +} diff --git a/packages/example/pnpm-lock.yaml b/packages/example/pnpm-lock.yaml new file mode 100644 index 00000000..3a619ae3 --- /dev/null +++ b/packages/example/pnpm-lock.yaml @@ -0,0 +1,9722 @@ +lockfileVersion: 5.4 + +specifiers: + axios: ^0.21.1 + lodash: ^4.17.21 + prop-types: ^15.6.2 + react: 18.2.0 + react-async-states: 1.0.0-rc-7 + react-dom: 18.2.0 + react-router-dom: 6.4.3 + react-scripts: 5.0.1 + +dependencies: + axios: 0.21.4 + lodash: 4.17.21 + prop-types: 15.8.1 + react: 18.2.0 + react-async-states: link:../react-async-states + react-dom: 18.2.0_react@18.2.0 + react-router-dom: 6.4.3_biqbaboplfbrettd7655fr4n2y + react-scripts: 5.0.1_react@18.2.0 + +packages: + + /@ampproject/remapping/2.2.0: + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.17 + dev: false + + /@apideck/better-ajv-errors/0.3.6_ajv@8.11.0: + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + dependencies: + ajv: 8.11.0 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + dev: false + + /@babel/code-frame/7.18.6: + resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.18.6 + dev: false + + /@babel/compat-data/7.20.1: + resolution: {integrity: sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/core/7.20.2: + resolution: {integrity: sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.20.4 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 + '@babel/helper-module-transforms': 7.20.2 + '@babel/helpers': 7.20.1 + '@babel/parser': 7.20.3 + '@babel/template': 7.18.10 + '@babel/traverse': 7.20.1 + '@babel/types': 7.20.2 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/eslint-parser/7.19.1_qn3xnppexigqgidmp7nt2fn2oy: + resolution: {integrity: sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': '>=7.11.0' + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@babel/core': 7.20.2 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 8.27.0 + eslint-visitor-keys: 2.1.0 + semver: 6.3.0 + dev: false + + /@babel/generator/7.20.4: + resolution: {integrity: sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.2 + '@jridgewell/gen-mapping': 0.3.2 + jsesc: 2.5.2 + dev: false + + /@babel/helper-annotate-as-pure/7.18.6: + resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.2 + dev: false + + /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: + resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-explode-assignable-expression': 7.18.6 + '@babel/types': 7.20.2 + dev: false + + /@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.2: + resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.20.1 + '@babel/core': 7.20.2 + '@babel/helper-validator-option': 7.18.6 + browserslist: 4.21.4 + semver: 6.3.0 + dev: false + + /@babel/helper-create-class-features-plugin/7.20.2_@babel+core@7.20.2: + resolution: {integrity: sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-member-expression-to-functions': 7.18.9 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-replace-supers': 7.19.1 + '@babel/helper-split-export-declaration': 7.18.6 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-create-regexp-features-plugin/7.19.0_@babel+core@7.20.2: + resolution: {integrity: sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-annotate-as-pure': 7.18.6 + regexpu-core: 5.2.1 + dev: false + + /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.20.2: + resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-environment-visitor/7.18.9: + resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-explode-assignable-expression/7.18.6: + resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.2 + dev: false + + /@babel/helper-function-name/7.19.0: + resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.18.10 + '@babel/types': 7.20.2 + dev: false + + /@babel/helper-hoist-variables/7.18.6: + resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.2 + dev: false + + /@babel/helper-member-expression-to-functions/7.18.9: + resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.2 + dev: false + + /@babel/helper-module-imports/7.18.6: + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.2 + dev: false + + /@babel/helper-module-transforms/7.20.2: + resolution: {integrity: sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-simple-access': 7.20.2 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-validator-identifier': 7.19.1 + '@babel/template': 7.18.10 + '@babel/traverse': 7.20.1 + '@babel/types': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-optimise-call-expression/7.18.6: + resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.2 + dev: false + + /@babel/helper-plugin-utils/7.20.2: + resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.20.2: + resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-wrap-function': 7.19.0 + '@babel/types': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-replace-supers/7.19.1: + resolution: {integrity: sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==} + engines: {node: '>=6.9.0'} + dependencies: + '@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.20.1 + '@babel/types': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-simple-access/7.20.2: + resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.2 + dev: false + + /@babel/helper-skip-transparent-expression-wrappers/7.20.0: + resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.2 + dev: false + + /@babel/helper-split-export-declaration/7.18.6: + resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.2 + dev: false + + /@babel/helper-string-parser/7.19.4: + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-validator-identifier/7.19.1: + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-validator-option/7.18.6: + resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helper-wrap-function/7.19.0: + resolution: {integrity: sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.19.0 + '@babel/template': 7.18.10 + '@babel/traverse': 7.20.1 + '@babel/types': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helpers/7.20.1: + resolution: {integrity: sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.18.10 + '@babel/traverse': 7.20.1 + '@babel/types': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/highlight/7.18.6: + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.19.1 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: false + + /@babel/parser/7.20.3: + resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.20.2 + dev: false + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9_@babel+core@7.20.2: + resolution: {integrity: sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.20.2 + dev: false + + /@babel/plugin-proposal-async-generator-functions/7.20.1_@babel+core@7.20.2: + resolution: {integrity: sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-proposal-decorators/7.20.2_@babel+core@7.20.2: + resolution: {integrity: sha512-nkBH96IBmgKnbHQ5gXFrcmez+Z9S2EIDKDQGp005ROqBigc88Tky4rzCnlP/lnlj245dCEQl4/YyV0V1kYh5dw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-replace-supers': 7.19.1 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/plugin-syntax-decorators': 7.19.0_@babel+core@7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.2 + dev: false + + /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.20.2: + resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.2 + dev: false + + /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.2 + dev: false + + /@babel/plugin-proposal-logical-assignment-operators/7.18.9_@babel+core@7.20.2: + resolution: {integrity: sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.2 + dev: false + + /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.2 + dev: false + + /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.2 + dev: false + + /@babel/plugin-proposal-object-rest-spread/7.20.2_@babel+core@7.20.2: + resolution: {integrity: sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.20.1 + '@babel/core': 7.20.2 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-transform-parameters': 7.20.3_@babel+core@7.20.2 + dev: false + + /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.2 + dev: false + + /@babel/plugin-proposal-optional-chaining/7.18.9_@babel+core@7.20.2: + resolution: {integrity: sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.2 + dev: false + + /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-proposal-private-property-in-object/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} + engines: {node: '>=4'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.2: + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.20.2: + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.2: + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.20.2: + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-decorators/7.19.0_@babel+core@7.20.2: + resolution: {integrity: sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.20.2: + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.20.2: + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-flow/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.20.2: + resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.20.2: + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.2: + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.20.2: + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.20.2: + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.20.2: + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.2: + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.20.2: + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.20.2: + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.20.2: + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.20.2: + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.2: + resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-block-scoping/7.20.2_@babel+core@7.20.2: + resolution: {integrity: sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-classes/7.20.2_@babel+core@7.20.2: + resolution: {integrity: sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-replace-supers': 7.19.1 + '@babel/helper-split-export-declaration': 7.18.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.20.2: + resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-destructuring/7.20.2_@babel+core@7.20.2: + resolution: {integrity: sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.20.2: + resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-flow-strip-types/7.19.0_@babel+core@7.20.2: + resolution: {integrity: sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.20.2 + dev: false + + /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.20.2: + resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.20.2: + resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-literals/7.18.9_@babel+core@7.20.2: + resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-modules-amd/7.19.6_@babel+core@7.20.2: + resolution: {integrity: sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-module-transforms': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-modules-commonjs/7.19.6_@babel+core@7.20.2: + resolution: {integrity: sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-module-transforms': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-simple-access': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-modules-systemjs/7.19.6_@babel+core@7.20.2: + resolution: {integrity: sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-module-transforms': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-validator-identifier': 7.19.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-module-transforms': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-named-capturing-groups-regex/7.19.1_@babel+core@7.20.2: + resolution: {integrity: sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-replace-supers': 7.19.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-parameters/7.20.3_@babel+core@7.20.2: + resolution: {integrity: sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-react-constant-elements/7.20.2_@babel+core@7.20.2: + resolution: {integrity: sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-react-display-name/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.20.2 + dev: false + + /@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.20.2: + resolution: {integrity: sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.2 + '@babel/types': 7.20.2 + dev: false + + /@babel/plugin-transform-react-pure-annotations/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-regenerator/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + regenerator-transform: 0.15.0 + dev: false + + /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-runtime/7.19.6_@babel+core@7.20.2: + resolution: {integrity: sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.20.2 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.2 + babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.2 + babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.2 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-spread/7.19.0_@babel+core@7.20.2: + resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + dev: false + + /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.20.2: + resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.20.2: + resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-typescript/7.20.2_@babel+core@7.20.2: + resolution: {integrity: sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.20.2: + resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + dev: false + + /@babel/preset-env/7.20.2_@babel+core@7.20.2: + resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.20.1 + '@babel/core': 7.20.2 + '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-validator-option': 7.18.6 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-proposal-async-generator-functions': 7.20.1_@babel+core@7.20.2 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-class-static-block': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-logical-assignment-operators': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-object-rest-spread': 7.20.2_@babel+core@7.20.2 + '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-private-property-in-object': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.2 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.2 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.2 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.20.2 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.2 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.2 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.2 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.2 + '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-async-to-generator': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-block-scoping': 7.20.2_@babel+core@7.20.2 + '@babel/plugin-transform-classes': 7.20.2_@babel+core@7.20.2 + '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-transform-destructuring': 7.20.2_@babel+core@7.20.2 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.20.2 + '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-modules-amd': 7.19.6_@babel+core@7.20.2 + '@babel/plugin-transform-modules-commonjs': 7.19.6_@babel+core@7.20.2 + '@babel/plugin-transform-modules-systemjs': 7.19.6_@babel+core@7.20.2 + '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1_@babel+core@7.20.2 + '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-parameters': 7.20.3_@babel+core@7.20.2 + '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-regenerator': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.20.2 + '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.20.2 + '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.20.2 + '@babel/preset-modules': 0.1.5_@babel+core@7.20.2 + '@babel/types': 7.20.2 + babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.2 + babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.2 + babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.2 + core-js-compat: 3.26.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/preset-modules/0.1.5_@babel+core@7.20.2: + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.2 + '@babel/types': 7.20.2 + esutils: 2.0.3 + dev: false + + /@babel/preset-react/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-validator-option': 7.18.6 + '@babel/plugin-transform-react-display-name': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.20.2 + '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-react-pure-annotations': 7.18.6_@babel+core@7.20.2 + dev: false + + /@babel/preset-typescript/7.18.6_@babel+core@7.20.2: + resolution: {integrity: sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-validator-option': 7.18.6 + '@babel/plugin-transform-typescript': 7.20.2_@babel+core@7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/runtime-corejs3/7.20.1: + resolution: {integrity: sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==} + engines: {node: '>=6.9.0'} + dependencies: + core-js-pure: 3.26.0 + regenerator-runtime: 0.13.10 + dev: false + + /@babel/runtime/7.20.1: + resolution: {integrity: sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.10 + dev: false + + /@babel/template/7.18.10: + resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/parser': 7.20.3 + '@babel/types': 7.20.2 + dev: false + + /@babel/traverse/7.20.1: + resolution: {integrity: sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.20.4 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/parser': 7.20.3 + '@babel/types': 7.20.2 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/types/7.20.2: + resolution: {integrity: sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.19.4 + '@babel/helper-validator-identifier': 7.19.1 + to-fast-properties: 2.0.0 + dev: false + + /@bcoe/v8-coverage/0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: false + + /@csstools/normalize.css/12.0.0: + resolution: {integrity: sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==} + dev: false + + /@csstools/postcss-cascade-layers/1.1.1_postcss@8.4.19: + resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.0.2_45y636a2vqremknoajyxd5nkzy + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /@csstools/postcss-color-function/1.1.1_postcss@8.4.19: + resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-font-format-keywords/1.0.1_postcss@8.4.19: + resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-hwb-function/1.0.2_postcss@8.4.19: + resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-ic-unit/1.0.1_postcss@8.4.19: + resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-is-pseudo-class/2.0.7_postcss@8.4.19: + resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.0.2_45y636a2vqremknoajyxd5nkzy + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /@csstools/postcss-nested-calc/1.0.0_postcss@8.4.19: + resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-normalize-display-values/1.0.1_postcss@8.4.19: + resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-oklab-function/1.1.1_postcss@8.4.19: + resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-progressive-custom-properties/1.3.0_postcss@8.4.19: + resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-stepped-value-functions/1.0.1_postcss@8.4.19: + resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-text-decoration-shorthand/1.0.0_postcss@8.4.19: + resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-trigonometric-functions/1.0.2_postcss@8.4.19: + resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} + engines: {node: ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /@csstools/postcss-unset-value/1.0.2_postcss@8.4.19: + resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + dev: false + + /@csstools/selector-specificity/2.0.2_45y636a2vqremknoajyxd5nkzy: + resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + postcss-selector-parser: ^6.0.10 + dependencies: + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /@eslint/eslintrc/1.3.3: + resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.4.1 + globals: 13.17.0 + ignore: 5.2.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@humanwhocodes/config-array/0.11.7: + resolution: {integrity: sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@humanwhocodes/module-importer/1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: false + + /@humanwhocodes/object-schema/1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: false + + /@istanbuljs/load-nyc-config/1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: false + + /@istanbuljs/schema/0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: false + + /@jest/console/27.5.1: + resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 18.11.9 + chalk: 4.1.2 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 + dev: false + + /@jest/console/28.1.3: + resolution: {integrity: sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + '@types/node': 18.11.9 + chalk: 4.1.2 + jest-message-util: 28.1.3 + jest-util: 28.1.3 + slash: 3.0.0 + dev: false + + /@jest/core/27.5.1: + resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/console': 27.5.1 + '@jest/reporters': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 18.11.9 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.8.1 + exit: 0.1.2 + graceful-fs: 4.2.10 + jest-changed-files: 27.5.1 + jest-config: 27.5.1 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-resolve-dependencies: 27.5.1 + jest-runner: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + jest-watcher: 27.5.1 + micromatch: 4.0.5 + rimraf: 3.0.2 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: false + + /@jest/environment/27.5.1: + resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 18.11.9 + jest-mock: 27.5.1 + dev: false + + /@jest/fake-timers/27.5.1: + resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@sinonjs/fake-timers': 8.1.0 + '@types/node': 18.11.9 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-util: 27.5.1 + dev: false + + /@jest/globals/27.5.1: + resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/types': 27.5.1 + expect: 27.5.1 + dev: false + + /@jest/reporters/27.5.1: + resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 18.11.9 + chalk: 4.1.2 + collect-v8-coverage: 1.0.1 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.10 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-instrument: 5.2.1 + istanbul-lib-report: 3.0.0 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.5 + jest-haste-map: 27.5.1 + jest-resolve: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + slash: 3.0.0 + source-map: 0.6.1 + string-length: 4.0.2 + terminal-link: 2.1.1 + v8-to-istanbul: 8.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@jest/schemas/28.1.3: + resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@sinclair/typebox': 0.24.51 + dev: false + + /@jest/source-map/27.5.1: + resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + callsites: 3.1.0 + graceful-fs: 4.2.10 + source-map: 0.6.1 + dev: false + + /@jest/test-result/27.5.1: + resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.5.1 + '@jest/types': 27.5.1 + '@types/istanbul-lib-coverage': 2.0.4 + collect-v8-coverage: 1.0.1 + dev: false + + /@jest/test-result/28.1.3: + resolution: {integrity: sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/console': 28.1.3 + '@jest/types': 28.1.3 + '@types/istanbul-lib-coverage': 2.0.4 + collect-v8-coverage: 1.0.1 + dev: false + + /@jest/test-sequencer/27.5.1: + resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/test-result': 27.5.1 + graceful-fs: 4.2.10 + jest-haste-map: 27.5.1 + jest-runtime: 27.5.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@jest/transform/27.5.1: + resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.20.2 + '@jest/types': 27.5.1 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 1.9.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.10 + jest-haste-map: 27.5.1 + jest-regex-util: 27.5.1 + jest-util: 27.5.1 + micromatch: 4.0.5 + pirates: 4.0.5 + slash: 3.0.0 + source-map: 0.6.1 + write-file-atomic: 3.0.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@jest/types/27.5.1: + resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 18.11.9 + '@types/yargs': 16.0.4 + chalk: 4.1.2 + dev: false + + /@jest/types/28.1.3: + resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/schemas': 28.1.3 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 18.11.9 + '@types/yargs': 17.0.13 + chalk: 4.1.2 + dev: false + + /@jridgewell/gen-mapping/0.1.1: + resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: false + + /@jridgewell/gen-mapping/0.3.2: + resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/trace-mapping': 0.3.17 + dev: false + + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: false + + /@jridgewell/set-array/1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: false + + /@jridgewell/source-map/0.3.2: + resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} + dependencies: + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 + dev: false + + /@jridgewell/sourcemap-codec/1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: false + + /@jridgewell/trace-mapping/0.3.17: + resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: false + + /@leichtgewicht/ip-codec/2.0.4: + resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} + dev: false + + /@nicolo-ribaudo/eslint-scope-5-internals/5.1.1-v1: + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + dependencies: + eslint-scope: 5.1.1 + dev: false + + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: false + + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: false + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.13.0 + dev: false + + /@pmmmwh/react-refresh-webpack-plugin/0.5.9_unmakpayn7vcxadrrsbqlrpehy: + resolution: {integrity: sha512-7QV4cqUwhkDIHpMAZ9mestSJ2DMIotVTbOUwbiudhjCRTAWWKIaBecELiEM2LT3AHFeOAaHIcFu4dbXjX+9GBA==} + engines: {node: '>= 10.13'} + peerDependencies: + '@types/webpack': 4.x || 5.x + react-refresh: '>=0.10.0 <1.0.0' + sockjs-client: ^1.4.0 + type-fest: '>=0.17.0 <4.0.0' + webpack: '>=4.43.0 <6.0.0' + webpack-dev-server: 3.x || 4.x + webpack-hot-middleware: 2.x + webpack-plugin-serve: 0.x || 1.x + peerDependenciesMeta: + '@types/webpack': + optional: true + sockjs-client: + optional: true + type-fest: + optional: true + webpack-dev-server: + optional: true + webpack-hot-middleware: + optional: true + webpack-plugin-serve: + optional: true + dependencies: + ansi-html-community: 0.0.8 + common-path-prefix: 3.0.0 + core-js-pure: 3.26.0 + error-stack-parser: 2.1.4 + find-up: 5.0.0 + html-entities: 2.3.3 + loader-utils: 2.0.4 + react-refresh: 0.11.0 + schema-utils: 3.1.1 + source-map: 0.7.4 + webpack: 5.75.0 + webpack-dev-server: 4.11.1_webpack@5.75.0 + dev: false + + /@remix-run/router/1.0.3: + resolution: {integrity: sha512-ceuyTSs7PZ/tQqi19YZNBc5X7kj1f8p+4DIyrcIYFY9h+hd1OKm4RqtiWldR9eGEvIiJfsqwM4BsuCtRIuEw6Q==} + engines: {node: '>=14'} + dev: false + + /@rollup/plugin-babel/5.3.1_rw3hudt2pmn5afxog7l3b6qtze: + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-module-imports': 7.18.6 + '@rollup/pluginutils': 3.1.0_rollup@2.79.1 + rollup: 2.79.1 + dev: false + + /@rollup/plugin-node-resolve/11.2.1_rollup@2.79.1: + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.79.1 + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 + deepmerge: 4.2.2 + is-module: 1.0.0 + resolve: 1.22.1 + rollup: 2.79.1 + dev: false + + /@rollup/plugin-replace/2.4.2_rollup@2.79.1: + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.79.1 + magic-string: 0.25.9 + rollup: 2.79.1 + dev: false + + /@rollup/pluginutils/3.1.0_rollup@2.79.1: + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: false + + /@rushstack/eslint-patch/1.2.0: + resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} + dev: false + + /@sinclair/typebox/0.24.51: + resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} + dev: false + + /@sinonjs/commons/1.8.5: + resolution: {integrity: sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==} + dependencies: + type-detect: 4.0.8 + dev: false + + /@sinonjs/fake-timers/8.1.0: + resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} + dependencies: + '@sinonjs/commons': 1.8.5 + dev: false + + /@surma/rollup-plugin-off-main-thread/2.2.3: + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + dependencies: + ejs: 3.1.8 + json5: 2.2.1 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.8 + dev: false + + /@svgr/babel-plugin-add-jsx-attribute/5.4.0: + resolution: {integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-remove-jsx-attribute/5.4.0: + resolution: {integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-remove-jsx-empty-expression/5.0.1: + resolution: {integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-replace-jsx-attribute-value/5.0.1: + resolution: {integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-svg-dynamic-title/5.4.0: + resolution: {integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-svg-em-dimensions/5.4.0: + resolution: {integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-transform-react-native-svg/5.4.0: + resolution: {integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-plugin-transform-svg-component/5.5.0: + resolution: {integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==} + engines: {node: '>=10'} + dev: false + + /@svgr/babel-preset/5.5.0: + resolution: {integrity: sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==} + engines: {node: '>=10'} + dependencies: + '@svgr/babel-plugin-add-jsx-attribute': 5.4.0 + '@svgr/babel-plugin-remove-jsx-attribute': 5.4.0 + '@svgr/babel-plugin-remove-jsx-empty-expression': 5.0.1 + '@svgr/babel-plugin-replace-jsx-attribute-value': 5.0.1 + '@svgr/babel-plugin-svg-dynamic-title': 5.4.0 + '@svgr/babel-plugin-svg-em-dimensions': 5.4.0 + '@svgr/babel-plugin-transform-react-native-svg': 5.4.0 + '@svgr/babel-plugin-transform-svg-component': 5.5.0 + dev: false + + /@svgr/core/5.5.0: + resolution: {integrity: sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==} + engines: {node: '>=10'} + dependencies: + '@svgr/plugin-jsx': 5.5.0 + camelcase: 6.3.0 + cosmiconfig: 7.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@svgr/hast-util-to-babel-ast/5.5.0: + resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} + engines: {node: '>=10'} + dependencies: + '@babel/types': 7.20.2 + dev: false + + /@svgr/plugin-jsx/5.5.0: + resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.20.2 + '@svgr/babel-preset': 5.5.0 + '@svgr/hast-util-to-babel-ast': 5.5.0 + svg-parser: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@svgr/plugin-svgo/5.5.0: + resolution: {integrity: sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==} + engines: {node: '>=10'} + dependencies: + cosmiconfig: 7.0.1 + deepmerge: 4.2.2 + svgo: 1.3.2 + dev: false + + /@svgr/webpack/5.5.0: + resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.20.2 + '@babel/plugin-transform-react-constant-elements': 7.20.2_@babel+core@7.20.2 + '@babel/preset-env': 7.20.2_@babel+core@7.20.2 + '@babel/preset-react': 7.18.6_@babel+core@7.20.2 + '@svgr/core': 5.5.0 + '@svgr/plugin-jsx': 5.5.0 + '@svgr/plugin-svgo': 5.5.0 + loader-utils: 2.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@tootallnate/once/1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + dev: false + + /@trysound/sax/0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + dev: false + + /@types/babel__core/7.1.20: + resolution: {integrity: sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==} + dependencies: + '@babel/parser': 7.20.3 + '@babel/types': 7.20.2 + '@types/babel__generator': 7.6.4 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.18.2 + dev: false + + /@types/babel__generator/7.6.4: + resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} + dependencies: + '@babel/types': 7.20.2 + dev: false + + /@types/babel__template/7.4.1: + resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} + dependencies: + '@babel/parser': 7.20.3 + '@babel/types': 7.20.2 + dev: false + + /@types/babel__traverse/7.18.2: + resolution: {integrity: sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==} + dependencies: + '@babel/types': 7.20.2 + dev: false + + /@types/body-parser/1.19.2: + resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + dependencies: + '@types/connect': 3.4.35 + '@types/node': 18.11.9 + dev: false + + /@types/bonjour/3.5.10: + resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} + dependencies: + '@types/node': 18.11.9 + dev: false + + /@types/connect-history-api-fallback/1.3.5: + resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} + dependencies: + '@types/express-serve-static-core': 4.17.31 + '@types/node': 18.11.9 + dev: false + + /@types/connect/3.4.35: + resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} + dependencies: + '@types/node': 18.11.9 + dev: false + + /@types/eslint-scope/3.7.4: + resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} + dependencies: + '@types/eslint': 8.4.10 + '@types/estree': 0.0.51 + dev: false + + /@types/eslint/8.4.10: + resolution: {integrity: sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==} + dependencies: + '@types/estree': 1.0.0 + '@types/json-schema': 7.0.11 + dev: false + + /@types/estree/0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: false + + /@types/estree/0.0.51: + resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} + dev: false + + /@types/estree/1.0.0: + resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} + dev: false + + /@types/express-serve-static-core/4.17.31: + resolution: {integrity: sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==} + dependencies: + '@types/node': 18.11.9 + '@types/qs': 6.9.7 + '@types/range-parser': 1.2.4 + dev: false + + /@types/express/4.17.14: + resolution: {integrity: sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==} + dependencies: + '@types/body-parser': 1.19.2 + '@types/express-serve-static-core': 4.17.31 + '@types/qs': 6.9.7 + '@types/serve-static': 1.15.0 + dev: false + + /@types/graceful-fs/4.1.5: + resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} + dependencies: + '@types/node': 18.11.9 + dev: false + + /@types/html-minifier-terser/6.1.0: + resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} + dev: false + + /@types/http-proxy/1.17.9: + resolution: {integrity: sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==} + dependencies: + '@types/node': 18.11.9 + dev: false + + /@types/istanbul-lib-coverage/2.0.4: + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + dev: false + + /@types/istanbul-lib-report/3.0.0: + resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + dev: false + + /@types/istanbul-reports/3.0.1: + resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + dependencies: + '@types/istanbul-lib-report': 3.0.0 + dev: false + + /@types/json-schema/7.0.11: + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + dev: false + + /@types/json5/0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: false + + /@types/mime/3.0.1: + resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} + dev: false + + /@types/node/18.11.9: + resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==} + dev: false + + /@types/parse-json/4.0.0: + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + dev: false + + /@types/prettier/2.7.1: + resolution: {integrity: sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==} + dev: false + + /@types/q/1.5.5: + resolution: {integrity: sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==} + dev: false + + /@types/qs/6.9.7: + resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} + dev: false + + /@types/range-parser/1.2.4: + resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} + dev: false + + /@types/resolve/1.17.1: + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + dependencies: + '@types/node': 18.11.9 + dev: false + + /@types/retry/0.12.0: + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + dev: false + + /@types/semver/7.3.13: + resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} + dev: false + + /@types/serve-index/1.9.1: + resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} + dependencies: + '@types/express': 4.17.14 + dev: false + + /@types/serve-static/1.15.0: + resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} + dependencies: + '@types/mime': 3.0.1 + '@types/node': 18.11.9 + dev: false + + /@types/sockjs/0.3.33: + resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} + dependencies: + '@types/node': 18.11.9 + dev: false + + /@types/stack-utils/2.0.1: + resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} + dev: false + + /@types/trusted-types/2.0.2: + resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==} + dev: false + + /@types/ws/8.5.3: + resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} + dependencies: + '@types/node': 18.11.9 + dev: false + + /@types/yargs-parser/21.0.0: + resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + dev: false + + /@types/yargs/16.0.4: + resolution: {integrity: sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==} + dependencies: + '@types/yargs-parser': 21.0.0 + dev: false + + /@types/yargs/17.0.13: + resolution: {integrity: sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==} + dependencies: + '@types/yargs-parser': 21.0.0 + dev: false + + /@typescript-eslint/eslint-plugin/5.42.1_jnohwm7eexgw7uduhweedcbnpe: + resolution: {integrity: sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/parser': 5.42.1_eslint@8.27.0 + '@typescript-eslint/scope-manager': 5.42.1 + '@typescript-eslint/type-utils': 5.42.1_eslint@8.27.0 + '@typescript-eslint/utils': 5.42.1_eslint@8.27.0 + debug: 4.3.4 + eslint: 8.27.0 + ignore: 5.2.0 + natural-compare-lite: 1.4.0 + regexpp: 3.2.0 + semver: 7.3.8 + tsutils: 3.21.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/experimental-utils/5.42.1_eslint@8.27.0: + resolution: {integrity: sha512-qona75z2MLpeZADEuCet5Pwvh1g/0cWScEEDy43chuUPc4klgDiwz5hLFk5dHcjFEETSYQHRPYiiHKW24EMPjw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.42.1_eslint@8.27.0 + eslint: 8.27.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /@typescript-eslint/parser/5.42.1_eslint@8.27.0: + resolution: {integrity: sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.42.1 + '@typescript-eslint/types': 5.42.1 + '@typescript-eslint/typescript-estree': 5.42.1 + debug: 4.3.4 + eslint: 8.27.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/scope-manager/5.42.1: + resolution: {integrity: sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.42.1 + '@typescript-eslint/visitor-keys': 5.42.1 + dev: false + + /@typescript-eslint/type-utils/5.42.1_eslint@8.27.0: + resolution: {integrity: sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.42.1 + '@typescript-eslint/utils': 5.42.1_eslint@8.27.0 + debug: 4.3.4 + eslint: 8.27.0 + tsutils: 3.21.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/types/5.42.1: + resolution: {integrity: sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: false + + /@typescript-eslint/typescript-estree/5.42.1: + resolution: {integrity: sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.42.1 + '@typescript-eslint/visitor-keys': 5.42.1 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.3.8 + tsutils: 3.21.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/utils/5.42.1_eslint@8.27.0: + resolution: {integrity: sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@types/json-schema': 7.0.11 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.42.1 + '@typescript-eslint/types': 5.42.1 + '@typescript-eslint/typescript-estree': 5.42.1 + eslint: 8.27.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0_eslint@8.27.0 + semver: 7.3.8 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /@typescript-eslint/visitor-keys/5.42.1: + resolution: {integrity: sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.42.1 + eslint-visitor-keys: 3.3.0 + dev: false + + /@webassemblyjs/ast/1.11.1: + resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} + dependencies: + '@webassemblyjs/helper-numbers': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + dev: false + + /@webassemblyjs/floating-point-hex-parser/1.11.1: + resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} + dev: false + + /@webassemblyjs/helper-api-error/1.11.1: + resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} + dev: false + + /@webassemblyjs/helper-buffer/1.11.1: + resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} + dev: false + + /@webassemblyjs/helper-numbers/1.11.1: + resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.1 + '@webassemblyjs/helper-api-error': 1.11.1 + '@xtuc/long': 4.2.2 + dev: false + + /@webassemblyjs/helper-wasm-bytecode/1.11.1: + resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} + dev: false + + /@webassemblyjs/helper-wasm-section/1.11.1: + resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-buffer': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/wasm-gen': 1.11.1 + dev: false + + /@webassemblyjs/ieee754/1.11.1: + resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: false + + /@webassemblyjs/leb128/1.11.1: + resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} + dependencies: + '@xtuc/long': 4.2.2 + dev: false + + /@webassemblyjs/utf8/1.11.1: + resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} + dev: false + + /@webassemblyjs/wasm-edit/1.11.1: + resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-buffer': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/helper-wasm-section': 1.11.1 + '@webassemblyjs/wasm-gen': 1.11.1 + '@webassemblyjs/wasm-opt': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + '@webassemblyjs/wast-printer': 1.11.1 + dev: false + + /@webassemblyjs/wasm-gen/1.11.1: + resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/ieee754': 1.11.1 + '@webassemblyjs/leb128': 1.11.1 + '@webassemblyjs/utf8': 1.11.1 + dev: false + + /@webassemblyjs/wasm-opt/1.11.1: + resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-buffer': 1.11.1 + '@webassemblyjs/wasm-gen': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + dev: false + + /@webassemblyjs/wasm-parser/1.11.1: + resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-api-error': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/ieee754': 1.11.1 + '@webassemblyjs/leb128': 1.11.1 + '@webassemblyjs/utf8': 1.11.1 + dev: false + + /@webassemblyjs/wast-printer/1.11.1: + resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@xtuc/long': 4.2.2 + dev: false + + /@xtuc/ieee754/1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: false + + /@xtuc/long/4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: false + + /abab/2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + dev: false + + /accepts/1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: false + + /acorn-globals/6.0.0: + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + dev: false + + /acorn-import-assertions/1.8.0_acorn@8.8.1: + resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.8.1 + dev: false + + /acorn-jsx/5.3.2_acorn@8.8.1: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.8.1 + dev: false + + /acorn-node/1.8.2: + resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + xtend: 4.0.2 + dev: false + + /acorn-walk/7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + dev: false + + /acorn/7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + + /acorn/8.8.1: + resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + + /address/1.2.1: + resolution: {integrity: sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==} + engines: {node: '>= 10.0.0'} + dev: false + + /adjust-sourcemap-loader/4.0.0: + resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} + engines: {node: '>=8.9'} + dependencies: + loader-utils: 2.0.4 + regex-parser: 2.2.11 + dev: false + + /agent-base/6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /ajv-formats/2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.11.0 + dev: false + + /ajv-keywords/3.5.2_ajv@6.12.6: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: 6.12.6 + dev: false + + /ajv-keywords/5.1.0_ajv@8.11.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + dependencies: + ajv: 8.11.0 + fast-deep-equal: 3.1.3 + dev: false + + /ajv/6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: false + + /ajv/8.11.0: + resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: false + + /ansi-escapes/4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: false + + /ansi-html-community/0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + dev: false + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: false + + /ansi-regex/6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: false + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: false + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: false + + /ansi-styles/5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: false + + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: false + + /arg/5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: false + + /argparse/1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: false + + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: false + + /aria-query/4.2.2: + resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==} + engines: {node: '>=6.0'} + dependencies: + '@babel/runtime': 7.20.1 + '@babel/runtime-corejs3': 7.20.1 + dev: false + + /array-flatten/1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: false + + /array-flatten/2.1.2: + resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} + dev: false + + /array-includes/3.1.6: + resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.4 + get-intrinsic: 1.1.3 + is-string: 1.0.7 + dev: false + + /array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: false + + /array.prototype.flat/1.3.1: + resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.4 + es-shim-unscopables: 1.0.0 + dev: false + + /array.prototype.flatmap/1.3.1: + resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.4 + es-shim-unscopables: 1.0.0 + dev: false + + /array.prototype.reduce/1.0.5: + resolution: {integrity: sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.4 + es-array-method-boxes-properly: 1.0.0 + is-string: 1.0.7 + dev: false + + /asap/2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: false + + /ast-types-flow/0.0.7: + resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} + dev: false + + /async/3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + dev: false + + /asynckit/0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + + /at-least-node/1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: false + + /autoprefixer/10.4.13_postcss@8.4.19: + resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.21.4 + caniuse-lite: 1.0.30001431 + fraction.js: 4.2.0 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /axe-core/4.5.1: + resolution: {integrity: sha512-1exVbW0X1O/HSr/WMwnaweyqcWOgZgLiVxdLG34pvSQk4NlYQr9OUy0JLwuhFfuVNQzzqgH57eYzkFBCb3bIsQ==} + engines: {node: '>=4'} + dev: false + + /axios/0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + dependencies: + follow-redirects: 1.15.2 + transitivePeerDependencies: + - debug + dev: false + + /axobject-query/2.2.0: + resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} + dev: false + + /babel-jest/27.5.1_@babel+core@7.20.2: + resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.20.2 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__core': 7.1.20 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 27.5.1_@babel+core@7.20.2 + chalk: 4.1.2 + graceful-fs: 4.2.10 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-loader/8.3.0_npabyccmuonwo2rku4k53xo3hi: + resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + '@babel/core': 7.20.2 + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 5.75.0 + dev: false + + /babel-plugin-istanbul/6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.20.2 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-jest-hoist/27.5.1: + resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/template': 7.18.10 + '@babel/types': 7.20.2 + '@types/babel__core': 7.1.20 + '@types/babel__traverse': 7.18.2 + dev: false + + /babel-plugin-macros/3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.20.1 + cosmiconfig: 7.0.1 + resolve: 1.22.1 + dev: false + + /babel-plugin-named-asset-import/0.3.8_@babel+core@7.20.2: + resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} + peerDependencies: + '@babel/core': ^7.1.0 + dependencies: + '@babel/core': 7.20.2 + dev: false + + /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.20.2: + resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.20.1 + '@babel/core': 7.20.2 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.2 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.20.2: + resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.2 + core-js-compat: 3.26.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.20.2: + resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.2 + '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.2 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-transform-react-remove-prop-types/0.4.24: + resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} + dev: false + + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.20.2: + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.2 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.2 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.2 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.20.2 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.2 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.2 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.2 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.2 + dev: false + + /babel-preset-jest/27.5.1_@babel+core@7.20.2: + resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.20.2 + babel-plugin-jest-hoist: 27.5.1 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.2 + dev: false + + /babel-preset-react-app/10.0.1: + resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} + dependencies: + '@babel/core': 7.20.2 + '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-decorators': 7.20.2_@babel+core@7.20.2 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.20.2 + '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-proposal-private-property-in-object': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-flow-strip-types': 7.19.0_@babel+core@7.20.2 + '@babel/plugin-transform-react-display-name': 7.18.6_@babel+core@7.20.2 + '@babel/plugin-transform-runtime': 7.19.6_@babel+core@7.20.2 + '@babel/preset-env': 7.20.2_@babel+core@7.20.2 + '@babel/preset-react': 7.18.6_@babel+core@7.20.2 + '@babel/preset-typescript': 7.18.6_@babel+core@7.20.2 + '@babel/runtime': 7.20.1 + babel-plugin-macros: 3.1.0 + babel-plugin-transform-react-remove-prop-types: 0.4.24 + transitivePeerDependencies: + - supports-color + dev: false + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: false + + /batch/0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + dev: false + + /bfj/7.0.2: + resolution: {integrity: sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==} + engines: {node: '>= 8.0.0'} + dependencies: + bluebird: 3.7.2 + check-types: 11.1.2 + hoopy: 0.1.4 + tryer: 1.0.1 + dev: false + + /big.js/5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: false + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: false + + /bluebird/3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: false + + /body-parser/1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.4 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /bonjour-service/1.0.14: + resolution: {integrity: sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==} + dependencies: + array-flatten: 2.1.2 + dns-equal: 1.0.0 + fast-deep-equal: 3.1.3 + multicast-dns: 7.2.5 + dev: false + + /boolbase/1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: false + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: false + + /brace-expansion/2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: false + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: false + + /browser-process-hrtime/1.0.0: + resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} + dev: false + + /browserslist/4.21.4: + resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001431 + electron-to-chromium: 1.4.284 + node-releases: 2.0.6 + update-browserslist-db: 1.0.10_browserslist@4.21.4 + dev: false + + /bser/2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 + dev: false + + /buffer-from/1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: false + + /builtin-modules/3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: false + + /bytes/3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + dev: false + + /bytes/3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: false + + /call-bind/1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.1.3 + dev: false + + /callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: false + + /camel-case/4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.4.1 + dev: false + + /camelcase-css/2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: false + + /camelcase/5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: false + + /camelcase/6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: false + + /caniuse-api/3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + dependencies: + browserslist: 4.21.4 + caniuse-lite: 1.0.30001431 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + dev: false + + /caniuse-lite/1.0.30001431: + resolution: {integrity: sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==} + dev: false + + /case-sensitive-paths-webpack-plugin/2.4.0: + resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} + engines: {node: '>=4'} + dev: false + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: false + + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: false + + /char-regex/1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + dev: false + + /char-regex/2.0.1: + resolution: {integrity: sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==} + engines: {node: '>=12.20'} + dev: false + + /check-types/11.1.2: + resolution: {integrity: sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==} + dev: false + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.2 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: false + + /chrome-trace-event/1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + dev: false + + /ci-info/3.5.0: + resolution: {integrity: sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==} + dev: false + + /cjs-module-lexer/1.2.2: + resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} + dev: false + + /clean-css/5.3.1: + resolution: {integrity: sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==} + engines: {node: '>= 10.0'} + dependencies: + source-map: 0.6.1 + dev: false + + /cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: false + + /co/4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: false + + /coa/2.0.2: + resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} + engines: {node: '>= 4.0'} + dependencies: + '@types/q': 1.5.5 + chalk: 2.4.2 + q: 1.5.1 + dev: false + + /collect-v8-coverage/1.0.1: + resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} + dev: false + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: false + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: false + + /color-name/1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: false + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: false + + /colord/2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: false + + /colorette/2.0.19: + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + dev: false + + /combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + + /commander/2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: false + + /commander/7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: false + + /commander/8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: false + + /common-path-prefix/3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + dev: false + + /common-tags/1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: false + + /commondir/1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: false + + /compressible/2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /compression/1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /concat-map/0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: false + + /confusing-browser-globals/1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + dev: false + + /connect-history-api-fallback/2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} + dev: false + + /content-disposition/0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /content-type/1.0.4: + resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} + engines: {node: '>= 0.6'} + dev: false + + /convert-source-map/1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: false + + /cookie-signature/1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: false + + /cookie/0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + dev: false + + /core-js-compat/3.26.0: + resolution: {integrity: sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==} + dependencies: + browserslist: 4.21.4 + dev: false + + /core-js-pure/3.26.0: + resolution: {integrity: sha512-LiN6fylpVBVwT8twhhluD9TzXmZQQsr2I2eIKtWNbZI1XMfBT7CV18itaN6RA7EtQd/SDdRx/wzvAShX2HvhQA==} + requiresBuild: true + dev: false + + /core-js/3.26.0: + resolution: {integrity: sha512-+DkDrhoR4Y0PxDz6rurahuB+I45OsEUv8E1maPTB6OuHRohMMcznBq9TMpdpDMm/hUPob/mJJS3PqgbHpMTQgw==} + requiresBuild: true + dev: false + + /core-util-is/1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: false + + /cosmiconfig/6.0.0: + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: false + + /cosmiconfig/7.0.1: + resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: false + + /cross-spawn/7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: false + + /crypto-random-string/2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + dev: false + + /css-blank-pseudo/3.0.3_postcss@8.4.19: + resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /css-declaration-sorter/6.3.1_postcss@8.4.19: + resolution: {integrity: sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: 8.4.19 + dev: false + + /css-has-pseudo/3.0.4_postcss@8.4.19: + resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /css-loader/6.7.1_webpack@5.75.0: + resolution: {integrity: sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + icss-utils: 5.1.0_postcss@8.4.19 + postcss: 8.4.19 + postcss-modules-extract-imports: 3.0.0_postcss@8.4.19 + postcss-modules-local-by-default: 4.0.0_postcss@8.4.19 + postcss-modules-scope: 3.0.0_postcss@8.4.19 + postcss-modules-values: 4.0.0_postcss@8.4.19 + postcss-value-parser: 4.2.0 + semver: 7.3.8 + webpack: 5.75.0 + dev: false + + /css-minimizer-webpack-plugin/3.4.1_webpack@5.75.0: + resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + '@parcel/css': '*' + clean-css: '*' + csso: '*' + esbuild: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@parcel/css': + optional: true + clean-css: + optional: true + csso: + optional: true + esbuild: + optional: true + dependencies: + cssnano: 5.1.14_postcss@8.4.19 + jest-worker: 27.5.1 + postcss: 8.4.19 + schema-utils: 4.0.0 + serialize-javascript: 6.0.0 + source-map: 0.6.1 + webpack: 5.75.0 + dev: false + + /css-prefers-color-scheme/6.0.3_postcss@8.4.19: + resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} + engines: {node: ^12 || ^14 || >=16} + hasBin: true + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.19 + dev: false + + /css-select-base-adapter/0.1.1: + resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} + dev: false + + /css-select/2.1.0: + resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} + dependencies: + boolbase: 1.0.0 + css-what: 3.4.2 + domutils: 1.7.0 + nth-check: 1.0.2 + dev: false + + /css-select/4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + dev: false + + /css-tree/1.0.0-alpha.37: + resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.4 + source-map: 0.6.1 + dev: false + + /css-tree/1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: false + + /css-what/3.4.2: + resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} + engines: {node: '>= 6'} + dev: false + + /css-what/6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: false + + /cssdb/7.1.0: + resolution: {integrity: sha512-Sd99PrFgx28ez4GHu8yoQIufc/70h9oYowDf4EjeIKi8mac9whxRjhM3IaMr6EllP6KKKWtJrMfN6C7T9tIWvQ==} + dev: false + + /cssesc/3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /cssnano-preset-default/5.2.13_postcss@8.4.19: + resolution: {integrity: sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-declaration-sorter: 6.3.1_postcss@8.4.19 + cssnano-utils: 3.1.0_postcss@8.4.19 + postcss: 8.4.19 + postcss-calc: 8.2.4_postcss@8.4.19 + postcss-colormin: 5.3.0_postcss@8.4.19 + postcss-convert-values: 5.1.3_postcss@8.4.19 + postcss-discard-comments: 5.1.2_postcss@8.4.19 + postcss-discard-duplicates: 5.1.0_postcss@8.4.19 + postcss-discard-empty: 5.1.1_postcss@8.4.19 + postcss-discard-overridden: 5.1.0_postcss@8.4.19 + postcss-merge-longhand: 5.1.7_postcss@8.4.19 + postcss-merge-rules: 5.1.3_postcss@8.4.19 + postcss-minify-font-values: 5.1.0_postcss@8.4.19 + postcss-minify-gradients: 5.1.1_postcss@8.4.19 + postcss-minify-params: 5.1.4_postcss@8.4.19 + postcss-minify-selectors: 5.2.1_postcss@8.4.19 + postcss-normalize-charset: 5.1.0_postcss@8.4.19 + postcss-normalize-display-values: 5.1.0_postcss@8.4.19 + postcss-normalize-positions: 5.1.1_postcss@8.4.19 + postcss-normalize-repeat-style: 5.1.1_postcss@8.4.19 + postcss-normalize-string: 5.1.0_postcss@8.4.19 + postcss-normalize-timing-functions: 5.1.0_postcss@8.4.19 + postcss-normalize-unicode: 5.1.1_postcss@8.4.19 + postcss-normalize-url: 5.1.0_postcss@8.4.19 + postcss-normalize-whitespace: 5.1.1_postcss@8.4.19 + postcss-ordered-values: 5.1.3_postcss@8.4.19 + postcss-reduce-initial: 5.1.1_postcss@8.4.19 + postcss-reduce-transforms: 5.1.0_postcss@8.4.19 + postcss-svgo: 5.1.0_postcss@8.4.19 + postcss-unique-selectors: 5.1.1_postcss@8.4.19 + dev: false + + /cssnano-utils/3.1.0_postcss@8.4.19: + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + dev: false + + /cssnano/5.1.14_postcss@8.4.19: + resolution: {integrity: sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-preset-default: 5.2.13_postcss@8.4.19 + lilconfig: 2.0.6 + postcss: 8.4.19 + yaml: 1.10.2 + dev: false + + /csso/4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.3 + dev: false + + /cssom/0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + dev: false + + /cssom/0.4.4: + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + dev: false + + /cssstyle/2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + dependencies: + cssom: 0.3.8 + dev: false + + /damerau-levenshtein/1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: false + + /data-urls/2.0.0: + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + engines: {node: '>=10'} + dependencies: + abab: 2.0.6 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + dev: false + + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + + /debug/3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: false + + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: false + + /decimal.js/10.4.2: + resolution: {integrity: sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==} + dev: false + + /dedent/0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dev: false + + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: false + + /deepmerge/4.2.2: + resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + engines: {node: '>=0.10.0'} + dev: false + + /default-gateway/6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} + dependencies: + execa: 5.1.1 + dev: false + + /define-lazy-prop/2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: false + + /define-properties/1.1.4: + resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} + engines: {node: '>= 0.4'} + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: false + + /defined/1.0.1: + resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} + dev: false + + /delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /depd/1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + dev: false + + /depd/2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false + + /destroy/1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false + + /detect-newline/3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + dev: false + + /detect-node/2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: false + + /detect-port-alt/1.1.6: + resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} + engines: {node: '>= 4.2.1'} + hasBin: true + dependencies: + address: 1.2.1 + debug: 2.6.9 + transitivePeerDependencies: + - supports-color + dev: false + + /detective/5.2.1: + resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} + engines: {node: '>=0.8.0'} + hasBin: true + dependencies: + acorn-node: 1.8.2 + defined: 1.0.1 + minimist: 1.2.7 + dev: false + + /didyoumean/1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: false + + /diff-sequences/27.5.1: + resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: false + + /dir-glob/3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: false + + /dlv/1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: false + + /dns-equal/1.0.0: + resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} + dev: false + + /dns-packet/5.4.0: + resolution: {integrity: sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==} + engines: {node: '>=6'} + dependencies: + '@leichtgewicht/ip-codec': 2.0.4 + dev: false + + /doctrine/2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: false + + /doctrine/3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: false + + /dom-converter/0.2.0: + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} + dependencies: + utila: 0.4.0 + dev: false + + /dom-serializer/0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + dependencies: + domelementtype: 2.3.0 + entities: 2.2.0 + dev: false + + /dom-serializer/1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + dev: false + + /domelementtype/1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + dev: false + + /domelementtype/2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: false + + /domexception/2.0.1: + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + engines: {node: '>=8'} + dependencies: + webidl-conversions: 5.0.0 + dev: false + + /domhandler/4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: false + + /domutils/1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + dev: false + + /domutils/2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + dev: false + + /dot-case/3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.4.1 + dev: false + + /dotenv-expand/5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + dev: false + + /dotenv/10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} + dev: false + + /duplexer/0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: false + + /ee-first/1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false + + /ejs/3.1.8: + resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.5 + dev: false + + /electron-to-chromium/1.4.284: + resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} + dev: false + + /emittery/0.10.2: + resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} + engines: {node: '>=12'} + dev: false + + /emittery/0.8.1: + resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} + engines: {node: '>=10'} + dev: false + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: false + + /emoji-regex/9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: false + + /emojis-list/3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: false + + /encodeurl/1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: false + + /enhanced-resolve/5.10.0: + resolution: {integrity: sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.10 + tapable: 2.2.1 + dev: false + + /entities/2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: false + + /error-ex/1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: false + + /error-stack-parser/2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + dependencies: + stackframe: 1.3.4 + dev: false + + /es-abstract/1.20.4: + resolution: {integrity: sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==} + engines: {node: '>= 0.4'} + dependencies: + 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.3 + 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.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-weakref: 1.0.2 + object-inspect: 1.12.2 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.4.3 + safe-regex-test: 1.0.0 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + unbox-primitive: 1.0.2 + dev: false + + /es-array-method-boxes-properly/1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: false + + /es-module-lexer/0.9.3: + resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} + dev: false + + /es-shim-unscopables/1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + dependencies: + has: 1.0.3 + dev: false + + /es-to-primitive/1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: false + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: false + + /escape-html/1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: false + + /escape-string-regexp/2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + dev: false + + /escape-string-regexp/4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: false + + /escodegen/2.0.0: + resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + dev: false + + /eslint-config-react-app/7.0.1_eslint@8.27.0+jest@27.5.1: + resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} + engines: {node: '>=14.0.0'} + peerDependencies: + eslint: ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/core': 7.20.2 + '@babel/eslint-parser': 7.19.1_qn3xnppexigqgidmp7nt2fn2oy + '@rushstack/eslint-patch': 1.2.0 + '@typescript-eslint/eslint-plugin': 5.42.1_jnohwm7eexgw7uduhweedcbnpe + '@typescript-eslint/parser': 5.42.1_eslint@8.27.0 + babel-preset-react-app: 10.0.1 + confusing-browser-globals: 1.0.11 + eslint: 8.27.0 + eslint-plugin-flowtype: 8.0.3_eslint@8.27.0 + eslint-plugin-import: 2.26.0_jnohwm7eexgw7uduhweedcbnpe + eslint-plugin-jest: 25.7.0_6gbqo5dn22c6l3hmvpvlgj4uym + eslint-plugin-jsx-a11y: 6.6.1_eslint@8.27.0 + eslint-plugin-react: 7.31.10_eslint@8.27.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.27.0 + eslint-plugin-testing-library: 5.9.1_eslint@8.27.0 + transitivePeerDependencies: + - '@babel/plugin-syntax-flow' + - '@babel/plugin-transform-react-jsx' + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - jest + - supports-color + dev: false + + /eslint-import-resolver-node/0.3.6: + resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} + dependencies: + debug: 3.2.7 + resolve: 1.22.1 + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-module-utils/2.7.4_l3rkqmr6ujglf4zsfjyz5e7jai: + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.42.1_eslint@8.27.0 + debug: 3.2.7 + eslint: 8.27.0 + eslint-import-resolver-node: 0.3.6 + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-plugin-flowtype/8.0.3_eslint@8.27.0: + resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@babel/plugin-syntax-flow': ^7.14.5 + '@babel/plugin-transform-react-jsx': ^7.14.9 + eslint: ^8.1.0 + dependencies: + eslint: 8.27.0 + lodash: 4.17.21 + string-natural-compare: 3.0.1 + dev: false + + /eslint-plugin-import/2.26.0_jnohwm7eexgw7uduhweedcbnpe: + resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.42.1_eslint@8.27.0 + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + debug: 2.6.9 + doctrine: 2.1.0 + eslint: 8.27.0 + eslint-import-resolver-node: 0.3.6 + eslint-module-utils: 2.7.4_l3rkqmr6ujglf4zsfjyz5e7jai + has: 1.0.3 + is-core-module: 2.11.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.6 + resolve: 1.22.1 + tsconfig-paths: 3.14.1 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: false + + /eslint-plugin-jest/25.7.0_6gbqo5dn22c6l3hmvpvlgj4uym: + resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 5.42.1_jnohwm7eexgw7uduhweedcbnpe + '@typescript-eslint/experimental-utils': 5.42.1_eslint@8.27.0 + eslint: 8.27.0 + jest: 27.5.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /eslint-plugin-jsx-a11y/6.6.1_eslint@8.27.0: + resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.20.1 + aria-query: 4.2.2 + array-includes: 3.1.6 + ast-types-flow: 0.0.7 + axe-core: 4.5.1 + axobject-query: 2.2.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.27.0 + has: 1.0.3 + jsx-ast-utils: 3.3.3 + language-tags: 1.0.5 + minimatch: 3.1.2 + semver: 6.3.0 + dev: false + + /eslint-plugin-react-hooks/4.6.0_eslint@8.27.0: + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.27.0 + dev: false + + /eslint-plugin-react/7.31.10_eslint@8.27.0: + resolution: {integrity: sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 + doctrine: 2.1.0 + eslint: 8.27.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.3 + minimatch: 3.1.2 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + object.hasown: 1.1.2 + object.values: 1.1.6 + prop-types: 15.8.1 + resolve: 2.0.0-next.4 + semver: 6.3.0 + string.prototype.matchall: 4.0.8 + dev: false + + /eslint-plugin-testing-library/5.9.1_eslint@8.27.0: + resolution: {integrity: sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@typescript-eslint/utils': 5.42.1_eslint@8.27.0 + eslint: 8.27.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /eslint-scope/5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: false + + /eslint-scope/7.1.1: + resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: false + + /eslint-utils/3.0.0_eslint@8.27.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.27.0 + eslint-visitor-keys: 2.1.0 + dev: false + + /eslint-visitor-keys/2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: false + + /eslint-visitor-keys/3.3.0: + resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: false + + /eslint-webpack-plugin/3.2.0_5mastfusvewdnfotkrq73j4uja: + resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + webpack: ^5.0.0 + dependencies: + '@types/eslint': 8.4.10 + eslint: 8.27.0 + jest-worker: 28.1.3 + micromatch: 4.0.5 + normalize-path: 3.0.0 + schema-utils: 4.0.0 + webpack: 5.75.0 + dev: false + + /eslint/8.27.0: + resolution: {integrity: sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint/eslintrc': 1.3.3 + '@humanwhocodes/config-array': 0.11.7 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.1.1 + eslint-utils: 3.0.0_eslint@8.27.0 + eslint-visitor-keys: 3.3.0 + espree: 9.4.1 + esquery: 1.4.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.17.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.0 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-sdsl: 4.1.5 + 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.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /espree/9.4.1: + resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.8.1 + acorn-jsx: 5.3.2_acorn@8.8.1 + eslint-visitor-keys: 3.3.0 + dev: false + + /esprima/4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /esquery/1.4.0: + resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: false + + /esrecurse/4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: false + + /estraverse/4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: false + + /estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: false + + /estree-walker/1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: false + + /esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: false + + /etag/1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: false + + /eventemitter3/4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: false + + /events/3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: false + + /execa/5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: false + + /exit/0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + dev: false + + /expect/27.5.1: + resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + jest-get-type: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + dev: false + + /express/4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: 1.0.4 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: false + + /fast-glob/3.2.12: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: false + + /fast-json-stable-stringify/2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: false + + /fast-levenshtein/2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: false + + /fastq/1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + dependencies: + reusify: 1.0.4 + dev: false + + /faye-websocket/0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + dependencies: + websocket-driver: 0.7.4 + dev: false + + /fb-watchman/2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + dependencies: + bser: 2.1.1 + dev: false + + /file-entry-cache/6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: false + + /file-loader/6.2.0_webpack@5.75.0: + resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.1.1 + webpack: 5.75.0 + dev: false + + /filelist/1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.0 + dev: false + + /filesize/8.0.7: + resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} + engines: {node: '>= 0.4.0'} + dev: false + + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: false + + /finalhandler/1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /find-cache-dir/3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: false + + /find-up/3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + dev: false + + /find-up/4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: false + + /find-up/5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: false + + /flat-cache/3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.7 + rimraf: 3.0.2 + dev: false + + /flatted/3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + dev: false + + /follow-redirects/1.15.2: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /fork-ts-checker-webpack-plugin/6.5.2_5mastfusvewdnfotkrq73j4uja: + resolution: {integrity: sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==} + engines: {node: '>=10', yarn: '>=1.0.0'} + peerDependencies: + eslint: '>= 6' + typescript: '>= 2.7' + vue-template-compiler: '*' + webpack: '>= 4' + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true + dependencies: + '@babel/code-frame': 7.18.6 + '@types/json-schema': 7.0.11 + chalk: 4.1.2 + chokidar: 3.5.3 + cosmiconfig: 6.0.0 + deepmerge: 4.2.2 + eslint: 8.27.0 + fs-extra: 9.1.0 + glob: 7.2.3 + memfs: 3.4.10 + minimatch: 3.1.2 + schema-utils: 2.7.0 + semver: 7.3.8 + tapable: 1.1.3 + webpack: 5.75.0 + dev: false + + /form-data/3.0.1: + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /forwarded/0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: false + + /fraction.js/4.2.0: + resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} + dev: false + + /fresh/0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: false + + /fs-extra/10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.10 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: false + + /fs-extra/9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.10 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: false + + /fs-monkey/1.0.3: + resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} + dev: false + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: false + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: false + + /function.prototype.name/1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.4 + functions-have-names: 1.2.3 + dev: false + + /functions-have-names/1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: false + + /gensync/1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: false + + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: false + + /get-intrinsic/1.1.3: + resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.3 + dev: false + + /get-own-enumerable-property-symbols/3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + dev: false + + /get-package-type/0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: false + + /get-stream/6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: false + + /get-symbol-description/1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.3 + dev: false + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: false + + /glob-parent/6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: false + + /glob-to-regexp/0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: false + + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + + /global-modules/2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + dependencies: + global-prefix: 3.0.0 + dev: false + + /global-prefix/3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + dev: false + + /globals/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: false + + /globals/13.17.0: + resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: false + + /globby/11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.12 + ignore: 5.2.0 + merge2: 1.4.1 + slash: 3.0.0 + dev: false + + /graceful-fs/4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: false + + /grapheme-splitter/1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: false + + /gzip-size/6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + dependencies: + duplexer: 0.1.2 + dev: false + + /handle-thing/2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + dev: false + + /harmony-reflect/1.6.2: + resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} + dev: false + + /has-bigints/1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: false + + /has-flag/3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: false + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: false + + /has-property-descriptors/1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.1.3 + dev: false + + /has-symbols/1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: false + + /has-tostringtag/1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: false + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: false + + /he/1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: false + + /hoopy/0.1.4: + resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} + engines: {node: '>= 6.0.0'} + dev: false + + /hpack.js/2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + dependencies: + inherits: 2.0.4 + obuf: 1.1.2 + readable-stream: 2.3.7 + wbuf: 1.7.3 + dev: false + + /html-encoding-sniffer/2.0.1: + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + engines: {node: '>=10'} + dependencies: + whatwg-encoding: 1.0.5 + dev: false + + /html-entities/2.3.3: + resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} + dev: false + + /html-escaper/2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: false + + /html-minifier-terser/6.1.0: + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} + engines: {node: '>=12'} + hasBin: true + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.1 + commander: 8.3.0 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.15.1 + dev: false + + /html-webpack-plugin/5.5.0_webpack@5.75.0: + resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==} + engines: {node: '>=10.13.0'} + peerDependencies: + webpack: ^5.20.0 + dependencies: + '@types/html-minifier-terser': 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.17.21 + pretty-error: 4.0.0 + tapable: 2.2.1 + webpack: 5.75.0 + dev: false + + /htmlparser2/6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 2.2.0 + dev: false + + /http-deceiver/1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + dev: false + + /http-errors/1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + dev: false + + /http-errors/2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + + /http-parser-js/0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + dev: false + + /http-proxy-agent/4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /http-proxy-middleware/2.0.6_@types+express@4.17.14: + resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + dependencies: + '@types/express': 4.17.14 + '@types/http-proxy': 1.17.9 + http-proxy: 1.18.1 + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.5 + transitivePeerDependencies: + - debug + dev: false + + /http-proxy/1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.2 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + dev: false + + /https-proxy-agent/5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /human-signals/2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: false + + /iconv-lite/0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /iconv-lite/0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /icss-utils/5.1.0_postcss@8.4.19: + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.19 + dev: false + + /idb/7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + dev: false + + /identity-obj-proxy/3.0.0: + resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} + engines: {node: '>=4'} + dependencies: + harmony-reflect: 1.6.2 + dev: false + + /ignore/5.2.0: + resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + engines: {node: '>= 4'} + dev: false + + /immer/9.0.16: + resolution: {integrity: sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==} + dev: false + + /import-fresh/3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: false + + /import-local/3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: false + + /imurmurhash/0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: false + + /inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: false + + /inherits/2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + dev: false + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: false + + /ini/1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: false + + /internal-slot/1.0.3: + resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.1.3 + has: 1.0.3 + side-channel: 1.0.4 + dev: false + + /ipaddr.js/1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: false + + /ipaddr.js/2.0.1: + resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==} + engines: {node: '>= 10'} + dev: false + + /is-arrayish/0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: false + + /is-bigint/1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: false + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: false + + /is-boolean-object/1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: false + + /is-callable/1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: false + + /is-core-module/2.11.0: + resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} + dependencies: + has: 1.0.3 + dev: false + + /is-date-object/1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-docker/2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: false + + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: false + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: false + + /is-generator-fn/2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + dev: false + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: false + + /is-module/1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: false + + /is-negative-zero/2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: false + + /is-number-object/1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: false + + /is-obj/1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + dev: false + + /is-path-inside/3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: false + + /is-plain-obj/3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + dev: false + + /is-potential-custom-element-name/1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: false + + /is-regex/1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: false + + /is-regexp/1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + dev: false + + /is-root/2.1.0: + resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} + engines: {node: '>=6'} + dev: false + + /is-shared-array-buffer/1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.2 + dev: false + + /is-stream/2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: false + + /is-string/1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: false + + /is-symbol/1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: false + + /is-typedarray/1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: false + + /is-weakref/1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.2 + dev: false + + /is-wsl/2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: false + + /isarray/1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: false + + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: false + + /istanbul-lib-coverage/3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} + dev: false + + /istanbul-lib-instrument/5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.20.2 + '@babel/parser': 7.20.3 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /istanbul-lib-report/3.0.0: + resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} + engines: {node: '>=8'} + dependencies: + istanbul-lib-coverage: 3.2.0 + make-dir: 3.1.0 + supports-color: 7.2.0 + dev: false + + /istanbul-lib-source-maps/4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + dependencies: + debug: 4.3.4 + istanbul-lib-coverage: 3.2.0 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: false + + /istanbul-reports/3.1.5: + resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.0 + dev: false + + /jake/10.8.5: + resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.4 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: false + + /jest-changed-files/27.5.1: + resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + execa: 5.1.1 + throat: 6.0.1 + dev: false + + /jest-circus/27.5.1: + resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 18.11.9 + chalk: 4.1.2 + co: 4.6.0 + dedent: 0.7.0 + expect: 27.5.1 + is-generator-fn: 2.1.0 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 + throat: 6.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /jest-cli/27.5.1: + resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.10 + import-local: 3.1.0 + jest-config: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + prompts: 2.4.2 + yargs: 16.2.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: false + + /jest-config/27.5.1: + resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + ts-node: '>=9.0.0' + peerDependenciesMeta: + ts-node: + optional: true + dependencies: + '@babel/core': 7.20.2 + '@jest/test-sequencer': 27.5.1 + '@jest/types': 27.5.1 + babel-jest: 27.5.1_@babel+core@7.20.2 + chalk: 4.1.2 + ci-info: 3.5.0 + deepmerge: 4.2.2 + glob: 7.2.3 + graceful-fs: 4.2.10 + jest-circus: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-get-type: 27.5.1 + jest-jasmine2: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runner: 27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 27.5.1 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: false + + /jest-diff/27.5.1: + resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + dev: false + + /jest-docblock/27.5.1: + resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + detect-newline: 3.1.0 + dev: false + + /jest-each/27.5.1: + resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + chalk: 4.1.2 + jest-get-type: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + dev: false + + /jest-environment-jsdom/27.5.1: + resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 18.11.9 + jest-mock: 27.5.1 + jest-util: 27.5.1 + jsdom: 16.7.0 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: false + + /jest-environment-node/27.5.1: + resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 18.11.9 + jest-mock: 27.5.1 + jest-util: 27.5.1 + dev: false + + /jest-get-type/27.5.1: + resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: false + + /jest-haste-map/27.5.1: + resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/graceful-fs': 4.1.5 + '@types/node': 18.11.9 + anymatch: 3.1.2 + fb-watchman: 2.0.2 + graceful-fs: 4.2.10 + jest-regex-util: 27.5.1 + jest-serializer: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + micromatch: 4.0.5 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.2 + dev: false + + /jest-jasmine2/27.5.1: + resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 18.11.9 + chalk: 4.1.2 + co: 4.6.0 + expect: 27.5.1 + is-generator-fn: 2.1.0 + jest-each: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-runtime: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + pretty-format: 27.5.1 + throat: 6.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /jest-leak-detector/27.5.1: + resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + dev: false + + /jest-matcher-utils/27.5.1: + resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + pretty-format: 27.5.1 + dev: false + + /jest-message-util/27.5.1: + resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/code-frame': 7.18.6 + '@jest/types': 27.5.1 + '@types/stack-utils': 2.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.10 + micromatch: 4.0.5 + pretty-format: 27.5.1 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: false + + /jest-message-util/28.1.3: + resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@babel/code-frame': 7.18.6 + '@jest/types': 28.1.3 + '@types/stack-utils': 2.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.10 + micromatch: 4.0.5 + pretty-format: 28.1.3 + slash: 3.0.0 + stack-utils: 2.0.6 + dev: false + + /jest-mock/27.5.1: + resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 18.11.9 + dev: false + + /jest-pnp-resolver/1.2.2_jest-resolve@27.5.1: + resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + dependencies: + jest-resolve: 27.5.1 + dev: false + + /jest-regex-util/27.5.1: + resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: false + + /jest-regex-util/28.0.2: + resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dev: false + + /jest-resolve-dependencies/27.5.1: + resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + jest-regex-util: 27.5.1 + jest-snapshot: 27.5.1 + transitivePeerDependencies: + - supports-color + dev: false + + /jest-resolve/27.5.1: + resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + chalk: 4.1.2 + graceful-fs: 4.2.10 + jest-haste-map: 27.5.1 + jest-pnp-resolver: 1.2.2_jest-resolve@27.5.1 + jest-util: 27.5.1 + jest-validate: 27.5.1 + resolve: 1.22.1 + resolve.exports: 1.1.0 + slash: 3.0.0 + dev: false + + /jest-runner/27.5.1: + resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/console': 27.5.1 + '@jest/environment': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 18.11.9 + chalk: 4.1.2 + emittery: 0.8.1 + graceful-fs: 4.2.10 + jest-docblock: 27.5.1 + jest-environment-jsdom: 27.5.1 + jest-environment-node: 27.5.1 + jest-haste-map: 27.5.1 + jest-leak-detector: 27.5.1 + jest-message-util: 27.5.1 + jest-resolve: 27.5.1 + jest-runtime: 27.5.1 + jest-util: 27.5.1 + jest-worker: 27.5.1 + source-map-support: 0.5.21 + throat: 6.0.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - utf-8-validate + dev: false + + /jest-runtime/27.5.1: + resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.5.1 + '@jest/fake-timers': 27.5.1 + '@jest/globals': 27.5.1 + '@jest/source-map': 27.5.1 + '@jest/test-result': 27.5.1 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + chalk: 4.1.2 + cjs-module-lexer: 1.2.2 + collect-v8-coverage: 1.0.1 + execa: 5.1.1 + glob: 7.2.3 + graceful-fs: 4.2.10 + jest-haste-map: 27.5.1 + jest-message-util: 27.5.1 + jest-mock: 27.5.1 + jest-regex-util: 27.5.1 + jest-resolve: 27.5.1 + jest-snapshot: 27.5.1 + jest-util: 27.5.1 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /jest-serializer/27.5.1: + resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/node': 18.11.9 + graceful-fs: 4.2.10 + dev: false + + /jest-snapshot/27.5.1: + resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.20.2 + '@babel/generator': 7.20.4 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.2 + '@babel/traverse': 7.20.1 + '@babel/types': 7.20.2 + '@jest/transform': 27.5.1 + '@jest/types': 27.5.1 + '@types/babel__traverse': 7.18.2 + '@types/prettier': 2.7.1 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.2 + chalk: 4.1.2 + expect: 27.5.1 + graceful-fs: 4.2.10 + jest-diff: 27.5.1 + jest-get-type: 27.5.1 + jest-haste-map: 27.5.1 + jest-matcher-utils: 27.5.1 + jest-message-util: 27.5.1 + jest-util: 27.5.1 + natural-compare: 1.4.0 + pretty-format: 27.5.1 + semver: 7.3.8 + transitivePeerDependencies: + - supports-color + dev: false + + /jest-util/27.5.1: + resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + '@types/node': 18.11.9 + chalk: 4.1.2 + ci-info: 3.5.0 + graceful-fs: 4.2.10 + picomatch: 2.3.1 + dev: false + + /jest-util/28.1.3: + resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/types': 28.1.3 + '@types/node': 18.11.9 + chalk: 4.1.2 + ci-info: 3.5.0 + graceful-fs: 4.2.10 + picomatch: 2.3.1 + dev: false + + /jest-validate/27.5.1: + resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.5.1 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 27.5.1 + leven: 3.1.0 + pretty-format: 27.5.1 + dev: false + + /jest-watch-typeahead/1.1.0_jest@27.5.1: + resolution: {integrity: sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + jest: ^27.0.0 || ^28.0.0 + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest: 27.5.1 + jest-regex-util: 28.0.2 + jest-watcher: 28.1.3 + slash: 4.0.0 + string-length: 5.0.1 + strip-ansi: 7.0.1 + dev: false + + /jest-watcher/27.5.1: + resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/test-result': 27.5.1 + '@jest/types': 27.5.1 + '@types/node': 18.11.9 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + jest-util: 27.5.1 + string-length: 4.0.2 + dev: false + + /jest-watcher/28.1.3: + resolution: {integrity: sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/test-result': 28.1.3 + '@jest/types': 28.1.3 + '@types/node': 18.11.9 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.10.2 + jest-util: 28.1.3 + string-length: 4.0.2 + dev: false + + /jest-worker/26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 18.11.9 + merge-stream: 2.0.0 + supports-color: 7.2.0 + dev: false + + /jest-worker/27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 18.11.9 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: false + + /jest-worker/28.1.3: + resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@types/node': 18.11.9 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: false + + /jest/27.5.1: + resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + dependencies: + '@jest/core': 27.5.1 + import-local: 3.1.0 + jest-cli: 27.5.1 + transitivePeerDependencies: + - bufferutil + - canvas + - supports-color + - ts-node + - utf-8-validate + dev: false + + /js-sdsl/4.1.5: + resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==} + dev: false + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: false + + /js-yaml/3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: false + + /js-yaml/4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: false + + /jsdom/16.7.0: + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + engines: {node: '>=10'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + abab: 2.0.6 + acorn: 8.8.1 + acorn-globals: 6.0.0 + cssom: 0.4.4 + cssstyle: 2.3.0 + data-urls: 2.0.0 + decimal.js: 10.4.2 + domexception: 2.0.1 + escodegen: 2.0.0 + form-data: 3.0.1 + html-encoding-sniffer: 2.0.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.2 + parse5: 6.0.1 + saxes: 5.0.1 + symbol-tree: 3.2.4 + tough-cookie: 4.1.2 + w3c-hr-time: 1.0.2 + w3c-xmlserializer: 2.0.0 + webidl-conversions: 6.1.0 + whatwg-encoding: 1.0.5 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + ws: 7.5.9 + xml-name-validator: 3.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /jsesc/0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: false + + /jsesc/2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /json-parse-even-better-errors/2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: false + + /json-schema-traverse/0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: false + + /json-schema-traverse/1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: false + + /json-schema/0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + dev: false + + /json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: false + + /json5/1.0.1: + resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} + hasBin: true + dependencies: + minimist: 1.2.7 + dev: false + + /json5/2.2.1: + resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} + engines: {node: '>=6'} + hasBin: true + dev: false + + /jsonfile/6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.10 + dev: false + + /jsonpointer/5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + dev: false + + /jsx-ast-utils/3.3.3: + resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.6 + object.assign: 4.1.4 + dev: false + + /kind-of/6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: false + + /kleur/3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: false + + /klona/2.0.5: + resolution: {integrity: sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==} + engines: {node: '>= 8'} + dev: false + + /language-subtag-registry/0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + dev: false + + /language-tags/1.0.5: + resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} + dependencies: + language-subtag-registry: 0.3.22 + dev: false + + /leven/3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: false + + /levn/0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + dev: false + + /levn/0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: false + + /lilconfig/2.0.6: + resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} + engines: {node: '>=10'} + dev: false + + /lines-and-columns/1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: false + + /loader-runner/4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + dev: false + + /loader-utils/2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.1 + dev: false + + /loader-utils/3.2.1: + resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} + engines: {node: '>= 12.13.0'} + dev: false + + /locate-path/3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: false + + /locate-path/5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: false + + /locate-path/6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: false + + /lodash.debounce/4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: false + + /lodash.memoize/4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: false + + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: false + + /lodash.sortby/4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: false + + /lodash.uniq/4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: false + + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false + + /loose-envify/1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + + /lower-case/2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.4.1 + dev: false + + /lru-cache/6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: false + + /magic-string/0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + dev: false + + /make-dir/3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.0 + dev: false + + /makeerror/1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + dependencies: + tmpl: 1.0.5 + dev: false + + /mdn-data/2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: false + + /mdn-data/2.0.4: + resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} + dev: false + + /media-typer/0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: false + + /memfs/3.4.10: + resolution: {integrity: sha512-0bCUP+L79P4am30yP1msPzApwuMQG23TjwlwdHeEV5MxioDR1a0AgB0T9FfggU52eJuDCq8WVwb5ekznFyWiTQ==} + engines: {node: '>= 4.0.0'} + dependencies: + fs-monkey: 1.0.3 + dev: false + + /merge-descriptors/1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + dev: false + + /merge-stream/2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: false + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: false + + /methods/1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: false + + /micromatch/4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: false + + /mime-db/1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: false + + /mime-types/2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /mime/1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /mimic-fn/2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: false + + /mini-css-extract-plugin/2.6.1_webpack@5.75.0: + resolution: {integrity: sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + schema-utils: 4.0.0 + webpack: 5.75.0 + dev: false + + /minimalistic-assert/1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: false + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: false + + /minimatch/5.1.0: + resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: false + + /minimist/1.2.7: + resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + dev: false + + /mkdirp/0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.7 + dev: false + + /ms/2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: false + + /ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: false + + /multicast-dns/7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true + dependencies: + dns-packet: 5.4.0 + thunky: 1.1.0 + dev: false + + /nanoid/3.3.4: + resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: false + + /natural-compare-lite/1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: false + + /natural-compare/1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: false + + /negotiator/0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false + + /neo-async/2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: false + + /no-case/3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.4.1 + dev: false + + /node-forge/1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + dev: false + + /node-int64/0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + dev: false + + /node-releases/2.0.6: + resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + dev: false + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: false + + /normalize-range/0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: false + + /normalize-url/6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + dev: false + + /npm-run-path/4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: false + + /nth-check/1.0.2: + resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} + dependencies: + boolbase: 1.0.0 + dev: false + + /nth-check/2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: false + + /nwsapi/2.2.2: + resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} + dev: false + + /object-assign/4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: false + + /object-hash/3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: false + + /object-inspect/1.12.2: + resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} + dev: false + + /object-keys/1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: false + + /object.assign/4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: false + + /object.entries/1.1.6: + resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.4 + dev: false + + /object.fromentries/2.0.6: + resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.4 + dev: false + + /object.getownpropertydescriptors/2.1.5: + resolution: {integrity: sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==} + engines: {node: '>= 0.8'} + dependencies: + array.prototype.reduce: 1.0.5 + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.4 + dev: false + + /object.hasown/1.1.2: + resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} + dependencies: + define-properties: 1.1.4 + es-abstract: 1.20.4 + dev: false + + /object.values/1.1.6: + resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.4 + dev: false + + /obuf/1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + dev: false + + /on-finished/2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /on-headers/1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + dev: false + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: false + + /onetime/5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: false + + /open/8.4.0: + resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: false + + /optionator/0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.3 + dev: false + + /optionator/0.9.1: + resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.3 + dev: false + + /p-limit/2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: false + + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: false + + /p-locate/3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + dependencies: + p-limit: 2.3.0 + dev: false + + /p-locate/4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: false + + /p-locate/5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: false + + /p-retry/4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + dev: false + + /p-try/2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: false + + /param-case/3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + dependencies: + dot-case: 3.0.4 + tslib: 2.4.1 + dev: false + + /parent-module/1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: false + + /parse-json/5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.18.6 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: false + + /parse5/6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: false + + /parseurl/1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false + + /pascal-case/3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.4.1 + dev: false + + /path-exists/3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + dev: false + + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: false + + /path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: false + + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: false + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: false + + /path-to-regexp/0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + dev: false + + /path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: false + + /performance-now/2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + dev: false + + /picocolors/0.2.1: + resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} + dev: false + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: false + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: false + + /pify/2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: false + + /pirates/4.0.5: + resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} + engines: {node: '>= 6'} + dev: false + + /pkg-dir/4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: false + + /pkg-up/3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} + dependencies: + find-up: 3.0.0 + dev: false + + /postcss-attribute-case-insensitive/5.0.2_postcss@8.4.19: + resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /postcss-browser-comments/4.0.0_o3gvceo4mmkmipwqbduijhv2ui: + resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} + engines: {node: '>=8'} + peerDependencies: + browserslist: '>=4' + postcss: '>=8' + dependencies: + browserslist: 4.21.4 + postcss: 8.4.19 + dev: false + + /postcss-calc/8.2.4_postcss@8.4.19: + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + dependencies: + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-clamp/4.1.0_postcss@8.4.19: + resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} + engines: {node: '>=7.6.0'} + peerDependencies: + postcss: ^8.4.6 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-color-functional-notation/4.2.4_postcss@8.4.19: + resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-color-hex-alpha/8.0.4_postcss@8.4.19: + resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-color-rebeccapurple/7.1.1_postcss@8.4.19: + resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-colormin/5.3.0_postcss@8.4.19: + resolution: {integrity: sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.4 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-convert-values/5.1.3_postcss@8.4.19: + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.4 + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-custom-media/8.0.2_postcss@8.4.19: + resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-custom-properties/12.1.10_postcss@8.4.19: + resolution: {integrity: sha512-U3BHdgrYhCrwTVcByFHs9EOBoqcKq4Lf3kXwbTi4hhq0qWhl/pDWq2THbv/ICX/Fl9KqeHBb8OVrTf2OaYF07A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-custom-selectors/6.0.3_postcss@8.4.19: + resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.3 + dependencies: + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /postcss-dir-pseudo-class/6.0.5_postcss@8.4.19: + resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /postcss-discard-comments/5.1.2_postcss@8.4.19: + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + dev: false + + /postcss-discard-duplicates/5.1.0_postcss@8.4.19: + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + dev: false + + /postcss-discard-empty/5.1.1_postcss@8.4.19: + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + dev: false + + /postcss-discard-overridden/5.1.0_postcss@8.4.19: + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + dev: false + + /postcss-double-position-gradients/3.1.2_postcss@8.4.19: + resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-env-function/4.0.6_postcss@8.4.19: + resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-flexbugs-fixes/5.0.2_postcss@8.4.19: + resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} + peerDependencies: + postcss: ^8.1.4 + dependencies: + postcss: 8.4.19 + dev: false + + /postcss-focus-visible/6.0.4_postcss@8.4.19: + resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /postcss-focus-within/5.0.4_postcss@8.4.19: + resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /postcss-font-variant/5.0.0_postcss@8.4.19: + resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.19 + dev: false + + /postcss-gap-properties/3.0.5_postcss@8.4.19: + resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + dev: false + + /postcss-image-set-function/4.0.7_postcss@8.4.19: + resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-import/14.1.0_postcss@8.4.19: + resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.1 + dev: false + + /postcss-initial/4.0.1_postcss@8.4.19: + resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.19 + dev: false + + /postcss-js/4.0.0_postcss@8.4.19: + resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.3.3 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.19 + dev: false + + /postcss-lab-function/4.2.1_postcss@8.4.19: + resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-load-config/3.1.4_postcss@8.4.19: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.0.6 + postcss: 8.4.19 + yaml: 1.10.2 + dev: false + + /postcss-loader/6.2.1_upg3rk2kpasnbk27hkqapxaxfq: + resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + dependencies: + cosmiconfig: 7.0.1 + klona: 2.0.5 + postcss: 8.4.19 + semver: 7.3.8 + webpack: 5.75.0 + dev: false + + /postcss-logical/5.0.4_postcss@8.4.19: + resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.19 + dev: false + + /postcss-media-minmax/5.0.0_postcss@8.4.19: + resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.19 + dev: false + + /postcss-merge-longhand/5.1.7_postcss@8.4.19: + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1_postcss@8.4.19 + dev: false + + /postcss-merge-rules/5.1.3_postcss@8.4.19: + resolution: {integrity: sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.4 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0_postcss@8.4.19 + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /postcss-minify-font-values/5.1.0_postcss@8.4.19: + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-minify-gradients/5.1.1_postcss@8.4.19: + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0_postcss@8.4.19 + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-minify-params/5.1.4_postcss@8.4.19: + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.4 + cssnano-utils: 3.1.0_postcss@8.4.19 + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-minify-selectors/5.2.1_postcss@8.4.19: + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /postcss-modules-extract-imports/3.0.0_postcss@8.4.19: + resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.19 + dev: false + + /postcss-modules-local-by-default/4.0.0_postcss@8.4.19: + resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0_postcss@8.4.19 + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-modules-scope/3.0.0_postcss@8.4.19: + resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /postcss-modules-values/4.0.0_postcss@8.4.19: + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0_postcss@8.4.19 + postcss: 8.4.19 + dev: false + + /postcss-nested/6.0.0_postcss@8.4.19: + resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /postcss-nesting/10.2.0_postcss@8.4.19: + resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/selector-specificity': 2.0.2_45y636a2vqremknoajyxd5nkzy + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /postcss-normalize-charset/5.1.0_postcss@8.4.19: + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + dev: false + + /postcss-normalize-display-values/5.1.0_postcss@8.4.19: + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-positions/5.1.1_postcss@8.4.19: + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-repeat-style/5.1.1_postcss@8.4.19: + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-string/5.1.0_postcss@8.4.19: + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-timing-functions/5.1.0_postcss@8.4.19: + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-unicode/5.1.1_postcss@8.4.19: + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.4 + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-url/5.1.0_postcss@8.4.19: + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + normalize-url: 6.1.0 + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize-whitespace/5.1.1_postcss@8.4.19: + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-normalize/10.0.1_o3gvceo4mmkmipwqbduijhv2ui: + resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} + engines: {node: '>= 12'} + peerDependencies: + browserslist: '>= 4' + postcss: '>= 8' + dependencies: + '@csstools/normalize.css': 12.0.0 + browserslist: 4.21.4 + postcss: 8.4.19 + postcss-browser-comments: 4.0.0_o3gvceo4mmkmipwqbduijhv2ui + sanitize.css: 13.0.0 + dev: false + + /postcss-opacity-percentage/1.1.2: + resolution: {integrity: sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==} + engines: {node: ^12 || ^14 || >=16} + dev: false + + /postcss-ordered-values/5.1.3_postcss@8.4.19: + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 3.1.0_postcss@8.4.19 + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-overflow-shorthand/3.0.4_postcss@8.4.19: + resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-page-break/3.0.4_postcss@8.4.19: + resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} + peerDependencies: + postcss: ^8 + dependencies: + postcss: 8.4.19 + dev: false + + /postcss-place/7.0.5_postcss@8.4.19: + resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-preset-env/7.8.2_postcss@8.4.19: + resolution: {integrity: sha512-rSMUEaOCnovKnwc5LvBDHUDzpGP+nrUeWZGWt9M72fBvckCi45JmnJigUr4QG4zZeOHmOCNCZnd2LKDvP++ZuQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + '@csstools/postcss-cascade-layers': 1.1.1_postcss@8.4.19 + '@csstools/postcss-color-function': 1.1.1_postcss@8.4.19 + '@csstools/postcss-font-format-keywords': 1.0.1_postcss@8.4.19 + '@csstools/postcss-hwb-function': 1.0.2_postcss@8.4.19 + '@csstools/postcss-ic-unit': 1.0.1_postcss@8.4.19 + '@csstools/postcss-is-pseudo-class': 2.0.7_postcss@8.4.19 + '@csstools/postcss-nested-calc': 1.0.0_postcss@8.4.19 + '@csstools/postcss-normalize-display-values': 1.0.1_postcss@8.4.19 + '@csstools/postcss-oklab-function': 1.1.1_postcss@8.4.19 + '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 + '@csstools/postcss-stepped-value-functions': 1.0.1_postcss@8.4.19 + '@csstools/postcss-text-decoration-shorthand': 1.0.0_postcss@8.4.19 + '@csstools/postcss-trigonometric-functions': 1.0.2_postcss@8.4.19 + '@csstools/postcss-unset-value': 1.0.2_postcss@8.4.19 + autoprefixer: 10.4.13_postcss@8.4.19 + browserslist: 4.21.4 + css-blank-pseudo: 3.0.3_postcss@8.4.19 + css-has-pseudo: 3.0.4_postcss@8.4.19 + css-prefers-color-scheme: 6.0.3_postcss@8.4.19 + cssdb: 7.1.0 + postcss: 8.4.19 + postcss-attribute-case-insensitive: 5.0.2_postcss@8.4.19 + postcss-clamp: 4.1.0_postcss@8.4.19 + postcss-color-functional-notation: 4.2.4_postcss@8.4.19 + postcss-color-hex-alpha: 8.0.4_postcss@8.4.19 + postcss-color-rebeccapurple: 7.1.1_postcss@8.4.19 + postcss-custom-media: 8.0.2_postcss@8.4.19 + postcss-custom-properties: 12.1.10_postcss@8.4.19 + postcss-custom-selectors: 6.0.3_postcss@8.4.19 + postcss-dir-pseudo-class: 6.0.5_postcss@8.4.19 + postcss-double-position-gradients: 3.1.2_postcss@8.4.19 + postcss-env-function: 4.0.6_postcss@8.4.19 + postcss-focus-visible: 6.0.4_postcss@8.4.19 + postcss-focus-within: 5.0.4_postcss@8.4.19 + postcss-font-variant: 5.0.0_postcss@8.4.19 + postcss-gap-properties: 3.0.5_postcss@8.4.19 + postcss-image-set-function: 4.0.7_postcss@8.4.19 + postcss-initial: 4.0.1_postcss@8.4.19 + postcss-lab-function: 4.2.1_postcss@8.4.19 + postcss-logical: 5.0.4_postcss@8.4.19 + postcss-media-minmax: 5.0.0_postcss@8.4.19 + postcss-nesting: 10.2.0_postcss@8.4.19 + postcss-opacity-percentage: 1.1.2 + postcss-overflow-shorthand: 3.0.4_postcss@8.4.19 + postcss-page-break: 3.0.4_postcss@8.4.19 + postcss-place: 7.0.5_postcss@8.4.19 + postcss-pseudo-class-any-link: 7.1.6_postcss@8.4.19 + postcss-replace-overflow-wrap: 4.0.0_postcss@8.4.19 + postcss-selector-not: 6.0.1_postcss@8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-pseudo-class-any-link/7.1.6_postcss@8.4.19: + resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /postcss-reduce-initial/5.1.1_postcss@8.4.19: + resolution: {integrity: sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.4 + caniuse-api: 3.0.0 + postcss: 8.4.19 + dev: false + + /postcss-reduce-transforms/5.1.0_postcss@8.4.19: + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + dev: false + + /postcss-replace-overflow-wrap/4.0.0_postcss@8.4.19: + resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} + peerDependencies: + postcss: ^8.0.3 + dependencies: + postcss: 8.4.19 + dev: false + + /postcss-selector-not/6.0.1_postcss@8.4.19: + resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} + engines: {node: ^12 || ^14 || >=16} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /postcss-selector-parser/6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: false + + /postcss-svgo/5.1.0_postcss@8.4.19: + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + dev: false + + /postcss-unique-selectors/5.1.1_postcss@8.4.19: + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /postcss-value-parser/4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: false + + /postcss/7.0.39: + resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} + engines: {node: '>=6.0.0'} + dependencies: + picocolors: 0.2.1 + source-map: 0.6.1 + dev: false + + /postcss/8.4.19: + resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.4 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: false + + /prelude-ls/1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + dev: false + + /prelude-ls/1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: false + + /pretty-bytes/5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + dev: false + + /pretty-error/4.0.0: + resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} + dependencies: + lodash: 4.17.21 + renderkid: 3.0.0 + dev: false + + /pretty-format/27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + dev: false + + /pretty-format/28.1.3: + resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} + engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + dependencies: + '@jest/schemas': 28.1.3 + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: false + + /process-nextick-args/2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: false + + /promise/8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + dependencies: + asap: 2.0.6 + dev: false + + /prompts/2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: false + + /prop-types/15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: false + + /proxy-addr/2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: false + + /psl/1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: false + + /punycode/2.1.1: + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} + dev: false + + /q/1.5.1: + resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + dev: false + + /qs/6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: false + + /querystringify/2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: false + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: false + + /quick-lru/5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: false + + /raf/3.4.1: + resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + dependencies: + performance-now: 2.1.0 + dev: false + + /randombytes/2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /range-parser/1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + + /raw-body/2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + + /react-app-polyfill/3.0.0: + resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} + engines: {node: '>=14'} + dependencies: + core-js: 3.26.0 + object-assign: 4.1.1 + promise: 8.3.0 + raf: 3.4.1 + regenerator-runtime: 0.13.10 + whatwg-fetch: 3.6.2 + dev: false + + /react-dev-utils/12.0.1_5mastfusvewdnfotkrq73j4uja: + resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=2.7' + webpack: '>=4' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/code-frame': 7.18.6 + address: 1.2.1 + browserslist: 4.21.4 + chalk: 4.1.2 + cross-spawn: 7.0.3 + detect-port-alt: 1.1.6 + escape-string-regexp: 4.0.0 + filesize: 8.0.7 + find-up: 5.0.0 + fork-ts-checker-webpack-plugin: 6.5.2_5mastfusvewdnfotkrq73j4uja + global-modules: 2.0.0 + globby: 11.1.0 + gzip-size: 6.0.0 + immer: 9.0.16 + is-root: 2.1.0 + loader-utils: 3.2.1 + open: 8.4.0 + pkg-up: 3.1.0 + prompts: 2.4.2 + react-error-overlay: 6.0.11 + recursive-readdir: 2.2.3 + shell-quote: 1.7.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + webpack: 5.75.0 + transitivePeerDependencies: + - eslint + - supports-color + - vue-template-compiler + dev: false + + /react-dom/18.2.0_react@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + + /react-error-overlay/6.0.11: + resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} + dev: false + + /react-is/16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: false + + /react-is/17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: false + + /react-is/18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: false + + /react-refresh/0.11.0: + resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} + engines: {node: '>=0.10.0'} + dev: false + + /react-router-dom/6.4.3_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-MiaYQU8CwVCaOfJdYvt84KQNjT78VF0TJrA17SIQgNHRvLnXDJO6qsFqq8F/zzB1BWZjCFIrQpu4QxcshitziQ==} + engines: {node: '>=14'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + dependencies: + '@remix-run/router': 1.0.3 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + react-router: 6.4.3_react@18.2.0 + dev: false + + /react-router/6.4.3_react@18.2.0: + resolution: {integrity: sha512-BT6DoGn6aV1FVP5yfODMOiieakp3z46P1Fk0RNzJMACzE7C339sFuHebfvWtnB4pzBvXXkHP2vscJzWRuUjTtA==} + engines: {node: '>=14'} + peerDependencies: + react: '>=16.8' + dependencies: + '@remix-run/router': 1.0.3 + react: 18.2.0 + dev: false + + /react-scripts/5.0.1_react@18.2.0: + resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} + engines: {node: '>=14.0.0'} + hasBin: true + peerDependencies: + react: '>= 16' + typescript: ^3.2.1 || ^4 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@babel/core': 7.20.2 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.9_unmakpayn7vcxadrrsbqlrpehy + '@svgr/webpack': 5.5.0 + babel-jest: 27.5.1_@babel+core@7.20.2 + babel-loader: 8.3.0_npabyccmuonwo2rku4k53xo3hi + babel-plugin-named-asset-import: 0.3.8_@babel+core@7.20.2 + babel-preset-react-app: 10.0.1 + bfj: 7.0.2 + browserslist: 4.21.4 + camelcase: 6.3.0 + case-sensitive-paths-webpack-plugin: 2.4.0 + css-loader: 6.7.1_webpack@5.75.0 + css-minimizer-webpack-plugin: 3.4.1_webpack@5.75.0 + dotenv: 10.0.0 + dotenv-expand: 5.1.0 + eslint: 8.27.0 + eslint-config-react-app: 7.0.1_eslint@8.27.0+jest@27.5.1 + eslint-webpack-plugin: 3.2.0_5mastfusvewdnfotkrq73j4uja + file-loader: 6.2.0_webpack@5.75.0 + fs-extra: 10.1.0 + html-webpack-plugin: 5.5.0_webpack@5.75.0 + identity-obj-proxy: 3.0.0 + jest: 27.5.1 + jest-resolve: 27.5.1 + jest-watch-typeahead: 1.1.0_jest@27.5.1 + mini-css-extract-plugin: 2.6.1_webpack@5.75.0 + postcss: 8.4.19 + postcss-flexbugs-fixes: 5.0.2_postcss@8.4.19 + postcss-loader: 6.2.1_upg3rk2kpasnbk27hkqapxaxfq + postcss-normalize: 10.0.1_o3gvceo4mmkmipwqbduijhv2ui + postcss-preset-env: 7.8.2_postcss@8.4.19 + prompts: 2.4.2 + react: 18.2.0 + react-app-polyfill: 3.0.0 + react-dev-utils: 12.0.1_5mastfusvewdnfotkrq73j4uja + react-refresh: 0.11.0 + resolve: 1.22.1 + resolve-url-loader: 4.0.0 + sass-loader: 12.6.0_webpack@5.75.0 + semver: 7.3.8 + source-map-loader: 3.0.2_webpack@5.75.0 + style-loader: 3.3.1_webpack@5.75.0 + tailwindcss: 3.2.3 + terser-webpack-plugin: 5.3.6_webpack@5.75.0 + webpack: 5.75.0 + webpack-dev-server: 4.11.1_webpack@5.75.0 + webpack-manifest-plugin: 4.1.1_webpack@5.75.0 + workbox-webpack-plugin: 6.5.4_webpack@5.75.0 + optionalDependencies: + fsevents: 2.3.2 + transitivePeerDependencies: + - '@babel/plugin-syntax-flow' + - '@babel/plugin-transform-react-jsx' + - '@parcel/css' + - '@swc/core' + - '@types/babel__core' + - '@types/webpack' + - bufferutil + - canvas + - clean-css + - csso + - debug + - esbuild + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - fibers + - node-notifier + - node-sass + - rework + - rework-visit + - sass + - sass-embedded + - sockjs-client + - supports-color + - ts-node + - type-fest + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + - webpack-hot-middleware + - webpack-plugin-serve + dev: false + + /react/18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + + /read-cache/1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + dependencies: + pify: 2.3.0 + dev: false + + /readable-stream/2.3.7: + resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: false + + /readable-stream/3.6.0: + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: false + + /recursive-readdir/2.2.3: + resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} + engines: {node: '>=6.0.0'} + dependencies: + minimatch: 3.1.2 + dev: false + + /regenerate-unicode-properties/10.1.0: + resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: false + + /regenerate/1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: false + + /regenerator-runtime/0.13.10: + resolution: {integrity: sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==} + dev: false + + /regenerator-transform/0.15.0: + resolution: {integrity: sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==} + dependencies: + '@babel/runtime': 7.20.1 + dev: false + + /regex-parser/2.2.11: + resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} + dev: false + + /regexp.prototype.flags/1.4.3: + resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + functions-have-names: 1.2.3 + dev: false + + /regexpp/3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: false + + /regexpu-core/5.2.1: + resolution: {integrity: sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.0 + regjsgen: 0.7.1 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.0.0 + dev: false + + /regjsgen/0.7.1: + resolution: {integrity: sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==} + dev: false + + /regjsparser/0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: false + + /relateurl/0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + dev: false + + /renderkid/3.0.0: + resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} + dependencies: + css-select: 4.3.0 + dom-converter: 0.2.0 + htmlparser2: 6.1.0 + lodash: 4.17.21 + strip-ansi: 6.0.1 + dev: false + + /require-directory/2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: false + + /require-from-string/2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: false + + /requires-port/1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: false + + /resolve-cwd/3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: false + + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: false + + /resolve-from/5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: false + + /resolve-url-loader/4.0.0: + resolution: {integrity: sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==} + engines: {node: '>=8.9'} + peerDependencies: + rework: 1.0.1 + rework-visit: 1.0.0 + peerDependenciesMeta: + rework: + optional: true + rework-visit: + optional: true + dependencies: + adjust-sourcemap-loader: 4.0.0 + convert-source-map: 1.9.0 + loader-utils: 2.0.4 + postcss: 7.0.39 + source-map: 0.6.1 + dev: false + + /resolve.exports/1.1.0: + resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} + engines: {node: '>=10'} + dev: false + + /resolve/1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} + hasBin: true + dependencies: + is-core-module: 2.11.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: false + + /resolve/2.0.0-next.4: + resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} + hasBin: true + dependencies: + is-core-module: 2.11.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: false + + /retry/0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + dev: false + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: false + + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: false + + /rollup-plugin-terser/7.0.2_rollup@2.79.1: + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + peerDependencies: + rollup: ^2.0.0 + dependencies: + '@babel/code-frame': 7.18.6 + jest-worker: 26.6.2 + rollup: 2.79.1 + serialize-javascript: 4.0.0 + terser: 5.15.1 + dev: false + + /rollup/2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: false + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: false + + /safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: false + + /safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /safe-regex-test/1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.3 + is-regex: 1.1.4 + dev: false + + /safer-buffer/2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: false + + /sanitize.css/13.0.0: + resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} + dev: false + + /sass-loader/12.6.0_webpack@5.75.0: + resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + dependencies: + klona: 2.0.5 + neo-async: 2.6.2 + webpack: 5.75.0 + dev: false + + /sax/1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: false + + /saxes/5.0.1: + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + engines: {node: '>=10'} + dependencies: + xmlchars: 2.2.0 + dev: false + + /scheduler/0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: false + + /schema-utils/2.7.0: + resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.11 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: false + + /schema-utils/2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.11 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: false + + /schema-utils/3.1.1: + resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.11 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: false + + /schema-utils/4.0.0: + resolution: {integrity: sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==} + engines: {node: '>= 12.13.0'} + dependencies: + '@types/json-schema': 7.0.11 + ajv: 8.11.0 + ajv-formats: 2.1.1 + ajv-keywords: 5.1.0_ajv@8.11.0 + dev: false + + /select-hose/2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + dev: false + + /selfsigned/2.1.1: + resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==} + engines: {node: '>=10'} + dependencies: + node-forge: 1.3.1 + dev: false + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: false + + /semver/7.3.8: + resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: false + + /send/0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /serialize-javascript/4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + dependencies: + randombytes: 2.1.0 + dev: false + + /serialize-javascript/6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + dependencies: + randombytes: 2.1.0 + dev: false + + /serve-index/1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.8 + batch: 0.6.1 + debug: 2.6.9 + escape-html: 1.0.3 + http-errors: 1.6.3 + mime-types: 2.1.35 + parseurl: 1.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /serve-static/1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: false + + /setprototypeof/1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + dev: false + + /setprototypeof/1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + + /shebang-command/2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: false + + /shebang-regex/3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: false + + /shell-quote/1.7.4: + resolution: {integrity: sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==} + dev: false + + /side-channel/1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.3 + object-inspect: 1.12.2 + dev: false + + /signal-exit/3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: false + + /sisteransi/1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: false + + /slash/3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: false + + /slash/4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: false + + /sockjs/0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + dependencies: + faye-websocket: 0.11.4 + uuid: 8.3.2 + websocket-driver: 0.7.4 + dev: false + + /source-list-map/2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} + dev: false + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: false + + /source-map-loader/3.0.2_webpack@5.75.0: + resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + abab: 2.0.6 + iconv-lite: 0.6.3 + source-map-js: 1.0.2 + webpack: 5.75.0 + dev: false + + /source-map-support/0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: false + + /source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: false + + /source-map/0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: false + + /source-map/0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + dependencies: + whatwg-url: 7.1.0 + dev: false + + /sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + dev: false + + /spdy-transport/3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + dependencies: + debug: 4.3.4 + detect-node: 2.1.0 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 3.6.0 + wbuf: 1.7.3 + transitivePeerDependencies: + - supports-color + dev: false + + /spdy/4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + dependencies: + debug: 4.3.4 + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /sprintf-js/1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: false + + /stable/0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: false + + /stack-utils/2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: false + + /stackframe/1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + dev: false + + /statuses/1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + dev: false + + /statuses/2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + + /string-length/4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + dev: false + + /string-length/5.0.1: + resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} + engines: {node: '>=12.20'} + dependencies: + char-regex: 2.0.1 + strip-ansi: 7.0.1 + dev: false + + /string-natural-compare/3.0.1: + resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} + dev: false + + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: false + + /string.prototype.matchall/4.0.8: + resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} + dependencies: + call-bind: 1.0.2 + 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.3 + side-channel: 1.0.4 + dev: false + + /string.prototype.trimend/1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.4 + dev: false + + /string.prototype.trimstart/1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.4 + dev: false + + /string_decoder/1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: false + + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /stringify-object/3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + dev: false + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: false + + /strip-ansi/7.0.1: + resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: false + + /strip-bom/3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: false + + /strip-bom/4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: false + + /strip-comments/2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + dev: false + + /strip-final-newline/2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: false + + /strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: false + + /style-loader/3.3.1_webpack@5.75.0: + resolution: {integrity: sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + dependencies: + webpack: 5.75.0 + dev: false + + /stylehacks/5.1.1_postcss@8.4.19: + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.21.4 + postcss: 8.4.19 + postcss-selector-parser: 6.0.10 + dev: false + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: false + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: false + + /supports-color/8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: false + + /supports-hyperlinks/2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: false + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: false + + /svg-parser/2.0.4: + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + dev: false + + /svgo/1.3.2: + resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} + engines: {node: '>=4.0.0'} + deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. + hasBin: true + dependencies: + chalk: 2.4.2 + coa: 2.0.2 + css-select: 2.1.0 + css-select-base-adapter: 0.1.1 + css-tree: 1.0.0-alpha.37 + csso: 4.2.0 + js-yaml: 3.14.1 + mkdirp: 0.5.6 + object.values: 1.1.6 + sax: 1.2.4 + stable: 0.1.8 + unquote: 1.1.1 + util.promisify: 1.0.1 + dev: false + + /svgo/2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.0.0 + stable: 0.1.8 + dev: false + + /symbol-tree/3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: false + + /tailwindcss/3.2.3: + resolution: {integrity: sha512-Xt9D4PK4zuuQCEB8bwK9JUCKmTgUwyac/6b0/42Vqhgl6YJkep+Wf5wq+5uXYfmrupdAD0YY2NY1hyZp1HjRrg==} + engines: {node: '>=12.13.0'} + hasBin: true + dependencies: + arg: 5.0.2 + chokidar: 3.5.3 + color-name: 1.1.4 + detective: 5.2.1 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.2.12 + glob-parent: 6.0.2 + is-glob: 4.0.3 + lilconfig: 2.0.6 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.19 + postcss-import: 14.1.0_postcss@8.4.19 + postcss-js: 4.0.0_postcss@8.4.19 + postcss-load-config: 3.1.4_postcss@8.4.19 + postcss-nested: 6.0.0_postcss@8.4.19 + postcss-selector-parser: 6.0.10 + postcss-value-parser: 4.2.0 + quick-lru: 5.1.1 + resolve: 1.22.1 + transitivePeerDependencies: + - ts-node + dev: false + + /tapable/1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} + dev: false + + /tapable/2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: false + + /temp-dir/2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + dev: false + + /tempy/0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + dev: false + + /terminal-link/2.1.1: + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + engines: {node: '>=8'} + dependencies: + ansi-escapes: 4.3.2 + supports-hyperlinks: 2.3.0 + dev: false + + /terser-webpack-plugin/5.3.6_webpack@5.75.0: + resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.17 + jest-worker: 27.5.1 + schema-utils: 3.1.1 + serialize-javascript: 6.0.0 + terser: 5.15.1 + webpack: 5.75.0 + dev: false + + /terser/5.15.1: + resolution: {integrity: sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.2 + acorn: 8.8.1 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: false + + /test-exclude/6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: false + + /text-table/0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: false + + /throat/6.0.1: + resolution: {integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==} + dev: false + + /thunky/1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + dev: false + + /tmpl/1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + dev: false + + /to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: false + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: false + + /toidentifier/1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + + /tough-cookie/4.1.2: + resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} + engines: {node: '>=6'} + dependencies: + psl: 1.9.0 + punycode: 2.1.1 + universalify: 0.2.0 + url-parse: 1.5.10 + dev: false + + /tr46/1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + dependencies: + punycode: 2.1.1 + dev: false + + /tr46/2.1.0: + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} + dependencies: + punycode: 2.1.1 + dev: false + + /tryer/1.0.1: + resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} + dev: false + + /tsconfig-paths/3.14.1: + resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.1 + minimist: 1.2.7 + strip-bom: 3.0.0 + dev: false + + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: false + + /tslib/2.4.1: + resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + dev: false + + /tsutils/3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + dev: false + + /type-check/0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + dev: false + + /type-check/0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: false + + /type-detect/4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: false + + /type-fest/0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + dev: false + + /type-fest/0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: false + + /type-fest/0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: false + + /type-is/1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + dev: false + + /typedarray-to-buffer/3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: false + + /unbox-primitive/1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: false + + /unicode-canonical-property-names-ecmascript/2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: false + + /unicode-match-property-ecmascript/2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: false + + /unicode-match-property-value-ecmascript/2.0.0: + resolution: {integrity: sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==} + engines: {node: '>=4'} + dev: false + + /unicode-property-aliases-ecmascript/2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: false + + /unique-string/2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + dependencies: + crypto-random-string: 2.0.0 + dev: false + + /universalify/0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + dev: false + + /universalify/2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + dev: false + + /unpipe/1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: false + + /unquote/1.1.1: + resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} + dev: false + + /upath/1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + dev: false + + /update-browserslist-db/1.0.10_browserslist@4.21.4: + resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.4 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: false + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.1.1 + dev: false + + /url-parse/1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: false + + /util-deprecate/1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false + + /util.promisify/1.0.1: + resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} + dependencies: + define-properties: 1.1.4 + es-abstract: 1.20.4 + has-symbols: 1.0.3 + object.getownpropertydescriptors: 2.1.5 + dev: false + + /utila/0.4.0: + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} + dev: false + + /utils-merge/1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: false + + /uuid/8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: false + + /v8-to-istanbul/8.1.1: + resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} + engines: {node: '>=10.12.0'} + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + convert-source-map: 1.9.0 + source-map: 0.7.4 + dev: false + + /vary/1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: false + + /w3c-hr-time/1.0.2: + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + deprecated: Use your platform's native performance.now() and performance.timeOrigin. + dependencies: + browser-process-hrtime: 1.0.0 + dev: false + + /w3c-xmlserializer/2.0.0: + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + engines: {node: '>=10'} + dependencies: + xml-name-validator: 3.0.0 + dev: false + + /walker/1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + dependencies: + makeerror: 1.0.12 + dev: false + + /watchpack/2.4.0: + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.10 + dev: false + + /wbuf/1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + dependencies: + minimalistic-assert: 1.0.1 + dev: false + + /webidl-conversions/4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + dev: false + + /webidl-conversions/5.0.0: + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + engines: {node: '>=8'} + dev: false + + /webidl-conversions/6.1.0: + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} + dev: false + + /webpack-dev-middleware/5.3.3_webpack@5.75.0: + resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + colorette: 2.0.19 + memfs: 3.4.10 + mime-types: 2.1.35 + range-parser: 1.2.1 + schema-utils: 4.0.0 + webpack: 5.75.0 + dev: false + + /webpack-dev-server/4.11.1_webpack@5.75.0: + resolution: {integrity: sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==} + engines: {node: '>= 12.13.0'} + hasBin: true + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/bonjour': 3.5.10 + '@types/connect-history-api-fallback': 1.3.5 + '@types/express': 4.17.14 + '@types/serve-index': 1.9.1 + '@types/serve-static': 1.15.0 + '@types/sockjs': 0.3.33 + '@types/ws': 8.5.3 + ansi-html-community: 0.0.8 + bonjour-service: 1.0.14 + chokidar: 3.5.3 + colorette: 2.0.19 + compression: 1.7.4 + connect-history-api-fallback: 2.0.0 + default-gateway: 6.0.3 + express: 4.18.2 + graceful-fs: 4.2.10 + html-entities: 2.3.3 + http-proxy-middleware: 2.0.6_@types+express@4.17.14 + ipaddr.js: 2.0.1 + open: 8.4.0 + p-retry: 4.6.2 + rimraf: 3.0.2 + schema-utils: 4.0.0 + selfsigned: 2.1.1 + serve-index: 1.9.1 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack: 5.75.0 + webpack-dev-middleware: 5.3.3_webpack@5.75.0 + ws: 8.11.0 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + dev: false + + /webpack-manifest-plugin/4.1.1_webpack@5.75.0: + resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} + engines: {node: '>=12.22.0'} + peerDependencies: + webpack: ^4.44.2 || ^5.47.0 + dependencies: + tapable: 2.2.1 + webpack: 5.75.0 + webpack-sources: 2.3.1 + dev: false + + /webpack-sources/1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: false + + /webpack-sources/2.3.1: + resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} + engines: {node: '>=10.13.0'} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: false + + /webpack-sources/3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: false + + /webpack/5.75.0: + resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.4 + '@types/estree': 0.0.51 + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/wasm-edit': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + acorn: 8.8.1 + acorn-import-assertions: 1.8.0_acorn@8.8.1 + browserslist: 4.21.4 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.10.0 + es-module-lexer: 0.9.3 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.10 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.1.1 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.6_webpack@5.75.0 + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: false + + /websocket-driver/0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + dependencies: + http-parser-js: 0.5.8 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + dev: false + + /websocket-extensions/0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + dev: false + + /whatwg-encoding/1.0.5: + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + dependencies: + iconv-lite: 0.4.24 + dev: false + + /whatwg-fetch/3.6.2: + resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==} + dev: false + + /whatwg-mimetype/2.3.0: + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + dev: false + + /whatwg-url/7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + dev: false + + /whatwg-url/8.7.0: + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} + dependencies: + lodash: 4.17.21 + tr46: 2.1.0 + webidl-conversions: 6.1.0 + dev: false + + /which-boxed-primitive/1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: false + + /which/1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: false + + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: false + + /word-wrap/1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} + dev: false + + /workbox-background-sync/6.5.4: + resolution: {integrity: sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==} + dependencies: + idb: 7.1.1 + workbox-core: 6.5.4 + dev: false + + /workbox-broadcast-update/6.5.4: + resolution: {integrity: sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==} + dependencies: + workbox-core: 6.5.4 + dev: false + + /workbox-build/6.5.4: + resolution: {integrity: sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==} + engines: {node: '>=10.0.0'} + dependencies: + '@apideck/better-ajv-errors': 0.3.6_ajv@8.11.0 + '@babel/core': 7.20.2 + '@babel/preset-env': 7.20.2_@babel+core@7.20.2 + '@babel/runtime': 7.20.1 + '@rollup/plugin-babel': 5.3.1_rw3hudt2pmn5afxog7l3b6qtze + '@rollup/plugin-node-resolve': 11.2.1_rollup@2.79.1 + '@rollup/plugin-replace': 2.4.2_rollup@2.79.1 + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.11.0 + common-tags: 1.8.2 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + lodash: 4.17.21 + pretty-bytes: 5.6.0 + rollup: 2.79.1 + rollup-plugin-terser: 7.0.2_rollup@2.79.1 + 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 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: false + + /workbox-cacheable-response/6.5.4: + resolution: {integrity: sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==} + dependencies: + workbox-core: 6.5.4 + dev: false + + /workbox-core/6.5.4: + resolution: {integrity: sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==} + dev: false + + /workbox-expiration/6.5.4: + resolution: {integrity: sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==} + dependencies: + idb: 7.1.1 + workbox-core: 6.5.4 + dev: false + + /workbox-google-analytics/6.5.4: + resolution: {integrity: sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==} + dependencies: + workbox-background-sync: 6.5.4 + workbox-core: 6.5.4 + workbox-routing: 6.5.4 + workbox-strategies: 6.5.4 + dev: false + + /workbox-navigation-preload/6.5.4: + resolution: {integrity: sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==} + dependencies: + workbox-core: 6.5.4 + dev: false + + /workbox-precaching/6.5.4: + resolution: {integrity: sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==} + dependencies: + workbox-core: 6.5.4 + workbox-routing: 6.5.4 + workbox-strategies: 6.5.4 + dev: false + + /workbox-range-requests/6.5.4: + resolution: {integrity: sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==} + dependencies: + workbox-core: 6.5.4 + dev: false + + /workbox-recipes/6.5.4: + resolution: {integrity: sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==} + dependencies: + 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 + dev: false + + /workbox-routing/6.5.4: + resolution: {integrity: sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==} + dependencies: + workbox-core: 6.5.4 + dev: false + + /workbox-strategies/6.5.4: + resolution: {integrity: sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==} + dependencies: + workbox-core: 6.5.4 + dev: false + + /workbox-streams/6.5.4: + resolution: {integrity: sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==} + dependencies: + workbox-core: 6.5.4 + workbox-routing: 6.5.4 + dev: false + + /workbox-sw/6.5.4: + resolution: {integrity: sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==} + dev: false + + /workbox-webpack-plugin/6.5.4_webpack@5.75.0: + resolution: {integrity: sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==} + engines: {node: '>=10.0.0'} + peerDependencies: + webpack: ^4.4.0 || ^5.9.0 + dependencies: + fast-json-stable-stringify: 2.1.0 + pretty-bytes: 5.6.0 + upath: 1.2.0 + webpack: 5.75.0 + webpack-sources: 1.4.3 + workbox-build: 6.5.4 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: false + + /workbox-window/6.5.4: + resolution: {integrity: sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==} + dependencies: + '@types/trusted-types': 2.0.2 + workbox-core: 6.5.4 + dev: false + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: false + + /write-file-atomic/3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + dev: false + + /ws/7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /ws/8.11.0: + resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /xml-name-validator/3.0.0: + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + dev: false + + /xmlchars/2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: false + + /xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: false + + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: false + + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: false + + /yaml/1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: false + + /yargs-parser/20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: false + + /yargs/16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: false + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: false diff --git a/packages/example/public/index.html b/packages/example/public/index.html new file mode 100644 index 00000000..65d9ff1f --- /dev/null +++ b/packages/example/public/index.html @@ -0,0 +1,24 @@ + + + + + + + + + + react-async-states + + + + + +
+
+ Loading +
+
+ + diff --git a/packages/example/public/manifest.json b/packages/example/public/manifest.json new file mode 100644 index 00000000..5d85093c --- /dev/null +++ b/packages/example/public/manifest.json @@ -0,0 +1,8 @@ +{ + "short_name": "react-async-states", + "name": "react-async-states", + "start_url": "./index.html", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/packages/example/src/App2.js b/packages/example/src/App2.js new file mode 100644 index 00000000..fcb07fce --- /dev/null +++ b/packages/example/src/App2.js @@ -0,0 +1,67 @@ +import React from "react"; +import { + RenderStrategy, + StateBoundary, + useCurrentState, + AsyncStateStatus +} from "react-async-states"; + +const config = { + lazy: false, + producer: async function () { + const response = await fetch('https://jsonplaceholder.typicode.com/users/12'); + if (!response.ok) { + throw new Error(response.status); + } + return response.json(); + } +} + +function Wrapper({children}) { + const [t, e] = React.useState(false); + + return ( + <> + + {t && children} + + ) +} + +function MyError() { + const {state: {data: error}} = useCurrentState(); + + return
This error is happening: {error?.toString?.()}
+} + +function MyPending() { + const {state: {props}} = useCurrentState(); + + return
PENDING WITH PROPS: {JSON.stringify(props, null, 4)}
+} + +export default function App2() { + return ( + +

Result!

+ , + [AsyncStateStatus.success]: , + }} + /> +
+ ); +} + +function CurrentState() { + const currentState = useCurrentState(); + return
+ Current state details {currentState.state.status} +
+      {JSON.stringify(currentState, null, 4)}
+    
+
+} diff --git a/packages/example/src/example1/index.js b/packages/example/src/example1/index.js new file mode 100644 index 00000000..7f82178b --- /dev/null +++ b/packages/example/src/example1/index.js @@ -0,0 +1,5 @@ +import React from "react"; + +export default function App() { + return "Hello! Ongoing!"; +} diff --git a/packages/example/src/index.bak.js b/packages/example/src/index.bak.js new file mode 100644 index 00000000..2167ac31 --- /dev/null +++ b/packages/example/src/index.bak.js @@ -0,0 +1,126 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' + +import './index.css' +import App from "./past/App"; + +import App2 from './past/v2/Bug2'; + + +import { createSource, useSource, useAsyncState } from "react-async-states"; + +function getOrCreateHost(id) { + const maybeElement = document.getElementById(id); + if (!maybeElement) { + const host = document.createElement("div"); + host.setAttribute("id", id); + document.body.appendChild(host); + return host; + } + return maybeElement; +} + +function initVanillaHost(host) { + const incrButton = document.createElement("button"); + incrButton.innerHTML = "+"; + incrButton.addEventListener("click", increment); + const decrButton = document.createElement("button"); + decrButton.innerHTML = "-"; + decrButton.addEventListener("click", decrement); + const span = document.createElement("span"); + span.setAttribute("id", "vanilla-content"); + span.innerHTML = "Counter value is " + counterSource.getState().data; + const title = document.createElement("h1"); + title.innerHTML = "Vanilla js"; + host.appendChild(title); + host.appendChild(decrButton); + host.appendChild(span); + host.appendChild(incrButton); + +} + +const root1Host = getOrCreateHost("root"); +const root2Host = getOrCreateHost("root2"); +const vanillaHost = getOrCreateHost("vanilla"); + +const root = ReactDOM.createRoot(root1Host); +const root2 = ReactDOM.createRoot(root2Host); + +const counterSource = createSource("counter", null, {initialValue: 0}); +const decrement = () => counterSource.setState(p => p.data - 1); +const increment = () => counterSource.setState(p => p.data + 1); + +function userProducer() { + return fetch(`https://jsonplaceholder.typicode.com/users/1`).then((res) => + res.json() + ); +} + +const source = createSource("user-1", userProducer, {skipPendingDelayMs: 400}); + +function Toto() { + const {state, abort} = useAsyncState({ + source, + events: {change: (e) => console.log("CHANGE EVENT", e.state)} + }); + + return ( +
+ + + {state.timestamp} +
+
{JSON.stringify(state, null, 4)}
+
+
+ ); +} + +// root.render(); +// root2.render(); +// initVanillaHost(vanillaHost); + +counterSource.subscribe((newState) => { + document.getElementById("vanilla-content").innerHTML = `Counter value is ${newState.data}`; +}, "vanilla-subscription"); + +function Counter({from}) { + const {state} = useSource(counterSource); + + return ( +
+

{from}

+ + Counter value is {state.data} + +
+ ) +} + +function MeTesting() { + return
Hello, world!
+} + + +// +// const button = document.createElement("button"); +// button.innerHTML = "Click me"; +// button.onclick = function () { +// console.log("Root created"); +// root.render( +// +// ); +// console.log("rendered root!"); +// Promise.resolve().then(() => console.log('promised did resolve !')); +// setTimeout(() => console.log('timeout passed')); +// }; +// document.body.appendChild(button); +// + +// ReactDOM.render( +// , document.getElementById('root')); + +// const anotherRoot = document.createElement("div"); +// document.body.appendChild(anotherRoot); +// +// ReactDOM.render(, anotherRoot); diff --git a/packages/example/src/index.css b/packages/example/src/index.css new file mode 100644 index 00000000..ec90b9f1 --- /dev/null +++ b/packages/example/src/index.css @@ -0,0 +1,51 @@ +/* body { + margin: 0; + padding: 0; + font-family: sans-serif; +} */ +body { + margin: 0; +} +.splash-animated { + animation: gradient 6s infinite linear; +} +.splash { + background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d58b); + background-size: 300% 100%; + height: 100vh; +} +.loading { + font-size: 3rem; + display: flex; + align-items: center; + justify-content: center; + height: 100%; +} + +@keyframes gradient { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% -50%; + } + 100% { + background-position: 0% 50%; + } +} + +.card { + --card-blend-mode: overlay; + background-color: #fff; + border-radius: 0.5rem; + box-shadow: 0.05rem 0.1rem 0.3rem -0.03rem rgba(0, 0, 0, 0.45); + background-image: linear-gradient( + #5e9ad9, #e271ad, + white max(9.5rem, 27vh) + ); + overflow: hidden; +} +@keyframes fadeIn { + 0% { opacity: 0; } + 100% { opacity: 1; } +} diff --git a/packages/example/src/index.js b/packages/example/src/index.js new file mode 100644 index 00000000..39162ba1 --- /dev/null +++ b/packages/example/src/index.js @@ -0,0 +1,218 @@ +import React from 'react' +import ReactDOM from 'react-dom/client' + +import { + AsyncStateProvider, + AsyncStateStatus, + useAsyncState, + createSource, + useSource +} from "react-async-states"; + +import App from "./past/App" + +import './index.css' + +import {autoConfigureDevtools} from "async-states-devtools" +import "async-states-devtools/dist/style.css" +autoConfigureDevtools({open: true}); + +async function fetchProfiles(props) { + + const controller = new AbortController(); + + props.onAbort(() => { + controller.abort() + }); + + await new Promise((resolve) => { + const id = setTimeout(resolve, 800); + props.onAbort(() => clearTimeout(id)); + }) + + return await fetch( + `https://jsonplaceholder.typicode.com/users/${props.args[0] ?? ''}`, + {signal: controller.signal} + ).then(r => r.json()); +} + +const profilesList = createSource("profiles", fetchProfiles, { +// runEffect: "delay", +// runEffectDurationMs: 800 +}); +const root = ReactDOM.createRoot(document.getElementById("root")); + +// runpSource(profilesList) +// .then(() => { +// root.render( +// +// +// +// +// +// +// +// ) +// }); + +// const myManager = AsyncStateManager(); +// +// setInterval(() => { +// console.log('manager', myManager.entries); +// }, 2000) + +root.render( + <> + + + {/**/} + + {/**/} + {/**/} + +
+ {/**/} + {/* */} + {/* */} + {/* */} + {/**/} + + {/**/} + + {/*
*/} + {/**/} +
+ +) + +function CounterDetails() { + const result = useAsyncState("counter") + return ( +
+

Details

+ +
+ + {result.mode} + +
+          {JSON.stringify(result.state, null, 4)}
+        
+
+
+ ); +} + +function CounterHoister() { + const result = useAsyncState.hoist({ + key: "counter", + initialValue: 0, + resetStateOnDispose: true, + }) + return ( +
+

Hoister

+ +
+ + {result.mode} + +
+          {JSON.stringify(result.state, null, 4)}
+        
+
+
+ ); +} + +// +function ProfilesView(props) { + const {state, run} = useSource(profilesList); + + if (state.status !== AsyncStateStatus.error && state.status !== AsyncStateStatus.success) { + return "Pending..." + state.status; + } + + if (state.status === AsyncStateStatus.error) { + return Error occurred!!! {state.data?.toString?.()} + } + const data = Array.isArray(state.data) ? state.data : [state.data] + return ( +
+ + {data.map((profile, index) => )} +
+ ); +} + +function ProfileView({profile, index}) { + return (
{profile.id} - {profile.name}
) +} + +// function ProviderTest() { +// return ( +// +// +// +// ); +// } + +function Wrapper({children, initialValue = false}) { + const [mounted, setMounted] = React.useState(initialValue); + + return ( + <> + + {mounted && children} + + ); +} + +// +// function Hoister() { +// const {state} = useAsyncState.hoist({ +// key: "haha", +// initialValue: 5, +// producer: () => 3, +// resetStateOnDispose: true, +// }); +// +// return state.data; +// } diff --git a/packages/example/src/past/App.js b/packages/example/src/past/App.js new file mode 100644 index 00000000..b5cf1c64 --- /dev/null +++ b/packages/example/src/past/App.js @@ -0,0 +1,181 @@ +import React from "react"; +import { useAsyncState } from "react-async-states"; +import { BrowserRouter as Router, Route, Routes } from "react-router-dom"; +import BasicUsageDemo from "./BasicUsageDemo"; +import RoutingDemo from "./RoutingDemo"; +import SelectorsDemo from "./SelectorsDemo"; +import ReducersDemo from "./ReducersDemo"; +import StandaloneDemo from "./StandaloneDemo"; +import DemoDemo from "./DemoDemo"; +import EmitDemo from "./EmitDemo"; +import ReduxDemo from "./ReduxDemo"; +import BrokerDemo from "./BrokerDemo"; +import NextDemo from "./NextDemo"; +import LanesDemo from "./LanesDemo"; +import Navigation from "./Navigation"; +import DemoProvider from "./Provider"; + + + +function demoProducer(props) { + props.run("posts"); + console.log('posts state', props.select("posts")); + return null; +} + +function ProducerRunPropsDemo() { + const {state: {data}, run, abort} = useAsyncState.auto(demoProducer); + const {mode, state: postsState} = useAsyncState.lazy("users"); + return ( +
+

run effects demo

+

State value is:
{JSON.stringify(data ?? [], null, 4)}

+ +

posts state value + is {mode}:
{JSON.stringify(postsState ?? {}, null, 4)}
+

+ + +
+ ); +} + + +function OutsideProvider() { + + return +} + +function InsideProvider() { + const {mode, state, run, setState} = useAsyncState({ + lazy: true, + key: "counter", + initialValue: 0, + selector: s => s.data, + hoistToProvider: true, + }); + + console.log('state is', mode, state) + + return (<> + + + ); +} + +function ShowCounter() { + const {state} = useAsyncState({key: "counter", selector: s => s.data}); + + return counter is: {state} +} + +export default function App() { + React.useEffect(() => console.log('app mounted'), []); + return ( + + {/**/} + {/**/} + + +
+ +
+ + }> + + }> + + }> + + }> + + + }> + + + }> + + + }> + + + }> + + + }> + + + }> + + + }> + + + +
+ +
+
+ ) + ; +} + +function GeneratorsTests() { + return ( + <> + + + + + + ); +} + +function* syncGenExample() { + for (let i = 0; i < 10_0; i++) { + yield i; + } + // throw 5; + return yield 10_001; +} + +function GeneratorSync() { + const {state} = useAsyncState.auto(syncGenExample); + // console.log('sync generator value', state); + return null; +} + +function* asyncGenExample(props) { + for (let i = 0; i < 10; i++) { + yield i; + } + let timeoutId; + props.onAbort(function onAbort() { + console.log('aborting timeout id', timeoutId); + clearTimeout(timeoutId); + }); + return yield new Promise(resolve => timeoutId = setTimeout(resolve, 10000)); + // try { + // throw new Error("testing"); + // } catch (e) { + // throw e; + // } +} + +function GeneratorAsync() { + // React.useLayoutEffect(() => { + // console.log('async mounted layout effect'); + // return () => console.log('unmounting layout effect!! async'); + // }, []); + // React.useEffect(() => { + // console.log('async mounted'); + // return () => console.log('unmounting!! async'); + // }, []); + const {state, read} = useAsyncState.auto(asyncGenExample); + // React.useEffect(() => { + // console.log('status change', state.status); + // }, [state.status]) + // console.log('async generator value', read()); + return null; +} diff --git a/packages/example/src/past/App2.js b/packages/example/src/past/App2.js new file mode 100644 index 00000000..1ece771a --- /dev/null +++ b/packages/example/src/past/App2.js @@ -0,0 +1,16 @@ +import React from "react"; +import { useAsyncState } from "react-async-states"; +import { demoAsyncStates } from "./Provider"; + +export default function App2() { + const {state: {status,data}} = useAsyncState(demoAsyncStates.users); + return (
+

This is a whole new react tree

+
+ status: {status} +
+        {JSON.stringify(data ?? {}, null, 2)}
+      
+
+
) +} diff --git a/packages/example/src/past/BasicUsageDemo.js b/packages/example/src/past/BasicUsageDemo.js new file mode 100644 index 00000000..2e8203bf --- /dev/null +++ b/packages/example/src/past/BasicUsageDemo.js @@ -0,0 +1,149 @@ +import React from "react"; +import { demoAsyncStates } from "./Provider"; +import { useAsyncState, useSelector } from "react-async-states"; + +function SimpleSub({ + source, + asyncStateKey, + displayValue, + lazy = false, + suspend = false, + cacheConfig = null + }) { + // console.log('inside simple sub', asyncStateKey, source); + const { + key, + invalidateCache, + state, + read, + run, + abort, + mode + } = useAsyncState({source, key: asyncStateKey, lazy, cacheConfig}); + + if (!key) { + return "waiting..."; + } + // console.log('later,', {key, state, mode}) + const {status, data} = state; + // console.log('source ' + source.key, source.getState(), source.isSource, source); + + // console.log('suspend', suspend, read()); + const readData = suspend ? read().data : data; + return ( +
+ Key: {key} +
+ Status: {status} +
+ Run: +
+ Run: +
+ Abort: +
+ {status === "success" && ( +
+ Data: +
+
    + {displayValue(readData)} +
+
+ )} +
+ ); +} + +export default function Demo() { + return ( +
+
+
+ +
+
+

Subscribe to global async state - {demoAsyncStates.users.key}

+
+ + data?.map(user =>
  • {user.id} - {user.username} - {user.name} - {user.email}
  • )} + /> +
    +
    + + data?.map(post =>
  • {post.id} - + userId: {post.userId} - {post.title}
  • )} + /> +
    +
    +
    +
    +
    +
    + ); +} + +function UndefinedProducerDemo() { + + return ( + <> + + + + + ); +} + +function UndefinedProducerDemoHoister() { + const {state} = useAsyncState({ + lazy: true, + key: "user_input", + selector: s => s.data, + hoistToProvider: true, + initialValue: "Type something", + }); + + return ( +
    +

    user input value: {state}

    +
    + ); +} + +function UndefinedProducerDemoConsumer() { + const {state, run} = useAsyncState("user_input"); + if (!state) { + return null; + } + const {data} = state; + return ( + run(e.target.value)} + value={data} placeholder="type something"/> + ); +} + +function selectCurrentValue(state) { + return state?.data; +} + +function UndefinedProducerDemoSelector() { + const data = useSelector("user_input", selectCurrentValue); + return ( + +
    +

    I select data from user input: {data}

    +
    + ); +} diff --git a/packages/example/src/past/BrokerDemo.js b/packages/example/src/past/BrokerDemo.js new file mode 100644 index 00000000..bc8c5517 --- /dev/null +++ b/packages/example/src/past/BrokerDemo.js @@ -0,0 +1,84 @@ +import React from "react"; +import { useAsyncState } from "react-async-states"; + + +function brokerProducer(props) { + return new Promise((resolve, reject) => { + const ws = new WebSocket("ws://localhost:9091"); + ws.addEventListener("error", (message) => { + reject({connected: false, error: message}); + }); + ws.addEventListener("open", () => { + resolve({ws, connected: true}); + }); + ws.addEventListener("close", message => { + props.emit(message, "error"); + }); + ws.addEventListener("message", (message) => { + const jsonData = JSON.parse(message.data); + const {to} = jsonData; + if (to) { + props.run(to, null, jsonData); + } + }); + props.onAbort(() => ws.close()); + }); +} + +function logsProducer(props) { + const msg = props.args[0]; + if (msg) { + return [...(props.lastSuccess.data ?? []), msg]; + } +} + +function productsProducer(props) { + const msg = props.args[0]; + if (msg) { + return [...(props.lastSuccess.data ?? []), msg]; + } +} + +function conversationsProducer(props) { + const msg = props.args[0]; + if (msg) { + return [...(props.lastSuccess.data ?? []), msg]; + } +} + +export default function BrokerDemo() { + return ( + <> + + + + + + ); +} + +function BrokerSetup() { + const {state: {status}} = useAsyncState.auto(brokerProducer); + useAsyncState.hoist({key: "logs", producer: logsProducer}); + useAsyncState.hoist({key: "products", producer: productsProducer}); + useAsyncState.hoist({key: "conversations", producer: conversationsProducer}); + + return ( +
    + Broker status: {status} +
    + ); +} + +function BrokerSubs({subKey}) { + const {mode, state} = useAsyncState(subKey); + + return ( + + broker sub {subKey} on mode {mode} +
    +        {JSON.stringify((state.data ?? []), null, 4)}
    +      
    +
    + ); +} diff --git a/packages/example/src/past/DemoDemo.js b/packages/example/src/past/DemoDemo.js new file mode 100644 index 00000000..27ad7e72 --- /dev/null +++ b/packages/example/src/past/DemoDemo.js @@ -0,0 +1,84 @@ +import React from "react"; +import { useAsyncState } from "react-async-states"; +import { demoAsyncStates } from "./Provider"; + +export function Inject() { + useAsyncState({ + initialValue: {}, + key: "hakky-login", + hoistToProvider: true, + producer(props) { + return {...props.lastSuccess.data, [props.args[0]]: props.args[1]}; + } + }); + + return null; +} + + +function getUser(props) { + const controller = new AbortController(); + props.onAbort(() => { + controller.abort() + }); + console.log('props', props.payload.userId); + return fetch(`https://jsonplaceholder.typicode.com/users`, {signal: controller.signal}).then(r => r.json()); +} + + +export default function DemoDemo() { + // const [isPending, startTransition] = React.useTransition(); + const {state: {status, data}, run} = useAsyncState(demoAsyncStates.users); + + console.log(data); + return ( + <> + +
    +
    + { + console.log('onchange, running'); + // startTransition(run); + run(); + }}/> +
    + {status} +
    +
    +        {JSON.stringify(data, null, 4)}
    +      
    + + ); +} + +function timeout(delay, value, cb) { + return new Promise(res => cb(setTimeout(() => res(value), delay))); +} + +function interval(delay, value, cb) { + return new Promise(res => cb(setTimeout(() => res(value), delay))); +} + +function BuilderDemo() { + const {state} = useAsyncState({ + lazy: false, + initialValue: 0, + runEffect: "delay", + runEffectDurationMs: 2000, + selector: s => s.status === "pending" ? "pending..." : JSON.stringify(s.data), + producer: function producer(props) { + let timeoutId; + props.onAbort(() => clearTimeout(timeoutId)); + + return timeout(2000, props.lastSuccess.data + 1, id => timeoutId = id); + }, + }); + + return `state value is: ${state}`; +} + + + + + + diff --git a/packages/example/src/past/EmitDemo.js b/packages/example/src/past/EmitDemo.js new file mode 100644 index 00000000..0a86ea42 --- /dev/null +++ b/packages/example/src/past/EmitDemo.js @@ -0,0 +1,134 @@ +import React from "react"; +import { useAsyncState } from "react-async-states"; + + +function remoteProducer(props) { + const state = props.lastSuccess; + const [type, payload] = props.args; + + console.log('running', state, type, payload); + + switch (type) { + case "connect": { + return new Promise((resolve, reject) => { + const ws = new WebSocket("ws://localhost:9090"); + ws.addEventListener("error", (message) => { + reject({error: message}); + }); + ws.addEventListener("open", (message) => { + resolve({ws, messages: [], connected: !!ws}); + }); + ws.addEventListener("message", (message) => { + props.emit(old => ({ + ...old.data, + messages: ([...old.data.messages, { + data: message.data, + sender: "remote" + }]) + })); + }); + props.onAbort(() => ws.close()); + }); + } + case "send": { + state.data.ws.send(payload); + return { + ...state.data, + messages: [...state.data.messages, {data: payload, sender: "me"}] + }; + } + } + return null; +} + +function wsProducer(props) { + const ws = new WebSocket("ws://localhost:9090"); + + return new Promise((res, rej) => { + ws.addEventListener("open", () => res([])); + ws.addEventListener("error", () => props.emit(new Error("error"), "error")); + ws.addEventListener("close", () => rej(new Error("close"))); + props.onAbort(() => ws.close()); + }); +} + +function WsDemo() { + const ref = React.useRef(); + const { + state: {status, data}, + run, + abort + } = useAsyncState.auto(remoteProducer); + return ( +
    +

    Ws demo

    +

    status is {status}

    +

    State value is:
    {JSON.stringify(data ?? [], null, 4)}
    +

    + {status === "error" &&

    State error is:
    {data?.toString()}

    } + +
    + + + +
    + ); +} + +function intervalProducer(props) { + let intervalId = setInterval(() => props.emit(old => old.data + 1), 1000); + props.onAbort(() => clearInterval(intervalId)); + return props.args[0] ?? 0; +} + +function IntervalDemo() { + const {state: {data}, run, abort} = useAsyncState.auto(intervalProducer); + return ( +
    +

    Interval demo

    +

    State value is:
    {JSON.stringify(data ?? [], null, 4)}
    +

    + + +
    + ); +} + +export default function DemoDemo() { + + return ( + <> + +
    + +
    + + + ); +} + +function demoProducer(props) { + props.run("posts"); + console.log('posts state', props.select("posts")); + return null; +} + +function ProducerRunPropsDemo() { + const {state: {data}, run, abort} = useAsyncState.auto(demoProducer); + const {state: postsState} = useAsyncState.lazy("users"); + return ( +
    +

    run effects demo

    +

    State value is:
    {JSON.stringify(data ?? [], null, 4)}

    + +

    posts state value + is:
    {JSON.stringify(postsState ?? {}, null, 4)}
    +

    + + +
    + ); +} diff --git a/packages/example/src/past/LanesDemo.js b/packages/example/src/past/LanesDemo.js new file mode 100644 index 00000000..0a59fc03 --- /dev/null +++ b/packages/example/src/past/LanesDemo.js @@ -0,0 +1,184 @@ +import React from "react"; +import { + createSource, + useAsyncState, + AsyncStateProvider, + useRunLane, +} from "react-async-states"; + +function getUserDetails({onAbort, payload: {id}}) { + const controller = new AbortController(); + + onAbort(() => { + controller.abort() + }); + + return fetch( + `https://jsonplaceholder.typicode.com/users/${id}`, + {signal: controller.signal} + ).then(r => r.json()); +} + +const userDetailsSource = createSource( + "user-details", + getUserDetails, + { + cacheConfig: { + enabled: true, + getDeadline: () => 2000, + hash: (_, payload) => payload.id, + load: () => JSON.parse(localStorage.getItem("haha")), + persist: c => localStorage.setItem("haha", JSON.stringify(c)), + } + } +); + +export function LanesDemo() { + const ref = React.useRef(); + const [state, setState] = React.useState([]); + + return ( + + + +
    + +
    + {state.map((userId, i) => )} + + +
    +
    +
    +
    +
    + +
    + ); +} + +function UserDetails({userId}) { + const {state, run} = useAsyncState({ + lazy: false, + lane: userId, + payload: {id: userId}, + source: userDetailsSource, + }) + + return ( +
    +
    + User {userId} details -- status is {state.status} + + +
    +          {JSON.stringify(state, null, 4)}
    +        
    +
    +
    + ); +} + +function UserDetailsRoot() { + const {state} = useAsyncState({ + source: userDetailsSource, + }) + + return ( +
    +
    + User details root state +
    +          {JSON.stringify(state, null, 4)}
    +        
    +
    +
    + ); +} + + +function runProducer(props) { + const {args: [lane]} = props; + + props.run('user-details', {lane}) +} + +async function runpProducer(props) { + const {args: [lane]} = props; + + const result = await props.runp('user-details', {lane}) + return 1; +} + +function PropsRunsDemo() { + const ref = React.useRef(); + + const runLane = useRunLane(); + // const {run} = useAsyncState(runProducer) + // const {run: runp} = useAsyncState(runpProducer) + + + return ( +
    + + + +
    + ); +} + +function countersProducer(props) { + let intervalId = setInterval(() => props.emit(old => old.data + 1), 1000); + props.onAbort(() => clearInterval(intervalId)); + return props.lastSuccess.data; +} + +const countersSource = createSource( + "counters", + countersProducer, + {initialValue: 0}, +); + +export default function LanesIntervalDemo() { + return ( +
    + + + +
    + ); +} + +function CounterSub({counterKey = "default"}) { + const {state: {data}, run, abort} = useAsyncState({ + lane: counterKey, + source: countersSource, + }); + return ( +
    + + + + counter-{counterKey}-{data} + +
    + ); +} diff --git a/packages/example/src/past/Navigation.js b/packages/example/src/past/Navigation.js new file mode 100644 index 00000000..54a6af6a --- /dev/null +++ b/packages/example/src/past/Navigation.js @@ -0,0 +1,72 @@ +import React from "react"; +import { Link } from "react-router-dom"; +import { useAsyncState, useSelector } from "react-async-states"; + +function Resume() { + const {state} = useAsyncState({ + key: "login-form", + selector: state => { + return Object.entries(state.data ?? {}).map(([key, value]) => `${key}=${value}`).join('&'); + } + }) + + return {state}; +} + +const exampleSelector = ({["login-form"]: lf, ["user_input"]: ui}) => { + return [Object.entries(lf?.data ?? {}).map(([key, value]) => `${key}=${value}`).join('&'), ui?.data]; +}; + +function keysSelector() { + return ["login-form", "user_input"]; +} + +function ResumeS() { + const [state, ui] = useSelector(keysSelector, exampleSelector); + + // console.log('________', state, ui) + return {state} - {ui}; +} + +export default function Navigation() { + return ( +
      +
    • + +
    • +
    • + Basique usage +
    • +
    • + Routing +
    • +
    • + Reducers +
    • +
    • + Lanes +
    • +
    • + Standalone +
    • +
    • + Selectors +
    • +
    • + Redux +
    • +
    • + Next +
    • +
    • + Demo +
    • +
    • + Emit +
    • +
    • + Broker +
    • +
    + ); +} diff --git a/packages/example/src/past/NextDemo.js b/packages/example/src/past/NextDemo.js new file mode 100644 index 00000000..5bb5338b --- /dev/null +++ b/packages/example/src/past/NextDemo.js @@ -0,0 +1,183 @@ +import React from "react"; +import { + createSource, + StateBoundary, + useAsyncState +} from "react-async-states"; + +function fetchUser(id) { + return fetch(`https://jsonplaceholder.typicode.com/users`) + .then(s => { + if (Math.random() < 0.5) { + throw new Error('RANDOM ERROR'); + } + if (s.status !== 200) { + throw "user not found"; + } + return s; + }) + .then(s => s.json()); +} + +const user1Source = createSource("user1", () => fetchUser(12)); +const user2Source = createSource("user2", () => fetchUser(2)); +const userPayloadSource = createSource("userPayload", props => fetchUser(props.payload.userId)); + +function timeout(delay) { + return new Promise(res => { + setTimeout(res, delay) + }); +} + +const usersList = createSource("global", () => timeout(400).then(() => fetchUser(11))) + +export default function Demo() { + return ( + + ); +} + +function Log({alias}) { + console.log('async state component child', alias) + return null +} + +function Error({state, run}) { + console.log('state ERROR COMPO', state) + return ( + + ); +} + +function Loading({state: {status}, abort, run}) { + if (status === "aborted") { + return ; + } + return ; +} + +function UsersList() { + const result = useAsyncState(usersList); + const {state, run} = result; + + console.log('LIST', result.state) + return
    + +
    {JSON.stringify(state.data, null, 4)}
    +
    +} + +function NextDemo() { + return <> + + {(state) => ( +
    + success! + {JSON.stringify(state, null, 2)} +
    + )} +
    + ; +} + +let debounceIndex = 0; +let ThrottleIndex = 0; + +function producer(props) { + let timeoutId; + props.onAbort(() => !console.log('clearing timeout') && clearTimeout(timeoutId)); + return new Promise(res => timeoutId = setTimeout(() => !console.log('invoking producer!', props.args[0]) && res(props.args[0]), 200)); +} + +function RunEffectsDemo() { + + const { + run: runDebounced, + state: {status: debouncedRunning, data: debounceIndexState} + } = useAsyncState({ + producer, + initialValue: 0, + runEffect: "delay", + runEffectDurationMs: 1000 + }); + const { + run: runThrottled, + state: {status: throttledRunning, data: throttleIndexState} + } = useAsyncState({ + producer, + initialValue: 0, + runEffect: "throttle", + runEffectDurationMs: 2000 + }); + + + return ( +
    + + +
    + ); +} + + +function TearingDemo() { + + return ( + <> + + + + + + ); +} + +function tearingProducer(props) { + return new Promise((resolve, reject) => { + function listener(e) { + props.emit({x: e.clientX, y: e.clientY}); + } + + document.addEventListener("mousemove", listener); + props.onAbort(() => document.removeEventListener("mousemove", listener)); + + resolve({x: 0, y: 0}); + }); +} + +function TearingExample({title}) { + const {state: {data}} = useAsyncState.auto(tearingProducer); + const {state: {data: data2}} = useAsyncState.auto(tearingProducer); + const {state: {data: data3}} = useAsyncState.auto(tearingProducer); + const {state: {data: data4}} = useAsyncState.auto(tearingProducer); + const different = data?.x !== data2?.x || data?.y !== data2?.y + || data?.x !== data3?.x || data?.y !== data3?.y || + data?.x !== data4?.x || data?.y !== data4?.y; + + return ( +
    + {different &&

    ____SEE HERE____

    } +

    Tearing example: {title}

    +
    +        {JSON.stringify((data ?? {}), null, 4)}
    +      
    +
    +
    + ); +} diff --git a/packages/example/src/past/Provider.js b/packages/example/src/past/Provider.js new file mode 100644 index 00000000..f04ddf34 --- /dev/null +++ b/packages/example/src/past/Provider.js @@ -0,0 +1,94 @@ +import React from "react"; +import { useLocation } from "react-router-dom"; +import { AsyncStateProvider, createSource } from 'react-async-states'; +import { + getUserProducer, + postsProducer, + timeoutProducer, + usersProducer +} from "./producers"; + +export const demoAsyncStates = { + timeout: {key: "timeout", producer: timeoutProducer(4000)}, + + users: createSource("users", usersProducer, { + runEffect: "throttle", + runEffectDurationMs: 3000, + skipPendingDelayMs: 300, + cacheConfig: { + enabled: false, + hash(args, payload) { + return "users"; + }, + getDeadline: () => 50000, + load() { + return JSON.parse(localStorage.getItem("users-cache")); + }, + persist(st) { + localStorage.setItem("users-cache", JSON.stringify(st)); + } + } + }), + + posts: { + key: "posts", + producer: postsProducer, + config: { + cacheConfig: { + enabled: true, + hash(args, payload) { + return "posts"; + }, + getDeadline: () => 50000, + load() { + return new Promise((res) => { + setTimeout(() => { + res(JSON.parse(localStorage.getItem("posts-cache"))) + }, 5000) + }); + }, + persist(st) { + localStorage.setItem("posts-cache", JSON.stringify(st)); + } + } + } + }, + + getUser: { + key: "get-user", + producer: getUserProducer, + config: { + skipPendingDelayMs: 400, + cacheConfig: { + enabled: false, + hash(args, payload) { + return `user-${payload?.matchParams?.userId}`; + }, + getDeadline: () => 1000 * 60 * 5, + load() { + // console.log('loading users cache!', JSON.parse(localStorage.getItem("users-cache"))); + return JSON.parse(localStorage.getItem("users-cache")); + }, + persist(st) { + // console.log('saving users cache!', st); + localStorage.setItem("users-cache", JSON.stringify(st)); + } + }, + } + }, +} +export const asyncStatesDemo = Object.values(demoAsyncStates); + +export default function DemoProvider({children}) { + const location = useLocation(); + + const payload = React.useMemo(function getPayload() { + return {location}; + }, [location]); + + return ( + + {children} + + ); +} diff --git a/packages/example/src/past/ReducersDemo.js b/packages/example/src/past/ReducersDemo.js new file mode 100644 index 00000000..83177618 --- /dev/null +++ b/packages/example/src/past/ReducersDemo.js @@ -0,0 +1,72 @@ +import React from "react"; +import { useAsyncState } from "react-async-states"; +import { demoAsyncStates } from "./Provider"; + +function Wrapper({children, initialValue = true}) { + const [visible, setVisible] = React.useState(initialValue); + return ( + + +
    + {visible && children} +
    + ); +} + +function TimeoutSubscription({ mode }) { + const {state: {status}, key, run} = useAsyncState[mode](demoAsyncStates.timeout.key); + + return ( +
    + {`${status}-${key}`} + +
    + ); +} + +export default function Demo() { + + return ( + <> + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + waiting demo +

    + + + + +

    +
    + + ); +} + +function WaitingDemo() { + const {key, state, run, mode} = useAsyncState({key: "waiting_demo", selector: s => s.data}); + + return + {mode+" waiting for state: " + key + " , " + JSON.stringify(state ?? {})} + + ; +} + +function WaitingHoister() { + const {state} = useAsyncState({key: "waiting_demo", hoistToProvider: true, initialValue: "haha", producer: props => props.args[0] ?? 5}); + + return "hoister:" + JSON.stringify(state); +} diff --git a/packages/example/src/past/ReduxDemo.js b/packages/example/src/past/ReduxDemo.js new file mode 100644 index 00000000..69f8a687 --- /dev/null +++ b/packages/example/src/past/ReduxDemo.js @@ -0,0 +1,63 @@ +import React from "react"; +import { createSource, useAsyncState } from "react-async-states"; + +function* reduxProducer(props) { + yield props.lastSuccess.data.store.dispatch(...props.args, props); + return props.lastSuccess.data; +} + +const initialRedux = {}; // createReduxStore(reducers, middlewares...); +const reduxSource = createSource("redux", reduxProducer, {initialValue: initialRedux}); + +export default function Demo() { + + return ( + <> + +
    +
    +
    +
    +
    + + + ); +} + +function useBetterSimpleState(config, deps) { + const asyncState = useAsyncState(config, deps); + return [asyncState.state, asyncState.run]; +} + +function DemoDemo() { + const {state: {status}, lastSuccess: {data: lastSuccessData}, run} = useAsyncState({ + key: "some-name", + hoistToProvider: true, + producer: (props) => { // ./producers.js but works as inline + const controller = new AbortController(); + const {signal} = controller; + props.onAbort(() => controller.abort()); + return fetch(`https://jsonplaceholder.typicode.com/users/${props.args[0]}`, {signal}).then(res => res.json()) + }, + }); + + return
    + {status === "pending" && "loading..."} + {status !== "error" &&
    user is:
    {lastSuccessData?.id}
    } + +
    +} + +function DemoDemoSUb() { + const {state: username, lastSuccess, run} = useAsyncState({ + key: "some-name", + selector: s => s.data?.name, + }); + + return ( +
    + name is: {username} + +
    + ); +} diff --git a/packages/example/src/past/ReplaceStateDemo.js b/packages/example/src/past/ReplaceStateDemo.js new file mode 100644 index 00000000..64150e3a --- /dev/null +++ b/packages/example/src/past/ReplaceStateDemo.js @@ -0,0 +1,42 @@ +import React from "react"; +import { useAsyncState } from "react-async-states"; + +function producerA(props) { + const {userId} = props.payload; + console.log('producerA is running', userId, props); + return props.runp(producerB, null, userId).then(t => t.data); +} + +function producerB(props) { + const [id] = props.args; + console.log('producerC is running', id, props); + let emitCount = 0; + props.onAbort( + props.run(function anotherProducer(otherProps) { + let itId = setInterval(() => { + if (emitCount < 5) { + emitCount += 1; + otherProps.onAbort( + otherProps.run("counter", null, old => (old.data ?? 0) + 1) + ); + } + }, 1000); + otherProps.onAbort(() => clearInterval(itId)); + }) + ); + return fetch("https://jsonplaceholder.typicode.com/users/" + id).then(res => res.json()); +} + +export default function Demo() { + const {state, abort, run} = useAsyncState.auto({producer: producerA, payload: {userId: 1}}); + console.log('state#####', state); + return ( +
    + + +
    {JSON.stringify(state, null, 2)}
    +
    + ); +} diff --git a/packages/example/src/past/RoutingDemo.js b/packages/example/src/past/RoutingDemo.js new file mode 100644 index 00000000..94e8343a --- /dev/null +++ b/packages/example/src/past/RoutingDemo.js @@ -0,0 +1,106 @@ +import React from "react"; +import { useNavigate, useParams } from "react-router-dom"; +import { useAsyncState } from "react-async-states"; +import { demoAsyncStates } from "./Provider"; + +export default function Demo() { + const ref = React.useRef(); + const navigate = useNavigate(); + const params = useParams(); + + const { + mode, + uniqueId, + state: {status, data}, + abort + } = useAsyncState({ + fork: true, + subscriptionKey: "hahaha", + lazy: false, + payload: {matchParams: params}, + key: demoAsyncStates.getUser.key, + // this function does not depend on render and may be static + selector(current, lastSuccess, cache) { + if (cache?.[`user-${params.userId}`]) { + return cache[`user-${params.userId}`].state; + } + return current; + }, + // this object does not depend on render and may be static + // cacheConfig: { + // enabled: false, + // getDeadline: state => state.data?.maxAge || 5000, + // load: () => JSON.parse(localStorage.getItem("users-cache-demo")), + // hash: (args, payload) => `user-${payload?.matchParams?.userId}`, + // persist: cache => localStorage.setItem("users-cache-demo", JSON.stringify(cache)) + // }, + // this function does not depend on render and may be static + events: { + // subscribe({getState, run}) { + // const state = getState(); + // if (!state || state.status === "pending") { + // return; + // } + // const onFocus = () => run(); + // window.addEventListener("focus", onFocus); + // return () => window.removeEventListener("focus", onFocus); + // }, + change({state}) { + console.log("state changed!____________", state) + } + } + }, [params]); + + console.log('render', mode, uniqueId) + + function onSubmit(e) { + e.preventDefault(); + navigate(`/users/${ref.current.value}`) + } + + return ( +
    +
    + +
    + <> + {status === "pending" && ( + <> + + Loading... + + )} + + + +
    +          
    + {JSON.stringify(data, null, " ")} +
    +
    +
    +
    + ); +} + +let id = 1; + +function next() { + return ++id; +} + +function SourceForkExample({source}) { + const data = useAsyncState({ + lazy: false, + source, + subscriptionKey: `SourceForkExample-${source?.key}-SELF`, + payload: {userId: id}, + fork: true, + forkConfig: {key: `SourceForkExample-${source?.key}`} + }); + return ; +} diff --git a/packages/example/src/past/SelectorsDemo.js b/packages/example/src/past/SelectorsDemo.js new file mode 100644 index 00000000..c2d06c4c --- /dev/null +++ b/packages/example/src/past/SelectorsDemo.js @@ -0,0 +1,111 @@ +import React from "react"; +import { + useAsyncState, + useSelector +} from "react-async-states"; + +function reducer(old, name, value) { + // console.log('running', name, value); + return {...old, [name]: value}; +} +function createReducerProducer(reducerFn) { + if (typeof reducerFn !== "function") { + throw new Error( + `Reducer producer creator expects reducerFn to be a function.` + + ` received ${typeof reducerFn}` + ); + } + return function reducer(props) { + return reducerFn( + props.lastSuccess.data, + ...props.args + ); + } +} +const size = 5; +export default function Demo() { + // console.log('___________APP_____________') + // React.useEffect(() => { + // console.log('---------App effect----------') + // return () => console.log('----------App cleanup------------') + // }) + useAsyncState({ + lazy: true, + key: "login-form", + hoistToProvider: true, + initialValue: {hello: "world!"}, + producer: createReducerProducer(reducer), + }); + + return ( +
    +

    This is a controlled dynamic form of size: {size}

    + +
    + {/*
    */} + {/*

    Function selector

    */} + {/* */} + {/*
    */} +
    + ); +} + +function keysSelector(allKeys) { + return allKeys.filter(key => key.match(new RegExp('timeout|login-form', 'g'))); +} + +function selectorFunctionDemo(states) { + // console.log('function selector, from', states); + return states; +} + +function FunctionSelectorDemo() { + const t = useSelector(keysSelector, selectorFunctionDemo); + + return
    {JSON.stringify(t, null, "    ")}
    ; +} + + +function DynamicForm({initialSize}) { + const name = React.useRef(); + + const [fields, setFields] = React.useState(() => [...Array(initialSize).keys()].map(t => ({name: `name_${t}`}))); + // console.log('___________________dynamic form____________________') + return ( +
    +
    + {fields.map(field => )} +
    +
    + + +
    + ) +} + +function Input({name}) { + const {mode, state, run, uniqueId} = useAsyncState + .lazy({ + key: "login-form", + selector: s => s.data[name] + }, [name]); + + React.useEffect(() => run(name, "init_" + name), []) + + const data = state; // .data[name]; + + // console.log('____________INPUT_____ss_______', name, data, uniqueId, mode) + return ( run(name, value)} + />); +} + +const RealInput = React.memo(Input, () => true); diff --git a/packages/example/src/past/StandaloneDemo.js b/packages/example/src/past/StandaloneDemo.js new file mode 100644 index 00000000..e9dfc900 --- /dev/null +++ b/packages/example/src/past/StandaloneDemo.js @@ -0,0 +1,50 @@ +import React from "react"; +import { useProducer, useAsyncState } from "react-async-states"; +import { usersProducer } from "./producers"; + +export default function Demo() { + return ( +
    +

    Anonymous example

    +
    +
    + ); +} + +function SourceExample() { + const {key, state: {status, data}, run, abort} = useProducer(usersProducer); + + return ( +
    + key: {key}
    + status: {status}
    +
    +
    + data: {JSON.stringify(data, null, " ")}
    +
    + +
    + ); +} + +let producer = function(props) { + console.log('running', props.payload, ...props.args); + return props.args[0]; +}; + +function NewDemo() { + const [userId, setUserId] = React.useState("0"); + const {state, run, abort, replay} = useAsyncState({producer, payload: {userId}}, [userId]); + + + return ( +
    + setUserId(e.target.value)} value={userId} /> + + + + {state.status === "pending" && } + status is: {state.status} +
    + ); +} diff --git a/packages/example/src/past/Subscription.js b/packages/example/src/past/Subscription.js new file mode 100644 index 00000000..f38ca4a5 --- /dev/null +++ b/packages/example/src/past/Subscription.js @@ -0,0 +1,144 @@ +import React from "react"; +import { isEqual } from "lodash"; +import { useAsyncState, useSelector, AsyncStateProvider } from 'react-async-states'; +import { asyncStatesDemo } from "./Provider"; + + +function timeout(delay, ...resolveValues) { + return new Promise(resolve => setTimeout(() => resolve(...resolveValues), delay)); +} + +function curriedTimeout(delay) { + return function curryImpl(...args) { + return timeout(delay, ...args); + } +} + +export function Subscription({asyncStateConfig}) { + + const {state, run, abort} = useAsyncState(asyncStateConfig, []); + + return ( + +
    + {state.status === "pending" && + } +
    +        {state.status}
    +      
    + {asyncStateConfig?.fork && "THIS IS A FORK"} +
    + ); +} + +function usersSelector(usersState, postsState) { + if (!usersState || !postsState || usersState.status === "pending" || postsState.status === "pending") { + return undefined; + } + let user = usersState?.data?.find?.(t => t.id = 1); + let posts = postsState?.data?.find?.(t => t.userId = 1); + if (user && posts) { + return {...user, posts} + } + return undefined; +} + +function SelectorDemo() { + const selectedValue = useSelector(["users", "posts"], usersSelector, isEqual); + + return
    SELECTOR + VALUE:
    {JSON.stringify(selectedValue ?? {}, null, "  ")}
    +} + +export default function Wrapper() { + return ( + + {/*
    */} + {/**/} + {/**/} + {/**/} + {/*
    */} + {/*
    */} + + {/**/} +
    + + ); +} + + +const undefinedProducer = { + initialValue: "", + hoistToProvider: true, + key: "undefined_producer", +}; + +function ReplaceStateOriginal() { + const { + key, + version, + setState, + state: {data} + } = useAsyncState(undefinedProducer, []); + + return ( + <> +

    {version}-{data}

    + setState(e.target.value)}/> + + ); +} + +function ReplaceStateListener() { + const {state: {status, data}} = useAsyncState(undefinedProducer.key, []); + + return ( + <> +

    {status}-{data}

    + + ); +} + + +const reducerProducer = { + key: "reducer_producer", + hoistToProvider: false, + producer(props) { + const {args: [userInput]} = props; + if (userInput > 10) { + return "OK good!"; + } + return "KO !!" + }, + lazy: false +}; + +function ReducerDemo() { + const inputRef = React.useRef(); + const {state: {status, data}, run} = useAsyncState(reducerProducer, []); + + return ( +
    + {status}-{data} + + +
    + ); +} diff --git a/packages/example/src/past/bug.js b/packages/example/src/past/bug.js new file mode 100644 index 00000000..1033be77 --- /dev/null +++ b/packages/example/src/past/bug.js @@ -0,0 +1,110 @@ +import React from "react"; +import { useAsyncState, AsyncStateProvider } from "react-async-states"; + +function timeout(delay, resolveValue, setTimeoutId) { + return new Promise(function resolver(resolve) { + setTimeoutId( + setTimeout(() => { + resolve(resolveValue); + }, delay) + ); + }); +} + +function* doSomething(props) { + const searchValue = props.args[0]; + const delay = !searchValue ? 0 : 3000 / searchValue.length; + let timeoutId = null; + props.onAbort(() => clearTimeout(timeoutId)); + + const returnValue = yield timeout(delay, searchValue, (id) => { + timeoutId = id; + }); + yield props.payload.onSuccess(); + + return returnValue; +} + +function randomInt(min = 0, max = 255) { + return Math.floor(Math.random() * (max - min + 1) + min); +} + +function randomColor() { + return `rgb(${randomInt()}, ${randomInt()},${randomInt()})`; +} + +function AppWrapped() { + const { + state: { status, data, props }, + abort, + run + } = useAsyncState.hoist({ + producer: doSomething, + key: "do-something", + payload: { + onSuccess() { + document.body.style.backgroundColor = randomColor(); + } + } + }); + const { + state, + replaceState + } = useAsyncState({ key: "do-something" }); + + if (!state) { + return "waiting!"; + } + + const { data: value } = state; + + return ( +
    + replaceState(e.target.value)} + placeholder="type something---" + /> +
    + run(e.target.value)} + placeholder="type something" + /> +
    +

    Search value: {JSON.stringify(props?.args?.[0])}

    +
    +

    status: {status}

    + {status === "pending" && ( + + )} + {status === "aborted" && ( + + )} +

    Data: {data}

    +
    + ); +} + +const empty_array = []; +export default function App() { + return ( + + + + + ); +} + +function SomethingElse() { + const { lastSuccess } = useAsyncState("do-something"); + + return ( +
    +
    +
    +
    {JSON.stringify(lastSuccess, null, "  ")}
    +
    + ); +} diff --git a/packages/example/src/past/index.js b/packages/example/src/past/index.js new file mode 100644 index 00000000..5cf19674 --- /dev/null +++ b/packages/example/src/past/index.js @@ -0,0 +1,8 @@ +import React from 'react' +import ReactDOM from 'react-dom' + +import './index.css' +import App from './App'; + +// ReactDOM.createRoot(document.getElementById('root')).render(); +ReactDOM.render(, document.getElementById('root')); diff --git a/packages/example/src/past/producers.js b/packages/example/src/past/producers.js new file mode 100644 index 00000000..2c325493 --- /dev/null +++ b/packages/example/src/past/producers.js @@ -0,0 +1,57 @@ +export function timeoutProducer(delay = 2000) { + return function delayed(props) { + let timeoutId; + props.onAbort(function cancelTimeout() { + clearTimeout(timeoutId); + }); + + return new Promise(function delayed(resolve) { + timeoutId = setTimeout(function timeouted() { + console.log(`timeout of delay '${delay}' has collapsed!`) + return resolve(); + }, delay); + }); + } +} + +// function returns state value +// props + +export function* usersProducer(props) { + const controller = new AbortController(); + const {signal} = controller; + let timeoutId; + props.onAbort(function abortSignal() { + clearTimeout(timeoutId); + controller.abort(); + }); + + return yield new Promise(res => timeoutId = setTimeout(res, 0)) + .then(() => fetch('https://jsonplaceholder.typicode.com/users', {signal}) + .then(res => res.json())); +} + +export function postsProducer(props) { + const controller = new AbortController(); + const {signal} = controller; + props.onAbort(function abortSignal() { + controller.abort(); + }); + + return fetch('https://jsonplaceholder.typicode.com/posts', {signal}) + .then(res => res.json()); +} + +export function getUserProducer(props) { + const controller = new AbortController(); + const {signal} = controller; + props.onAbort(function abortSignal() { + controller.abort(); + }); + + return fetch(`https://jsonplaceholder.typicode.com/users/${props.payload?.matchParams?.userId}`, {signal}) + .then(res => res.json()); +} + +export function reducerDemo() { +} diff --git a/packages/example/src/past/v2/App.js b/packages/example/src/past/v2/App.js new file mode 100644 index 00000000..330b898e --- /dev/null +++ b/packages/example/src/past/v2/App.js @@ -0,0 +1,28 @@ +import React from "react"; +import { BrowserRouter as Router, Link, Route, Routes } from "react-router-dom"; +import DemoProvider from "./core/AsyncStateProvider"; +import UsersPage, { UserDetailsPage } from "./domain/users"; + +export default function App() { + return ( + + +
    +
      +
    • + Users list +
    • +
    • + User details +
    • +
    +
    + + } /> + } /> + +
    +
    +
    + ); +} diff --git a/packages/example/src/past/v2/Bug.js b/packages/example/src/past/v2/Bug.js new file mode 100644 index 00000000..b153bbab --- /dev/null +++ b/packages/example/src/past/v2/Bug.js @@ -0,0 +1,89 @@ +import { + AsyncStateProvider, + createSource, + useAsyncState +} from "react-async-states"; +import React from "react"; + +function load() { + if (typeof window !== "undefined" && typeof window.localStorage !== "undefined") { + console.log('loading', localStorage?.getItem("remix-cache-users")); + return localStorage.getItem("remix-cache-users"); + } +} + +function persist(cache) { + console.log('persisting!!', cache); + if (typeof window !== "undefined" && typeof window.localStorage !== "undefined") { + localStorage?.setItem("remix-cache-users", JSON.stringify(cache)) + } +} + +const timeout = createSource( + 'timeout', + producer, + { + cacheConfig: { + load, + persist, + enabled: true, + hash: () => !console.log('hashing') && "users", + getDeadline: () => 5000, + } + }); + + +function usersProducer(props) { + const controller = new AbortController(); + const {signal} = controller; + props.onAbort(function abortSignal() { + controller.abort(); + }); + return fetch('https://jsonplaceholder.typicode.com/users', {signal}) + .then(res => res.json()) +} + + +function producer(props) { + return new Promise(res => { + let id = setTimeout(() => res("12"), 2000); + props.onAbort(() => clearInterval(id)); + }); +} + +export default function Index() { + return ( + + ); +} + +function Test() { + const {run, mode, state, source} = useAsyncState.auto({ + key: "users", + skipPendingDelayMs: 500, + hoistToProvider: true, + hoistToProviderConfig: {}, + producer(props) { + return fetch(`https://jsonplaceholder.typicode.com/users`) + .then(s => { + if (s.status !== 200) { + throw "user not found"; + } + return s; + }) + .then(s => s.json()); + }, + }); + + console.log(mode, state?.status, source?.uniqueId); + return ( +
    + +
    +
    +          {JSON.stringify(state, null, 4)}
    +        
    +
    +
    + ); +} diff --git a/packages/example/src/past/v2/Bug2.js b/packages/example/src/past/v2/Bug2.js new file mode 100644 index 00000000..4235261e --- /dev/null +++ b/packages/example/src/past/v2/Bug2.js @@ -0,0 +1,202 @@ +import React from "react"; +import { + AsyncStateProvider, + useAsyncState, + useSelector, +} from "react-async-states"; + +function Wrapper({children, initialValue = false}) { + const [mounted, setMounted] = React.useState(initialValue); + + + return ( +
    + + + {mounted && children} +
    + ); +} + +let meter = 0; + +function newOne(key) { + return { + key, + config: { + initialValue: key.length, + } + }; +} + +export default function App() { + const inputRef = React.useRef(); + const [asyncStates, setAsyncStates] = React.useState({}); + + function onClick() { + if (inputRef.current?.value) { + setAsyncStates(old => ({ + ...old, + [inputRef.current.value]: newOne(inputRef.current.value) + })) + } + } + + return ( + <> +
    + + +
    + + + + + + {Object.keys(asyncStates).map((t, i) => )} +
    + {/**/} + {/**/} +
    +
    + {/**/} +
    +
    + + + + {/**/} + +
    +
    + + ); +} + +function Father() { + const {mode, state, uniqueId, run} = useAsyncState({ + key: "counter", + initialValue: 0, + hoistToProvider: true + }); + return ; +} + +function Sibling() { + const {run, mode, state, uniqueId} = useAsyncState("counter"); + return ( + + ); +} + +function HoistSomething() { + useAsyncState.hoist({ + key: "atyuu", + initialValue: 15, + }) + return "I did hoist something"; +} + +function DynamicSubscribe() { + const inputRef = React.useRef(); + const [asyncStates, setAsyncStates] = React.useState([]); + + function onClick() { + if (inputRef.current?.value) { + setAsyncStates(old => ([...old, inputRef.current?.value])) + } + } + + return ( +
    + + +
    +
    +
    + {asyncStates.map((t, i) => )} +
    +
    + ); +} + +function SimpleSub({subKey}) { + const {mode, state, run} = useAsyncState({ + key: subKey, + selector: t => ({...t}) + }, [subKey]); + + function onClick() { + run(old => old.data + 1) + } + + return ( +

    + +

    + ) +} + +function selectAll(all) { + return all; +} + +function EveryThingInsideProvider() { + const everything = useSelector(() => "counter"); + + + return ( +
      + {Object.entries(everything).map(([key, state], i) => ( +
    • +
      {key} - {state?.data}
      +
    • + ))} +
    + ) +} + +function SubscribeToWithInput() { + const [key, setKey] = React.useState(''); + const result = useAsyncState(key, [key]) + console.log('result', result.mode, result.uniqueId, result.state); + + return ( +
    +
    +
    + setKey(e.target.value)}/> +
    +
    {JSON.stringify(result, null, 4)}
    +
    +
    + +
    + ); +} + +function id(allIds) { + return allIds.filter(t => t.startsWith("a")); +} + + +function SelectorV2Example() { + + return ( +
    +
    +        {JSON.stringify(useSelector(id), null, 4)}
    +      
    +
    + ); +} diff --git a/packages/example/src/past/v2/Bug3.js b/packages/example/src/past/v2/Bug3.js new file mode 100644 index 00000000..45a16e55 --- /dev/null +++ b/packages/example/src/past/v2/Bug3.js @@ -0,0 +1,125 @@ +import axios from "axios"; +import { Routes, Route, BrowserRouter as Router } from "react-router-dom"; +import AsyncStateBoundary from "./suspense/abstraction"; +import React from "react"; +import { + createSource, + useAsyncState, +} from "react-async-states"; +import SuspenseComponentTest from "./suspense"; +import SuspenseComponent2Test from "./suspense/index2"; +import SuspenseComponentNestedTest from "./suspense/index-nested"; + +const API = axios.create({ + baseURL: "https://jsonplaceholder.typicode.com" +}); + + +async function fetchUser(props) { + const controller = new AbortController(); + props.onAbort(() => { + controller.abort() + }); + + const [id] = props.args; + + const userId = id ?? 1; + + // let timeoutId; + // await new Promise((res) => {timeoutId = setTimeout(res, 500)}) + // props.onAbort(() => clearTimeout(timeoutId)) + + const promise = API.get("/users/" + userId, { + signal: controller.signal + }); + // debugger; + const usersResponse = await promise; + return usersResponse.data; +} + +const source = createSource("source", fetchUser, {resetStateOnDispose: false}); +source.run() + +const source2 = createSource("source2", fetchUser, {resetStateOnDispose: false}); +source2.run(2); + +const sourceNested = createSource("sourceNested", fetchUser, {resetStateOnDispose: false}); +sourceNested.run(3); + +function DebouncedSpinner() { + const [mounted, setMounted] = React.useState(true); + + React.useEffect(() => { + const id = setTimeout(() => setMounted(true), 400); + return () => clearTimeout(id); + }, []) + + + if (mounted) { + return "Loading..."; + } + return null; +} + +export default function App() { + return ( + + + } config={source}> + + + }/> + } config={source2}> + + + }> + } config={sourceNested}> + + + }/> + + + + ); +} + + +function Subscription() { + const [userId, setUserId] = React.useState(""); + const {read, state, mode, uniqueId} = useAsyncState( + { + source, + lazy: false, + condition: !!userId, + // runEffect: "debounce", + // runEffectDurationMs: 400, + payload: { + userId + } + }, + [userId] + ); + console.log('render!!', mode, uniqueId) + const {status, data, props} = read(); + + return ( +
    + setUserId(e.target.value)}/> +

    Status is: {status}

    + {status === "success" && ( +
    +
    {JSON.stringify(data, null, 4)}
    +
    + )} + {status === "error" && ( +
    + error while retrieving user with id: {props?.payload.userId} +
    {data.toString()}
    +
    + )} +
    + ); +} diff --git a/packages/example/src/past/v2/core/AsyncStateProvider.js b/packages/example/src/past/v2/core/AsyncStateProvider.js new file mode 100644 index 00000000..c0da72ba --- /dev/null +++ b/packages/example/src/past/v2/core/AsyncStateProvider.js @@ -0,0 +1,22 @@ +import React from "react"; +import { useLocation } from "react-router-dom"; +import { AsyncStateProvider } from 'react-async-states'; +import { DOMAIN_USER_PRODUCERS } from "../domain/users/producers"; +import { parseSearch } from "../shared/utils"; + +const staticProducers = Object.freeze({...DOMAIN_USER_PRODUCERS}); + +export default function DemoProvider({children}) { + const location = useLocation(); + const payload = React.useMemo(function getPayload() { + return { + queryString: parseSearch(location.search) + }; + }, [location]); + + return ( + + {children} + + ); +} diff --git a/packages/example/src/past/v2/domain/posts/api.js b/packages/example/src/past/v2/domain/posts/api.js new file mode 100644 index 00000000..e69de29b diff --git a/packages/example/src/past/v2/domain/posts/index.js b/packages/example/src/past/v2/domain/posts/index.js new file mode 100644 index 00000000..e69de29b diff --git a/packages/example/src/past/v2/domain/posts/promises.js b/packages/example/src/past/v2/domain/posts/promises.js new file mode 100644 index 00000000..e69de29b diff --git a/packages/example/src/past/v2/domain/posts/selectors.js b/packages/example/src/past/v2/domain/posts/selectors.js new file mode 100644 index 00000000..e69de29b diff --git a/packages/example/src/past/v2/domain/users/api.js b/packages/example/src/past/v2/domain/users/api.js new file mode 100644 index 00000000..dda80a6d --- /dev/null +++ b/packages/example/src/past/v2/domain/users/api.js @@ -0,0 +1,13 @@ +import { API_JPH, readData } from "../../shared/utils"; + +export function fetchUserData(userId, params) { + return API_JPH.get(`/users/${userId}`, params).then(readData); +} + +export function fetchUsersList(params) { + return API_JPH.get("/users", params).then(readData); +} + +export function fetchUserPosts(userId, params) { + return API_JPH.get(`/users/${userId}/posts`, params).then(readData); +} diff --git a/packages/example/src/past/v2/domain/users/index.js b/packages/example/src/past/v2/domain/users/index.js new file mode 100644 index 00000000..92aa3c37 --- /dev/null +++ b/packages/example/src/past/v2/domain/users/index.js @@ -0,0 +1,186 @@ +import React from "react"; +import { useNavigate, useLocation, useParams } from "react-router-dom"; +import { useAsyncState } from "react-async-states"; +import { DOMAIN_USER_PRODUCERS } from "./producers"; +import { parseSearch, readFormValues } from "../../shared/utils"; + +export default function UsersPage() { + const navigate = useNavigate(); + const search = useLocation().search; + const queryString = parseSearch(search); + const {state: {status, data}, run, abort} = useAsyncState.auto(DOMAIN_USER_PRODUCERS.list.key, [search]); + + function onSubmit(e) { + e.preventDefault(); + + const values = readFormValues(e.target); + navigate("?" + Object.entries(values) + .map(([key, value]) => `${key}=${value}`) + .join("&") + ); + } + + return ( +
    +
    +
    + + + + +
    +
    +

    Users List

    {status === "pending" && ...} + {status !== "pending" && } + {status === "success" && ( +
    + {!data.length && "No results!"} +
      + {data.map(user =>
    • {user.id}-{user.name}-{user.email}
    • )} +
    +
    + )} + {status === "error" &&
    + +
    } +
    + ); +} + +export function UserDetailsPage() { + return ( +
    + +
    + ); +} + +function UserDetailsPageImpl() { + + const navigate = useNavigate(); + const matchParams = useParams(); + + const {state, abort, run} = useAsyncState.auto({ + source: DOMAIN_USER_PRODUCERS.details, + payload: { + userId: matchParams.userId + } + }, [matchParams.userId]); + + function onSubmit(e) { + e.preventDefault(); + + const values = readFormValues(e.target); + navigate(`/users/${values.id}`); + } + + return ( +
    +
    +
    + + +
    +
    +

    Users details

    {state?.status === "pending" && ...} + {state?.status !== "pending" && } + {state?.status === "success" && ( +
    + {!state.data && "No results!"} +
    +            {JSON.stringify(state.data, null, "  ")}
    +          
    +
    + )} + {state?.status === "error" && (
    + +
    +            {JSON.stringify(state?.data, null, "  ")}
    +          
    +
    )} +
    + ); +} + +function UserDetailsPageImpl2() { + const {state: {status, data}, abort, run, mergePayload} = useAsyncState.fork(DOMAIN_USER_PRODUCERS.details); + + function onSubmit(e) { + e.preventDefault(); + + const {id: userId} = readFormValues(e.target); + mergePayload({userId}) + run(); + } + + return ( +
    +
    +
    + + +
    +
    +

    Users details

    {status === "pending" && ...} + {status !== "pending" && } + {status === "success" && ( +
    + {!data && "No results!"} +
    +            {JSON.stringify(data, null, "  ")}
    +          
    +
    + )} + {status === "error" && (
    + +
    +            Error: {typeof data === "string" ? data : JSON.stringify(data, null, 4)}
    +          
    +
    )} +
    + ); +} + +// string, object(), source, object(source), producer function (generator, async await, function returnning anything, sync or astync) + +// const { +// key, +// source, +// +// state, // selector return +// run, +// lastSuccess, +// payload, +// +// abort, +// replaceState, +// mergePayload, +// +// } = useAsyncState({ +// source: null, +// key: "my-key", +// initialValue: 0, // value or function +// +// payload: {}, +// hoistToProvider: true, +// hoistToProviderConfig: {override: false}, +// fork: true, +// forkConfig: {keepState: true, key: "new-key"}, +// +// selector: (s, lastSu) => [], +// areEqual: (prev, next) => true, +// +// producer (props) {} +// }, []); +// +// const props = { +// payload, // combined, __provider__.select/run, principal, queryString, pathname, onSuccess +// +// aborted: false, +// onAbort: cb => cb, +// abort() {}, +// +// args: [], +// lastSuccess: {status, data, props}, +// } diff --git a/packages/example/src/past/v2/domain/users/producers.js b/packages/example/src/past/v2/domain/users/producers.js new file mode 100644 index 00000000..d3b82fae --- /dev/null +++ b/packages/example/src/past/v2/domain/users/producers.js @@ -0,0 +1,47 @@ +import { fetchUserData, fetchUserPosts, fetchUsersList } from "./api"; +import { bindAbortAndCancelToken, omitSearchParams } from "../../shared/utils"; +import { createSource } from "react-async-states"; + +export function* getCurrentUser(props) { + const cancelToken = bindAbortAndCancelToken(props); + + return yield fetchUserData(props.payload.userId, {cancelToken}); +} + +export function getUserDetails(props) { + if (!props.payload.userId) { + throw "userId is required"; + } + const cancelToken = bindAbortAndCancelToken(props); + + return fetchUserData(props.payload.userId, {cancelToken}); +} + +export function* getUsersList(props) { + const cancelToken = bindAbortAndCancelToken(props); + + return yield fetchUsersList({params: omitSearchParams(props.payload.queryString), cancelToken}); +} + +export function* getUserPosts(props) { + const cancelToken = bindAbortAndCancelToken(props); + + return yield fetchUserPosts(props.payload.userId, {cancelToken}); +} + + +export const DOMAIN_USER_PRODUCERS = Object.freeze({ + list: { + key: "users-list", + producer: getUsersList + }, + current: { + key: "current-user", + producer: getCurrentUser + }, + posts: { + key: "user-posts", + producer: getUserPosts + }, + details: createSource("user-details", getUserDetails), +}); diff --git a/packages/example/src/past/v2/routing/index.js b/packages/example/src/past/v2/routing/index.js new file mode 100644 index 00000000..e69de29b diff --git a/packages/example/src/past/v2/shared/utils.js b/packages/example/src/past/v2/shared/utils.js new file mode 100644 index 00000000..9bc2d4ec --- /dev/null +++ b/packages/example/src/past/v2/shared/utils.js @@ -0,0 +1,64 @@ +import axios from "axios"; + +export function promiseOf(resolvedValue) { + return new Promise(function resolver(resolve) { + resolve(resolvedValue); + }) +} + +export function bindAbortAndCancelToken(props) { + const source = axios.CancelToken.source(); + + props.onAbort(function abortCb() { + source.cancel(); + }) + + return source.token; +} + +export const API_JPH = axios.create({ + baseURL: "https://jsonplaceholder.typicode.com" +}); + +export function readJson(response) { + return response.json(); +} + + +export function readData(response) { + return response.data; +} + +export function parseSearch(search) { + if (!search) { + return {}; + } + return Object.fromEntries(new URLSearchParams(search.substring(1))); +} + +export function omitSearchParams(obj) { + if (!obj) { + return obj; + } + const output = {}; + Object.entries(obj) + .forEach(([key, value]) => { + if (value || value === 0) { + output[key] = value; + } + }) + return output; +} + +export function readFormValues(form) { + const formElements = form.elements; + + return [...formElements] + .filter(t => t.value) + .reduce((result, current) => { + if (current.value) { + result[current.name] = current.value; + } + return result; + }, {}); +} diff --git a/packages/example/src/past/v2/suspense/Component.js b/packages/example/src/past/v2/suspense/Component.js new file mode 100644 index 00000000..bd308674 --- /dev/null +++ b/packages/example/src/past/v2/suspense/Component.js @@ -0,0 +1,22 @@ +import React from "react"; +import { Outlet } from "react-router-dom"; +import { useCurrentStateBoundary } from "./abstraction"; + +export default function Component({name}) { + const result = useCurrentStateBoundary(); + + console.log('--component--result', result); + return ( +
    + Im a component!! +
    +
    +          {JSON.stringify({name, result}, null, 4)}
    +        
    +
    + + OUTLET: + +
    + ) +} diff --git a/packages/example/src/past/v2/suspense/Component2.js b/packages/example/src/past/v2/suspense/Component2.js new file mode 100644 index 00000000..bd308674 --- /dev/null +++ b/packages/example/src/past/v2/suspense/Component2.js @@ -0,0 +1,22 @@ +import React from "react"; +import { Outlet } from "react-router-dom"; +import { useCurrentStateBoundary } from "./abstraction"; + +export default function Component({name}) { + const result = useCurrentStateBoundary(); + + console.log('--component--result', result); + return ( +
    + Im a component!! +
    +
    +          {JSON.stringify({name, result}, null, 4)}
    +        
    +
    + + OUTLET: + +
    + ) +} diff --git a/packages/example/src/past/v2/suspense/ComponentNested.js b/packages/example/src/past/v2/suspense/ComponentNested.js new file mode 100644 index 00000000..bd308674 --- /dev/null +++ b/packages/example/src/past/v2/suspense/ComponentNested.js @@ -0,0 +1,22 @@ +import React from "react"; +import { Outlet } from "react-router-dom"; +import { useCurrentStateBoundary } from "./abstraction"; + +export default function Component({name}) { + const result = useCurrentStateBoundary(); + + console.log('--component--result', result); + return ( +
    + Im a component!! +
    +
    +          {JSON.stringify({name, result}, null, 4)}
    +        
    +
    + + OUTLET: + +
    + ) +} diff --git a/packages/example/src/past/v2/suspense/abstraction.js b/packages/example/src/past/v2/suspense/abstraction.js new file mode 100644 index 00000000..eab59594 --- /dev/null +++ b/packages/example/src/past/v2/suspense/abstraction.js @@ -0,0 +1,25 @@ +import React from "react"; +import {useAsyncState} from "react-async-states"; + +const Context = React.createContext(null); + +export function useCurrentStateBoundary() { + return React.useContext(Context); +} + +export default function AsyncStateBoundary({ config, deps, fallback, children }) { + const result = useAsyncState(config, deps); + return ( + + + + {children} + + + ); +} + +function Suspender({reader}) { + reader(); + return null; +} diff --git a/packages/example/src/past/v2/suspense/index-nested.js b/packages/example/src/past/v2/suspense/index-nested.js new file mode 100644 index 00000000..bc335884 --- /dev/null +++ b/packages/example/src/past/v2/suspense/index-nested.js @@ -0,0 +1,11 @@ +import React from 'react'; + +const LazyComponent = React.lazy(() => import('./ComponentNested')); + +export default function SuspenseComponentTest(props) { + return ( + + + + ); +} diff --git a/packages/example/src/past/v2/suspense/index.js b/packages/example/src/past/v2/suspense/index.js new file mode 100644 index 00000000..bf88f5f0 --- /dev/null +++ b/packages/example/src/past/v2/suspense/index.js @@ -0,0 +1,11 @@ +import React from 'react'; + +const LazyComponent = React.lazy(() => import('./Component')); + +export default function SuspenseComponentTest(props) { + return ( + + + + ); +} diff --git a/packages/example/src/past/v2/suspense/index2.js b/packages/example/src/past/v2/suspense/index2.js new file mode 100644 index 00000000..29fe24ee --- /dev/null +++ b/packages/example/src/past/v2/suspense/index2.js @@ -0,0 +1,11 @@ +import React from 'react'; + +const LazyComponent = React.lazy(() => import('./Component2')); + +export default function SuspenseComponentTest(props) { + return ( + + + + ); +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ae03278e..bd47d301 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -68,6 +68,28 @@ importers: react-dom: 18.2.0_react@18.2.0 url-loader: 4.1.1_p5dl6emkcwslbw72e37w4ug7em + packages/example: + specifiers: + async-states-devtools: workspace:* + axios: ^0.21.1 + lodash: ^4.17.21 + prop-types: ^15.6.2 + react: 18.2.0 + react-async-states: workspace:* + react-dom: 18.2.0 + react-router-dom: 6.4.3 + react-scripts: 5.0.1 + dependencies: + async-states-devtools: link:../devtools-extension + axios: 0.21.4 + lodash: 4.17.21 + prop-types: 15.8.1 + react: 18.2.0 + react-async-states: link:../react-async-states + react-dom: 18.2.0_react@18.2.0 + react-router-dom: 6.4.3_biqbaboplfbrettd7655fr4n2y + react-scripts: 5.0.1_uf773njghfwrphsm6ek7wep3um + packages/react-async-states: specifiers: '@rollup/plugin-babel': ^6.0.2 @@ -359,7 +381,6 @@ packages: json-schema: 0.4.0 jsonpointer: 5.0.1 leven: 3.1.0 - dev: true /@babel/code-frame/7.18.6: resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} @@ -429,7 +450,6 @@ packages: eslint: 8.27.0 eslint-visitor-keys: 2.1.0 semver: 6.3.0 - dev: true /@babel/generator/7.20.4: resolution: {integrity: sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==} @@ -735,7 +755,6 @@ packages: '@babel/plugin-syntax-decorators': 7.19.0_@babel+core@7.20.2 transitivePeerDependencies: - supports-color - dev: true /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.20.2: resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} @@ -893,7 +912,6 @@ packages: dependencies: '@babel/core': 7.20.2 '@babel/helper-plugin-utils': 7.20.2 - dev: true /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.2: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} @@ -920,7 +938,6 @@ packages: dependencies: '@babel/core': 7.20.2 '@babel/helper-plugin-utils': 7.20.2 - dev: true /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.20.2: resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} @@ -946,7 +963,6 @@ packages: dependencies: '@babel/core': 7.20.2 '@babel/helper-plugin-utils': 7.20.2 - dev: true /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.20.2: resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} @@ -964,7 +980,6 @@ packages: dependencies: '@babel/core': 7.20.2 '@babel/helper-plugin-utils': 7.20.2 - dev: true /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.2: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} @@ -1191,7 +1206,6 @@ packages: '@babel/core': 7.20.2 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.20.2 - dev: true /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.20.2: resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} @@ -1696,7 +1710,6 @@ packages: /@bcoe/v8-coverage/0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: true /@colors/colors/1.5.0: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} @@ -1713,7 +1726,6 @@ packages: /@csstools/normalize.css/12.0.0: resolution: {integrity: sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==} - dev: true /@csstools/postcss-cascade-layers/1.1.1_postcss@8.4.19: resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} @@ -1724,7 +1736,6 @@ packages: '@csstools/selector-specificity': 2.0.2_45y636a2vqremknoajyxd5nkzy postcss: 8.4.19 postcss-selector-parser: 6.0.10 - dev: true /@csstools/postcss-color-function/1.1.1_postcss@8.4.19: resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} @@ -1735,7 +1746,6 @@ packages: '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /@csstools/postcss-font-format-keywords/1.0.1_postcss@8.4.19: resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} @@ -1745,7 +1755,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /@csstools/postcss-hwb-function/1.0.2_postcss@8.4.19: resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} @@ -1755,7 +1764,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /@csstools/postcss-ic-unit/1.0.1_postcss@8.4.19: resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} @@ -1766,7 +1774,6 @@ packages: '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /@csstools/postcss-is-pseudo-class/2.0.7_postcss@8.4.19: resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} @@ -1777,7 +1784,6 @@ packages: '@csstools/selector-specificity': 2.0.2_45y636a2vqremknoajyxd5nkzy postcss: 8.4.19 postcss-selector-parser: 6.0.10 - dev: true /@csstools/postcss-nested-calc/1.0.0_postcss@8.4.19: resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} @@ -1787,7 +1793,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /@csstools/postcss-normalize-display-values/1.0.1_postcss@8.4.19: resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} @@ -1797,7 +1802,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /@csstools/postcss-oklab-function/1.1.1_postcss@8.4.19: resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} @@ -1808,7 +1812,6 @@ packages: '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /@csstools/postcss-progressive-custom-properties/1.3.0_postcss@8.4.19: resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} @@ -1818,7 +1821,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /@csstools/postcss-stepped-value-functions/1.0.1_postcss@8.4.19: resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} @@ -1828,7 +1830,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /@csstools/postcss-text-decoration-shorthand/1.0.0_postcss@8.4.19: resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} @@ -1838,7 +1839,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /@csstools/postcss-trigonometric-functions/1.0.2_postcss@8.4.19: resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} @@ -1848,7 +1848,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /@csstools/postcss-unset-value/1.0.2_postcss@8.4.19: resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} @@ -1857,7 +1856,6 @@ packages: postcss: ^8.2 dependencies: postcss: 8.4.19 - dev: true /@csstools/selector-specificity/2.0.2_45y636a2vqremknoajyxd5nkzy: resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==} @@ -1868,7 +1866,6 @@ packages: dependencies: postcss: 8.4.19 postcss-selector-parser: 6.0.10 - dev: true /@ctrl/tinycolor/3.4.1: resolution: {integrity: sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==} @@ -2929,7 +2926,6 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true /@hapi/hoek/9.3.0: resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -2950,7 +2946,6 @@ packages: minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true /@humanwhocodes/config-array/0.6.0: resolution: {integrity: sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==} @@ -2966,11 +2961,9 @@ packages: /@humanwhocodes/module-importer/1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - dev: true /@humanwhocodes/object-schema/1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - dev: true /@istanbuljs/load-nyc-config/1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} @@ -2981,12 +2974,10 @@ packages: get-package-type: 0.1.0 js-yaml: 3.14.1 resolve-from: 5.0.0 - dev: true /@istanbuljs/schema/0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - dev: true /@jest/console/27.5.1: resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} @@ -2998,7 +2989,6 @@ packages: jest-message-util: 27.5.1 jest-util: 27.5.1 slash: 3.0.0 - dev: true /@jest/console/28.1.3: resolution: {integrity: sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==} @@ -3010,7 +3000,6 @@ packages: jest-message-util: 28.1.3 jest-util: 28.1.3 slash: 3.0.0 - dev: true /@jest/core/27.5.1: resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} @@ -3055,7 +3044,6 @@ packages: - supports-color - ts-node - utf-8-validate - dev: true /@jest/environment/27.5.1: resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} @@ -3065,7 +3053,6 @@ packages: '@jest/types': 27.5.1 '@types/node': 18.11.9 jest-mock: 27.5.1 - dev: true /@jest/expect-utils/29.3.1: resolution: {integrity: sha512-wlrznINZI5sMjwvUoLVk617ll/UYfGIZNxmbU+Pa7wmkL4vYzhV9R2pwVqUh4NWWuLQWkI8+8mOkxs//prKQ3g==} @@ -3084,7 +3071,6 @@ packages: jest-message-util: 27.5.1 jest-mock: 27.5.1 jest-util: 27.5.1 - dev: true /@jest/globals/27.5.1: resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} @@ -3093,7 +3079,6 @@ packages: '@jest/environment': 27.5.1 '@jest/types': 27.5.1 expect: 27.5.1 - dev: true /@jest/reporters/27.5.1: resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} @@ -3131,14 +3116,12 @@ packages: v8-to-istanbul: 8.1.1 transitivePeerDependencies: - supports-color - dev: true /@jest/schemas/28.1.3: resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@sinclair/typebox': 0.24.51 - dev: true /@jest/schemas/29.0.0: resolution: {integrity: sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==} @@ -3153,7 +3136,6 @@ packages: callsites: 3.1.0 graceful-fs: 4.2.10 source-map: 0.6.1 - dev: true /@jest/test-result/27.5.1: resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} @@ -3163,7 +3145,6 @@ packages: '@jest/types': 27.5.1 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 - dev: true /@jest/test-result/28.1.3: resolution: {integrity: sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==} @@ -3173,7 +3154,6 @@ packages: '@jest/types': 28.1.3 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 - dev: true /@jest/test-sequencer/27.5.1: resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} @@ -3185,7 +3165,6 @@ packages: jest-runtime: 27.5.1 transitivePeerDependencies: - supports-color - dev: true /@jest/transform/27.5.1: resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} @@ -3208,7 +3187,6 @@ packages: write-file-atomic: 3.0.3 transitivePeerDependencies: - supports-color - dev: true /@jest/types/27.5.1: resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} @@ -3219,7 +3197,6 @@ packages: '@types/node': 18.11.9 '@types/yargs': 16.0.4 chalk: 4.1.2 - dev: true /@jest/types/28.1.3: resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} @@ -3231,7 +3208,6 @@ packages: '@types/node': 18.11.9 '@types/yargs': 17.0.13 chalk: 4.1.2 - dev: true /@jest/types/29.3.1: resolution: {integrity: sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==} @@ -3372,7 +3348,6 @@ packages: resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} dependencies: eslint-scope: 5.1.1 - dev: true /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -3445,7 +3420,6 @@ packages: source-map: 0.7.4 webpack: 5.75.0 webpack-dev-server: 4.11.1_webpack@5.75.0 - dev: true /@polka/url/1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} @@ -3485,7 +3459,6 @@ packages: '@babel/helper-module-imports': 7.18.6 '@rollup/pluginutils': 3.1.0_rollup@2.79.1 rollup: 2.79.1 - dev: true /@rollup/plugin-babel/6.0.2_lkvu63hzbahttaf34ikyu7tiyq: resolution: {integrity: sha512-Vnt8XIWYwCf3MD7qhBWYlP9pjSZvcE++nlPXhQYw6YNehl5742AzFbrV6h4BHb20VAOVUlIksVLymQCTwVCGDg==} @@ -3550,7 +3523,6 @@ packages: is-module: 1.0.0 resolve: 1.22.1 rollup: 2.79.1 - dev: true /@rollup/plugin-node-resolve/15.0.1_rollup@3.3.0: resolution: {integrity: sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==} @@ -3578,7 +3550,6 @@ packages: '@rollup/pluginutils': 3.1.0_rollup@2.79.1 magic-string: 0.25.9 rollup: 2.79.1 - dev: true /@rollup/plugin-replace/5.0.1: resolution: {integrity: sha512-Z3MfsJ4CK17BfGrZgvrcp/l6WXoKb0kokULO+zt/7bmcyayokDaQ2K3eDJcRLCTAlp5FPI4/gz9MHAsosz4Rag==} @@ -3630,7 +3601,6 @@ packages: estree-walker: 1.0.1 picomatch: 2.3.1 rollup: 2.79.1 - dev: true /@rollup/pluginutils/3.1.0_rollup@3.3.0: resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} @@ -3683,7 +3653,6 @@ packages: /@rushstack/eslint-patch/1.2.0: resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} - dev: true /@rushstack/node-core-library/3.53.2: resolution: {integrity: sha512-FggLe5DQs0X9MNFeJN3/EXwb+8hyZUTEp2i+V1e8r4Va4JgkjBNY0BuEaQI+3DW6S4apV3UtXU3im17MSY00DA==} @@ -3740,13 +3709,11 @@ packages: resolution: {integrity: sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==} dependencies: type-detect: 4.0.8 - dev: true /@sinonjs/fake-timers/8.1.0: resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} dependencies: '@sinonjs/commons': 1.8.5 - dev: true /@slorber/static-site-generator-webpack-plugin/4.0.7: resolution: {integrity: sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==} @@ -3764,12 +3731,10 @@ packages: json5: 2.2.1 magic-string: 0.25.9 string.prototype.matchall: 4.0.8 - dev: true /@svgr/babel-plugin-add-jsx-attribute/5.4.0: resolution: {integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==} engines: {node: '>=10'} - dev: true /@svgr/babel-plugin-add-jsx-attribute/6.5.1_@babel+core@7.20.2: resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==} @@ -3783,7 +3748,6 @@ packages: /@svgr/babel-plugin-remove-jsx-attribute/5.4.0: resolution: {integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==} engines: {node: '>=10'} - dev: true /@svgr/babel-plugin-remove-jsx-attribute/6.5.0_@babel+core@7.20.2: resolution: {integrity: sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==} @@ -3797,7 +3761,6 @@ packages: /@svgr/babel-plugin-remove-jsx-empty-expression/5.0.1: resolution: {integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==} engines: {node: '>=10'} - dev: true /@svgr/babel-plugin-remove-jsx-empty-expression/6.5.0_@babel+core@7.20.2: resolution: {integrity: sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==} @@ -3811,7 +3774,6 @@ packages: /@svgr/babel-plugin-replace-jsx-attribute-value/5.0.1: resolution: {integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==} engines: {node: '>=10'} - dev: true /@svgr/babel-plugin-replace-jsx-attribute-value/6.5.1_@babel+core@7.20.2: resolution: {integrity: sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==} @@ -3825,7 +3787,6 @@ packages: /@svgr/babel-plugin-svg-dynamic-title/5.4.0: resolution: {integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==} engines: {node: '>=10'} - dev: true /@svgr/babel-plugin-svg-dynamic-title/6.5.1_@babel+core@7.20.2: resolution: {integrity: sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==} @@ -3839,7 +3800,6 @@ packages: /@svgr/babel-plugin-svg-em-dimensions/5.4.0: resolution: {integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==} engines: {node: '>=10'} - dev: true /@svgr/babel-plugin-svg-em-dimensions/6.5.1_@babel+core@7.20.2: resolution: {integrity: sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==} @@ -3853,7 +3813,6 @@ packages: /@svgr/babel-plugin-transform-react-native-svg/5.4.0: resolution: {integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==} engines: {node: '>=10'} - dev: true /@svgr/babel-plugin-transform-react-native-svg/6.5.1_@babel+core@7.20.2: resolution: {integrity: sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==} @@ -3867,7 +3826,6 @@ packages: /@svgr/babel-plugin-transform-svg-component/5.5.0: resolution: {integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==} engines: {node: '>=10'} - dev: true /@svgr/babel-plugin-transform-svg-component/6.5.1_@babel+core@7.20.2: resolution: {integrity: sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==} @@ -3890,7 +3848,6 @@ packages: '@svgr/babel-plugin-svg-em-dimensions': 5.4.0 '@svgr/babel-plugin-transform-react-native-svg': 5.4.0 '@svgr/babel-plugin-transform-svg-component': 5.5.0 - dev: true /@svgr/babel-preset/6.5.1_@babel+core@7.20.2: resolution: {integrity: sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==} @@ -3918,7 +3875,6 @@ packages: cosmiconfig: 7.0.1 transitivePeerDependencies: - supports-color - dev: true /@svgr/core/6.5.1: resolution: {integrity: sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==} @@ -3938,7 +3894,6 @@ packages: engines: {node: '>=10'} dependencies: '@babel/types': 7.20.2 - dev: true /@svgr/hast-util-to-babel-ast/6.5.1: resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==} @@ -3958,7 +3913,6 @@ packages: svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - dev: true /@svgr/plugin-jsx/6.5.1_@svgr+core@6.5.1: resolution: {integrity: sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==} @@ -3982,7 +3936,6 @@ packages: cosmiconfig: 7.0.1 deepmerge: 4.2.2 svgo: 1.3.2 - dev: true /@svgr/plugin-svgo/6.5.1_@svgr+core@6.5.1: resolution: {integrity: sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==} @@ -4010,7 +3963,6 @@ packages: loader-utils: 2.0.4 transitivePeerDependencies: - supports-color - dev: true /@svgr/webpack/6.5.1: resolution: {integrity: sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==} @@ -4090,7 +4042,6 @@ packages: /@tootallnate/once/1.1.2: resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} engines: {node: '>= 6'} - dev: true /@trysound/sax/0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} @@ -4133,26 +4084,22 @@ packages: '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.2 - dev: true /@types/babel__generator/7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: '@babel/types': 7.20.2 - dev: true /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: '@babel/parser': 7.20.3 '@babel/types': 7.20.2 - dev: true /@types/babel__traverse/7.18.2: resolution: {integrity: sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==} dependencies: '@babel/types': 7.20.2 - dev: true /@types/body-parser/1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} @@ -4190,7 +4137,6 @@ packages: /@types/estree/0.0.39: resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - dev: true /@types/estree/0.0.51: resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} @@ -4230,7 +4176,6 @@ packages: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: '@types/node': 18.11.9 - dev: true /@types/hast/2.3.4: resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} @@ -4275,7 +4220,6 @@ packages: /@types/json5/0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true /@types/keyv/3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} @@ -4316,14 +4260,12 @@ packages: /@types/prettier/2.7.1: resolution: {integrity: sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==} - dev: true /@types/prop-types/15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} /@types/q/1.5.5: resolution: {integrity: sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==} - dev: true /@types/qs/6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} @@ -4379,7 +4321,6 @@ packages: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: '@types/node': 18.11.9 - dev: true /@types/resolve/1.20.2: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -4405,7 +4346,6 @@ packages: /@types/semver/7.3.13: resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} - dev: true /@types/serve-index/1.9.1: resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} @@ -4425,11 +4365,9 @@ packages: /@types/stack-utils/2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} - dev: true /@types/trusted-types/2.0.2: resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==} - dev: true /@types/unist/2.0.6: resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} @@ -4447,7 +4385,6 @@ packages: resolution: {integrity: sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==} dependencies: '@types/yargs-parser': 21.0.0 - dev: true /@types/yargs/17.0.13: resolution: {integrity: sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==} @@ -4505,7 +4442,6 @@ packages: typescript: 4.8.4 transitivePeerDependencies: - supports-color - dev: true /@typescript-eslint/experimental-utils/5.0.0_bgi3obguywoxv2bja646f7pg6q: resolution: {integrity: sha512-Dnp4dFIsZcPawD6CT1p5NibNUQyGSEz80sULJZkyhyna8AEqArmfwMwJPbmKzWVo4PabqNVzHYlzmcdLQWk+pg==} @@ -4536,7 +4472,6 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true /@typescript-eslint/parser/5.42.1_bgi3obguywoxv2bja646f7pg6q: resolution: {integrity: sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==} @@ -4576,7 +4511,6 @@ packages: typescript: 4.8.4 transitivePeerDependencies: - supports-color - dev: true /@typescript-eslint/scope-manager/5.0.0: resolution: {integrity: sha512-5RFjdA/ain/MDUHYXdF173btOKncIrLuBmA9s6FJhzDrRAyVSA+70BHg0/MW6TE+UiKVyRtX91XpVS0gVNwVDQ==} @@ -4592,7 +4526,6 @@ packages: dependencies: '@typescript-eslint/types': 5.42.1 '@typescript-eslint/visitor-keys': 5.42.1 - dev: true /@typescript-eslint/type-utils/5.42.1_rmayb2veg2btbq6mbmnyivgasy: resolution: {integrity: sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==} @@ -4612,7 +4545,6 @@ packages: typescript: 4.8.4 transitivePeerDependencies: - supports-color - dev: true /@typescript-eslint/types/5.0.0: resolution: {integrity: sha512-dU/pKBUpehdEqYuvkojmlv0FtHuZnLXFBn16zsDmlFF3LXkOpkAQ2vrKc3BidIIve9EMH2zfTlxqw9XM0fFN5w==} @@ -4622,7 +4554,6 @@ packages: /@typescript-eslint/types/5.42.1: resolution: {integrity: sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true /@typescript-eslint/typescript-estree/5.0.0_typescript@4.8.4: resolution: {integrity: sha512-V/6w+PPQMhinWKSn+fCiX5jwvd1vRBm7AX7SJQXEGQtwtBvjMPjaU3YTQ1ik2UF1u96X7tsB96HMnulG3eLi9Q==} @@ -4664,7 +4595,6 @@ packages: typescript: 4.8.4 transitivePeerDependencies: - supports-color - dev: true /@typescript-eslint/utils/5.42.1_rmayb2veg2btbq6mbmnyivgasy: resolution: {integrity: sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==} @@ -4684,7 +4614,6 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true /@typescript-eslint/visitor-keys/5.0.0: resolution: {integrity: sha512-yRyd2++o/IrJdyHuYMxyFyBhU762MRHQ/bAGQeTnN3pGikfh+nEmM61XTqaDH1XDp53afZ+waXrk0ZvenoZ6xw==} @@ -4700,7 +4629,6 @@ packages: dependencies: '@typescript-eslint/types': 5.42.1 eslint-visitor-keys: 3.3.0 - dev: true /@vitejs/plugin-react/2.2.0_vite@3.2.3: resolution: {integrity: sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==} @@ -4819,7 +4747,6 @@ packages: /abab/2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - dev: true /accepts/1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} @@ -4851,7 +4778,6 @@ packages: dependencies: acorn: 7.4.1 acorn-walk: 7.2.0 - dev: true /acorn-import-assertions/1.8.0_acorn@8.8.1: resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} @@ -4874,7 +4800,6 @@ packages: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: acorn: 8.8.1 - dev: true /acorn-node/1.8.2: resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} @@ -4882,12 +4807,10 @@ packages: acorn: 7.4.1 acorn-walk: 7.2.0 xtend: 4.0.2 - dev: true /acorn-walk/7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} - dev: true /acorn-walk/8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} @@ -4903,7 +4826,6 @@ packages: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /acorn/8.8.1: resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} @@ -4920,7 +4842,6 @@ packages: dependencies: loader-utils: 2.0.4 regex-parser: 2.2.11 - dev: true /agent-base/6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -4929,7 +4850,6 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} @@ -5023,7 +4943,6 @@ packages: engines: {node: '>=8'} dependencies: type-fest: 0.21.3 - dev: true /ansi-html-community/0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} @@ -5053,7 +4972,6 @@ packages: /ansi-styles/5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - dev: true /ansi-styles/6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} @@ -5140,7 +5058,6 @@ packages: dependencies: '@babel/runtime': 7.20.1 '@babel/runtime-corejs3': 7.20.1 - dev: true /aria-query/5.1.3: resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} @@ -5163,7 +5080,6 @@ packages: es-abstract: 1.20.4 get-intrinsic: 1.1.3 is-string: 1.0.7 - dev: true /array-tree-filter/2.1.0: resolution: {integrity: sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==} @@ -5181,7 +5097,6 @@ packages: define-properties: 1.1.4 es-abstract: 1.20.4 es-shim-unscopables: 1.0.0 - dev: true /array.prototype.flatmap/1.3.1: resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} @@ -5191,7 +5106,6 @@ packages: define-properties: 1.1.4 es-abstract: 1.20.4 es-shim-unscopables: 1.0.0 - dev: true /array.prototype.reduce/1.0.5: resolution: {integrity: sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==} @@ -5202,14 +5116,12 @@ packages: es-abstract: 1.20.4 es-array-method-boxes-properly: 1.0.0 is-string: 1.0.7 - dev: true /asap/2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} /ast-types-flow/0.0.7: resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} - dev: true /async-validator/4.2.5: resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} @@ -5217,7 +5129,6 @@ packages: /async/3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - dev: true /asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -5271,7 +5182,14 @@ packages: /axe-core/4.5.1: resolution: {integrity: sha512-1exVbW0X1O/HSr/WMwnaweyqcWOgZgLiVxdLG34pvSQk4NlYQr9OUy0JLwuhFfuVNQzzqgH57eYzkFBCb3bIsQ==} engines: {node: '>=4'} - dev: true + + /axios/0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + dependencies: + follow-redirects: 1.15.2 + transitivePeerDependencies: + - debug + dev: false /axios/0.25.0: resolution: {integrity: sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==} @@ -5293,7 +5211,6 @@ packages: /axobject-query/2.2.0: resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} - dev: true /babel-jest/27.5.1_@babel+core@7.20.2: resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} @@ -5312,7 +5229,6 @@ packages: slash: 3.0.0 transitivePeerDependencies: - supports-color - dev: true /babel-loader/8.3.0_npabyccmuonwo2rku4k53xo3hi: resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} @@ -5361,7 +5277,6 @@ packages: test-exclude: 6.0.0 transitivePeerDependencies: - supports-color - dev: true /babel-plugin-jest-hoist/27.5.1: resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} @@ -5371,7 +5286,6 @@ packages: '@babel/types': 7.20.2 '@types/babel__core': 7.1.20 '@types/babel__traverse': 7.18.2 - dev: true /babel-plugin-macros/3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} @@ -5380,7 +5294,6 @@ packages: '@babel/runtime': 7.20.1 cosmiconfig: 7.0.1 resolve: 1.22.1 - dev: true /babel-plugin-named-asset-import/0.3.8_@babel+core@7.20.2: resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} @@ -5388,7 +5301,6 @@ packages: '@babel/core': ^7.1.0 dependencies: '@babel/core': 7.20.2 - dev: true /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.20.2: resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} @@ -5425,7 +5337,6 @@ packages: /babel-plugin-transform-react-remove-prop-types/0.4.24: resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} - dev: true /babel-preset-current-node-syntax/1.0.1_@babel+core@7.20.2: resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} @@ -5445,7 +5356,6 @@ packages: '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.2 '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.2 '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.2 - dev: true /babel-preset-jest/27.5.1_@babel+core@7.20.2: resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} @@ -5456,7 +5366,6 @@ packages: '@babel/core': 7.20.2 babel-plugin-jest-hoist: 27.5.1 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.2 - dev: true /babel-preset-react-app/10.0.1: resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} @@ -5480,7 +5389,6 @@ packages: babel-plugin-transform-react-remove-prop-types: 0.4.24 transitivePeerDependencies: - supports-color - dev: true /bail/1.0.5: resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} @@ -5504,7 +5412,6 @@ packages: check-types: 11.1.2 hoopy: 0.1.4 tryer: 1.0.1 - dev: true /big.js/5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} @@ -5515,7 +5422,6 @@ packages: /bluebird/3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - dev: true /body-parser/1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} @@ -5585,7 +5491,6 @@ packages: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 - dev: true /braces/3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} @@ -5595,7 +5500,6 @@ packages: /browser-process-hrtime/1.0.0: resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: true /browserslist/4.21.4: resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} @@ -5611,7 +5515,6 @@ packages: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 - dev: true /buble/0.19.6: resolution: {integrity: sha512-9kViM6nJA1Q548Jrd06x0geh+BG2ru2+RMDkIHHgJY/8AcyCs34lTHwra9BX7YdPrZXd5aarkpr/SY8bmPgPdg==} @@ -5631,7 +5534,6 @@ packages: /builtin-modules/3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} - dev: true /bytes/3.0.0: resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} @@ -5677,7 +5579,6 @@ packages: /camelcase/5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} - dev: true /camelcase/6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} @@ -5697,7 +5598,6 @@ packages: /case-sensitive-paths-webpack-plugin/2.4.0: resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} engines: {node: '>=4'} - dev: true /ccount/1.1.0: resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} @@ -5721,12 +5621,10 @@ packages: /char-regex/1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} - dev: true /char-regex/2.0.1: resolution: {integrity: sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==} engines: {node: '>=12.20'} - dev: true /character-entities-legacy/1.1.4: resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} @@ -5742,7 +5640,6 @@ packages: /check-types/11.1.2: resolution: {integrity: sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==} - dev: true /cheerio-select/2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} @@ -5804,7 +5701,6 @@ packages: /cjs-module-lexer/1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} - dev: true /classnames/2.3.2: resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} @@ -5845,7 +5741,6 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true /clone-deep/4.0.1: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} @@ -5875,7 +5770,6 @@ packages: /co/4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true /coa/2.0.2: resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} @@ -5884,7 +5778,6 @@ packages: '@types/q': 1.5.5 chalk: 2.4.2 q: 1.5.1 - dev: true /code-block-writer/11.0.3: resolution: {integrity: sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==} @@ -5896,7 +5789,6 @@ packages: /collect-v8-coverage/1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} - dev: true /color-convert/1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -5964,12 +5856,10 @@ packages: /common-path-prefix/3.0.0: resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - dev: true /common-tags/1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} - dev: true /commondir/1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -6023,7 +5913,6 @@ packages: /confusing-browser-globals/1.0.11: resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - dev: true /connect-history-api-fallback/2.0.0: resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} @@ -6166,7 +6055,6 @@ packages: dependencies: postcss: 8.4.19 postcss-selector-parser: 6.0.10 - dev: true /css-declaration-sorter/6.3.1_postcss@8.4.19: resolution: {integrity: sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==} @@ -6185,7 +6073,6 @@ packages: dependencies: postcss: 8.4.19 postcss-selector-parser: 6.0.10 - dev: true /css-loader/6.7.1_webpack@5.75.0: resolution: {integrity: sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==} @@ -6229,7 +6116,6 @@ packages: serialize-javascript: 6.0.0 source-map: 0.6.1 webpack: 5.75.0 - dev: true /css-minimizer-webpack-plugin/4.2.2_2xq5u4vuzw4op42d4uqzx2gxfa: resolution: {integrity: sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==} @@ -6274,11 +6160,9 @@ packages: postcss: ^8.4 dependencies: postcss: 8.4.19 - dev: true /css-select-base-adapter/0.1.1: resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} - dev: true /css-select/2.1.0: resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} @@ -6287,7 +6171,6 @@ packages: css-what: 3.4.2 domutils: 1.7.0 nth-check: 1.0.2 - dev: true /css-select/4.3.0: resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} @@ -6314,7 +6197,6 @@ packages: dependencies: mdn-data: 2.0.4 source-map: 0.6.1 - dev: true /css-tree/1.1.3: resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} @@ -6326,7 +6208,6 @@ packages: /css-what/3.4.2: resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} engines: {node: '>= 6'} - dev: true /css-what/6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} @@ -6334,7 +6215,6 @@ packages: /cssdb/7.1.0: resolution: {integrity: sha512-Sd99PrFgx28ez4GHu8yoQIufc/70h9oYowDf4EjeIKi8mac9whxRjhM3IaMr6EllP6KKKWtJrMfN6C7T9tIWvQ==} - dev: true /cssesc/3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} @@ -6420,25 +6300,21 @@ packages: /cssom/0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: true /cssom/0.4.4: resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} - dev: true /cssstyle/2.3.0: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} dependencies: cssom: 0.3.8 - dev: true /csstype/3.1.1: resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} /damerau-levenshtein/1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: true /data-urls/2.0.0: resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} @@ -6447,7 +6323,6 @@ packages: abab: 2.0.6 whatwg-mimetype: 2.3.0 whatwg-url: 8.7.0 - dev: true /date-fns/2.29.3: resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} @@ -6477,7 +6352,6 @@ packages: optional: true dependencies: ms: 2.1.3 - dev: true /debug/4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -6492,7 +6366,6 @@ packages: /decimal.js/10.4.2: resolution: {integrity: sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==} - dev: true /decode-uri-component/0.2.0: resolution: {integrity: sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==} @@ -6508,7 +6381,6 @@ packages: /dedent/0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - dev: true /deep-equal/2.1.0: resolution: {integrity: sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA==} @@ -6537,7 +6409,6 @@ packages: /deep-is/0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true /deepmerge/4.2.2: resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} @@ -6566,7 +6437,6 @@ packages: /defined/1.0.1: resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} - dev: true /del/5.1.0: resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} @@ -6621,7 +6491,6 @@ packages: /detect-newline/3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} - dev: true /detect-node/2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} @@ -6654,16 +6523,13 @@ packages: acorn-node: 1.8.2 defined: 1.0.1 minimist: 1.2.7 - dev: true /didyoumean/1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true /diff-sequences/27.5.1: resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true /diff-sequences/29.3.1: resolution: {integrity: sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==} @@ -6682,7 +6548,6 @@ packages: /dlv/1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true /dns-equal/1.0.0: resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} @@ -6698,14 +6563,12 @@ packages: engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 - dev: true /doctrine/3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 - dev: true /dom-accessibility-api/0.5.14: resolution: {integrity: sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==} @@ -6732,7 +6595,6 @@ packages: dependencies: domelementtype: 2.3.0 entities: 2.2.0 - dev: true /dom-serializer/1.4.1: resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} @@ -6751,7 +6613,6 @@ packages: /domelementtype/1.3.1: resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} - dev: true /domelementtype/2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} @@ -6761,7 +6622,6 @@ packages: engines: {node: '>=8'} dependencies: webidl-conversions: 5.0.0 - dev: true /domhandler/4.3.1: resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} @@ -6781,7 +6641,6 @@ packages: dependencies: dom-serializer: 0.2.2 domelementtype: 1.3.1 - dev: true /domutils/2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} @@ -6813,12 +6672,10 @@ packages: /dotenv-expand/5.1.0: resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} - dev: true /dotenv/10.0.0: resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} engines: {node: '>=10'} - dev: true /duplexer/0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -6840,7 +6697,6 @@ packages: hasBin: true dependencies: jake: 10.8.5 - dev: true /electron-to-chromium/1.4.284: resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} @@ -6848,12 +6704,10 @@ packages: /emittery/0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} engines: {node: '>=12'} - dev: true /emittery/0.8.1: resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} engines: {node: '>=10'} - dev: true /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -6910,7 +6764,6 @@ packages: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} dependencies: stackframe: 1.3.4 - dev: true /es-abstract/1.20.4: resolution: {integrity: sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==} @@ -6940,11 +6793,9 @@ packages: string.prototype.trimend: 1.0.6 string.prototype.trimstart: 1.0.6 unbox-primitive: 1.0.2 - dev: true /es-array-method-boxes-properly/1.0.0: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} - dev: true /es-get-iterator/1.1.2: resolution: {integrity: sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==} @@ -6966,7 +6817,6 @@ packages: resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} dependencies: has: 1.0.3 - dev: true /es-to-primitive/1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} @@ -6975,7 +6825,6 @@ packages: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true /esbuild-android-64/0.15.13: resolution: {integrity: sha512-yRorukXBlokwTip+Sy4MYskLhJsO0Kn0/Fj43s1krVblfwP+hMD37a4Wmg139GEsMLl+vh8WXp2mq/cTA9J97g==} @@ -7206,7 +7055,6 @@ packages: /escape-string-regexp/2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} - dev: true /escape-string-regexp/4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} @@ -7223,7 +7071,6 @@ packages: optionator: 0.8.3 optionalDependencies: source-map: 0.6.1 - dev: true /eslint-config-prettier/8.5.0_eslint@8.0.1: resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} @@ -7267,7 +7114,6 @@ packages: - eslint-import-resolver-webpack - jest - supports-color - dev: true /eslint-config-standard-react/12.0.0_crua5zzh5wtgko3a7bkv6w5n7m: resolution: {integrity: sha512-Bw0hN/9YtmrJrBB0l5DIX2YhDR2IkWHOCCZGB87AawgmBsQbcX2y9uec7R178BCPnuqhm6jiwBySPw3zvmKRTg==} @@ -7336,7 +7182,6 @@ packages: resolve: 1.22.1 transitivePeerDependencies: - supports-color - dev: true /eslint-module-utils/2.7.4_l3rkqmr6ujglf4zsfjyz5e7jai: resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} @@ -7365,7 +7210,6 @@ packages: eslint-import-resolver-node: 0.3.6 transitivePeerDependencies: - supports-color - dev: true /eslint-module-utils/2.7.4_zkioto4j4sh4mjr3kic2x662p4: resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} @@ -7431,7 +7275,6 @@ packages: eslint: 8.27.0 lodash: 4.17.21 string-natural-compare: 3.0.1 - dev: true /eslint-plugin-import/2.25.2_zaqbbelgc2zchk32qtn6ylzxpi: resolution: {integrity: sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==} @@ -7493,7 +7336,6 @@ packages: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true /eslint-plugin-jest/25.7.0_5hzdnpurunnvkypr2bvkyudjkm: resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} @@ -7515,7 +7357,6 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true /eslint-plugin-jsx-a11y/6.6.1_eslint@8.27.0: resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==} @@ -7537,7 +7378,6 @@ packages: language-tags: 1.0.5 minimatch: 3.1.2 semver: 6.3.0 - dev: true /eslint-plugin-n/15.0.0_eslint@8.0.1: resolution: {integrity: sha512-cb70VSsNjteEL+sInXvlyewuE4OCW9CFmcOQKxyQzdAsoK+7pWpygf2q/Vsw/5dKSniO7qbawLjDqAakaILCIw==} @@ -7596,7 +7436,6 @@ packages: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: eslint: 8.27.0 - dev: true /eslint-plugin-react/7.31.10_eslint@8.0.1: resolution: {integrity: sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==} @@ -7642,7 +7481,6 @@ packages: resolve: 2.0.0-next.4 semver: 6.3.0 string.prototype.matchall: 4.0.8 - dev: true /eslint-plugin-testing-library/5.9.1_rmayb2veg2btbq6mbmnyivgasy: resolution: {integrity: sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==} @@ -7655,7 +7493,6 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true /eslint-scope/5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} @@ -7678,7 +7515,6 @@ packages: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true /eslint-utils/2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} @@ -7705,7 +7541,6 @@ packages: dependencies: eslint: 8.27.0 eslint-visitor-keys: 2.1.0 - dev: true /eslint-visitor-keys/1.3.0: resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} @@ -7715,12 +7550,10 @@ packages: /eslint-visitor-keys/2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} - dev: true /eslint-visitor-keys/3.3.0: resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true /eslint-webpack-plugin/3.2.0_5mastfusvewdnfotkrq73j4uja: resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} @@ -7736,7 +7569,6 @@ packages: normalize-path: 3.0.0 schema-utils: 4.0.0 webpack: 5.75.0 - dev: true /eslint/8.0.1: resolution: {integrity: sha512-LsgcwZgQ72vZ+SMp4K6pAnk2yFDWL7Ti4pJaRvsZ0Hsw2h8ZjUIW38a9AFn2cZXdBMlScMFYYgsSp4ttFI/0bA==} @@ -7831,7 +7663,6 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true /espree/9.4.1: resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} @@ -7840,7 +7671,6 @@ packages: acorn: 8.8.1 acorn-jsx: 5.3.2_acorn@8.8.1 eslint-visitor-keys: 3.3.0 - dev: true /esprima/4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} @@ -7852,7 +7682,6 @@ packages: engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 - dev: true /esrecurse/4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} @@ -7870,7 +7699,6 @@ packages: /estree-walker/1.0.1: resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - dev: true /estree-walker/2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -7921,7 +7749,6 @@ packages: /exit/0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} - dev: true /expect/27.5.1: resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} @@ -7931,7 +7758,6 @@ packages: jest-get-type: 27.5.1 jest-matcher-utils: 27.5.1 jest-message-util: 27.5.1 - dev: true /expect/29.3.1: resolution: {integrity: sha512-gGb1yTgU30Q0O/tQq+z30KBWv24ApkMgFUpvKBkyLUBL68Wv8dHdJxTBZFl/iT8K/bqDHvUYRH6IIN3rToopPA==} @@ -8011,7 +7837,6 @@ packages: /fast-levenshtein/2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true /fast-url-parser/1.1.3: resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} @@ -8034,7 +7859,6 @@ packages: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 - dev: true /fbemitter/3.0.0: resolution: {integrity: sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==} @@ -8074,7 +7898,6 @@ packages: engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 - dev: true /file-loader/6.2.0_webpack@5.75.0: resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} @@ -8090,7 +7913,6 @@ packages: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: minimatch: 5.1.0 - dev: true /filesize/8.0.7: resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} @@ -8150,11 +7972,9 @@ packages: dependencies: flatted: 3.2.7 rimraf: 3.0.2 - dev: true /flatted/3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - dev: true /flux/4.0.3_react@18.2.0: resolution: {integrity: sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==} @@ -8213,7 +8033,6 @@ packages: tapable: 1.1.3 typescript: 4.8.4 webpack: 5.75.0 - dev: true /fork-ts-checker-webpack-plugin/6.5.2_qw7fmzhoapcndkteb5rsc33stq: resolution: {integrity: sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==} @@ -8253,7 +8072,6 @@ packages: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - dev: true /form-data/4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} @@ -8334,7 +8152,6 @@ packages: define-properties: 1.1.4 es-abstract: 1.20.4 functions-have-names: 1.2.3 - dev: true /functional-red-black-tree/1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} @@ -8342,7 +8159,6 @@ packages: /functions-have-names/1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true /gensync/1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} @@ -8351,7 +8167,6 @@ packages: /get-caller-file/2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - dev: true /get-intrinsic/1.1.3: resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} @@ -8366,7 +8181,6 @@ packages: /get-package-type/0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} - dev: true /get-stream/4.1.0: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} @@ -8392,7 +8206,6 @@ packages: dependencies: call-bind: 1.0.2 get-intrinsic: 1.1.3 - dev: true /github-slugger/1.5.0: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} @@ -8464,7 +8277,6 @@ packages: engines: {node: '>=8'} dependencies: type-fest: 0.20.2 - dev: true /globby/10.0.1: resolution: {integrity: sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==} @@ -8546,7 +8358,6 @@ packages: /grapheme-splitter/1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - dev: true /gray-matter/4.0.3: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} @@ -8569,11 +8380,9 @@ packages: /harmony-reflect/1.6.2: resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} - dev: true /has-bigints/1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true /has-flag/3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} @@ -8597,7 +8406,6 @@ packages: engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - dev: true /has-yarn/2.1.0: resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} @@ -8696,7 +8504,6 @@ packages: /hoopy/0.1.4: resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} engines: {node: '>= 6.0.0'} - dev: true /hpack.js/2.1.6: resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} @@ -8711,14 +8518,12 @@ packages: engines: {node: '>=10'} dependencies: whatwg-encoding: 1.0.5 - dev: true /html-entities/2.3.3: resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} /html-escaper/2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true /html-minifier-terser/6.1.0: resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} @@ -8810,7 +8615,6 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true /http-proxy-middleware/2.0.6_@types+express@4.17.14: resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} @@ -8848,7 +8652,6 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true /human-signals/2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} @@ -8865,7 +8668,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - dev: true /icss-utils/5.1.0_postcss@8.4.19: resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} @@ -8877,14 +8679,12 @@ packages: /idb/7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} - dev: true /identity-obj-proxy/3.0.0: resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} engines: {node: '>=4'} dependencies: harmony-reflect: 1.6.2 - dev: true /ignore/4.0.6: resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} @@ -8930,7 +8730,6 @@ packages: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - dev: true /imurmurhash/0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -8976,7 +8775,6 @@ packages: get-intrinsic: 1.1.3 has: 1.0.3 side-channel: 1.0.4 - dev: true /interpret/1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} @@ -9023,7 +8821,6 @@ packages: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 - dev: true /is-binary-path/2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} @@ -9037,7 +8834,6 @@ packages: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true /is-buffer/2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} @@ -9054,7 +8850,6 @@ packages: /is-callable/1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - dev: true /is-ci/2.0.0: resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} @@ -9073,7 +8868,6 @@ packages: engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 - dev: true /is-decimal/1.0.4: resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} @@ -9100,7 +8894,6 @@ packages: /is-generator-fn/2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} - dev: true /is-glob/4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} @@ -9126,12 +8919,10 @@ packages: /is-module/1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: true /is-negative-zero/2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} - dev: true /is-npm/5.0.0: resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==} @@ -9143,7 +8934,6 @@ packages: engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 - dev: true /is-number/7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} @@ -9189,7 +8979,6 @@ packages: /is-potential-custom-element-name/1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - dev: true /is-reference/1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} @@ -9203,7 +8992,6 @@ packages: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true /is-regexp/1.0.0: resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} @@ -9221,7 +9009,6 @@ packages: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.2 - dev: true /is-stream/2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} @@ -9232,14 +9019,12 @@ packages: engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 - dev: true /is-symbol/1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - dev: true /is-typed-array/1.1.10: resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} @@ -9263,7 +9048,6 @@ packages: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.2 - dev: true /is-weakset/2.0.2: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} @@ -9312,7 +9096,6 @@ packages: /istanbul-lib-coverage/3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} - dev: true /istanbul-lib-instrument/5.2.1: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} @@ -9325,7 +9108,6 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: true /istanbul-lib-report/3.0.0: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} @@ -9334,7 +9116,6 @@ packages: istanbul-lib-coverage: 3.2.0 make-dir: 3.1.0 supports-color: 7.2.0 - dev: true /istanbul-lib-source-maps/4.0.1: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} @@ -9345,7 +9126,6 @@ packages: source-map: 0.6.1 transitivePeerDependencies: - supports-color - dev: true /istanbul-reports/3.1.5: resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} @@ -9353,7 +9133,6 @@ packages: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.0 - dev: true /jake/10.8.5: resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} @@ -9364,7 +9143,6 @@ packages: chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 - dev: true /jest-changed-files/27.5.1: resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} @@ -9373,7 +9151,6 @@ packages: '@jest/types': 27.5.1 execa: 5.1.1 throat: 6.0.1 - dev: true /jest-circus/27.5.1: resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} @@ -9400,7 +9177,6 @@ packages: throat: 6.0.1 transitivePeerDependencies: - supports-color - dev: true /jest-cli/27.5.1: resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} @@ -9430,7 +9206,6 @@ packages: - supports-color - ts-node - utf-8-validate - dev: true /jest-config/27.5.1: resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} @@ -9470,7 +9245,6 @@ packages: - canvas - supports-color - utf-8-validate - dev: true /jest-diff/27.5.1: resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} @@ -9480,7 +9254,6 @@ packages: diff-sequences: 27.5.1 jest-get-type: 27.5.1 pretty-format: 27.5.1 - dev: true /jest-diff/29.3.1: resolution: {integrity: sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==} @@ -9497,7 +9270,6 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: detect-newline: 3.1.0 - dev: true /jest-each/27.5.1: resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} @@ -9508,7 +9280,6 @@ packages: jest-get-type: 27.5.1 jest-util: 27.5.1 pretty-format: 27.5.1 - dev: true /jest-environment-jsdom/27.5.1: resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} @@ -9526,7 +9297,6 @@ packages: - canvas - supports-color - utf-8-validate - dev: true /jest-environment-node/27.5.1: resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} @@ -9538,12 +9308,10 @@ packages: '@types/node': 18.11.9 jest-mock: 27.5.1 jest-util: 27.5.1 - dev: true /jest-get-type/27.5.1: resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true /jest-get-type/29.2.0: resolution: {integrity: sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==} @@ -9568,7 +9336,6 @@ packages: walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 - dev: true /jest-jasmine2/27.5.1: resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} @@ -9593,7 +9360,6 @@ packages: throat: 6.0.1 transitivePeerDependencies: - supports-color - dev: true /jest-leak-detector/27.5.1: resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} @@ -9601,7 +9367,6 @@ packages: dependencies: jest-get-type: 27.5.1 pretty-format: 27.5.1 - dev: true /jest-matcher-utils/27.5.1: resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} @@ -9611,7 +9376,6 @@ packages: jest-diff: 27.5.1 jest-get-type: 27.5.1 pretty-format: 27.5.1 - dev: true /jest-matcher-utils/29.3.1: resolution: {integrity: sha512-fkRMZUAScup3txIKfMe3AIZZmPEjWEdsPJFK3AIy5qRohWqQFg1qrmKfYXR9qEkNc7OdAu2N4KPHibEmy4HPeQ==} @@ -9636,7 +9400,6 @@ packages: pretty-format: 27.5.1 slash: 3.0.0 stack-utils: 2.0.6 - dev: true /jest-message-util/28.1.3: resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} @@ -9651,7 +9414,6 @@ packages: pretty-format: 28.1.3 slash: 3.0.0 stack-utils: 2.0.6 - dev: true /jest-message-util/29.3.1: resolution: {integrity: sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==} @@ -9674,7 +9436,6 @@ packages: dependencies: '@jest/types': 27.5.1 '@types/node': 18.11.9 - dev: true /jest-pnp-resolver/1.2.2_jest-resolve@27.5.1: resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} @@ -9686,17 +9447,14 @@ packages: optional: true dependencies: jest-resolve: 27.5.1 - dev: true /jest-regex-util/27.5.1: resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true /jest-regex-util/28.0.2: resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dev: true /jest-resolve-dependencies/27.5.1: resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} @@ -9707,7 +9465,6 @@ packages: jest-snapshot: 27.5.1 transitivePeerDependencies: - supports-color - dev: true /jest-resolve/27.5.1: resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} @@ -9723,7 +9480,6 @@ packages: resolve: 1.22.1 resolve.exports: 1.1.0 slash: 3.0.0 - dev: true /jest-runner/27.5.1: resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} @@ -9755,7 +9511,6 @@ packages: - canvas - supports-color - utf-8-validate - dev: true /jest-runtime/27.5.1: resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} @@ -9785,7 +9540,6 @@ packages: strip-bom: 4.0.0 transitivePeerDependencies: - supports-color - dev: true /jest-serializer/27.5.1: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} @@ -9793,7 +9547,6 @@ packages: dependencies: '@types/node': 18.11.9 graceful-fs: 4.2.10 - dev: true /jest-snapshot/27.5.1: resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} @@ -9823,7 +9576,6 @@ packages: semver: 7.3.8 transitivePeerDependencies: - supports-color - dev: true /jest-util/27.5.1: resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} @@ -9835,7 +9587,6 @@ packages: ci-info: 3.5.0 graceful-fs: 4.2.10 picomatch: 2.3.1 - dev: true /jest-util/28.1.3: resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} @@ -9847,7 +9598,6 @@ packages: ci-info: 3.5.0 graceful-fs: 4.2.10 picomatch: 2.3.1 - dev: true /jest-util/29.3.1: resolution: {integrity: sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==} @@ -9870,7 +9620,6 @@ packages: jest-get-type: 27.5.1 leven: 3.1.0 pretty-format: 27.5.1 - dev: true /jest-watch-typeahead/1.1.0_jest@27.5.1: resolution: {integrity: sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==} @@ -9886,7 +9635,6 @@ packages: slash: 4.0.0 string-length: 5.0.1 strip-ansi: 7.0.1 - dev: true /jest-watcher/27.5.1: resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} @@ -9899,7 +9647,6 @@ packages: chalk: 4.1.2 jest-util: 27.5.1 string-length: 4.0.2 - dev: true /jest-watcher/28.1.3: resolution: {integrity: sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==} @@ -9913,7 +9660,6 @@ packages: emittery: 0.10.2 jest-util: 28.1.3 string-length: 4.0.2 - dev: true /jest-worker/26.6.2: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} @@ -9922,7 +9668,6 @@ packages: '@types/node': 18.11.9 merge-stream: 2.0.0 supports-color: 7.2.0 - dev: true /jest-worker/27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} @@ -9939,7 +9684,6 @@ packages: '@types/node': 18.11.9 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true /jest-worker/29.3.1: resolution: {integrity: sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==} @@ -9970,7 +9714,6 @@ packages: - supports-color - ts-node - utf-8-validate - dev: true /jju/1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -9988,7 +9731,6 @@ packages: /js-sdsl/4.1.5: resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==} - dev: true /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -10046,7 +9788,6 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true /jsesc/0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} @@ -10072,11 +9813,9 @@ packages: /json-schema/0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - dev: true /json-stable-stringify-without-jsonify/1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true /json2mq/0.2.0: resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==} @@ -10089,7 +9828,6 @@ packages: hasBin: true dependencies: minimist: 1.2.7 - dev: true /json5/2.2.1: resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} @@ -10112,7 +9850,6 @@ packages: /jsonpointer/5.0.1: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} - dev: true /jsx-ast-utils/3.3.3: resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} @@ -10120,7 +9857,6 @@ packages: dependencies: array-includes: 3.1.6 object.assign: 4.1.4 - dev: true /keyv/3.1.0: resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} @@ -10146,13 +9882,11 @@ packages: /language-subtag-registry/0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - dev: true /language-tags/1.0.5: resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} dependencies: language-subtag-registry: 0.3.22 - dev: true /latest-version/5.1.0: resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} @@ -10171,7 +9905,6 @@ packages: dependencies: prelude-ls: 1.1.2 type-check: 0.3.2 - dev: true /levn/0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -10179,7 +9912,6 @@ packages: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true /lilconfig/2.0.6: resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} @@ -10247,11 +9979,9 @@ packages: /lodash.merge/4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true /lodash.sortby/4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - dev: true /lodash.uniq/4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} @@ -10316,7 +10046,6 @@ packages: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 - dev: true /markdown-escapes/1.0.4: resolution: {integrity: sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==} @@ -10356,7 +10085,6 @@ packages: /mdn-data/2.0.4: resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} - dev: true /mdurl/1.0.1: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} @@ -10451,7 +10179,6 @@ packages: engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 - dev: true /minimist/1.2.7: resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} @@ -10461,7 +10188,6 @@ packages: hasBin: true dependencies: minimist: 1.2.7 - dev: true /mkdirp/1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} @@ -10501,11 +10227,9 @@ packages: /natural-compare-lite/1.4.0: resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true /negotiator/0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} @@ -10544,7 +10268,6 @@ packages: /node-int64/0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - dev: true /node-releases/2.0.6: resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} @@ -10580,7 +10303,6 @@ packages: resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} dependencies: boolbase: 1.0.0 - dev: true /nth-check/2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -10589,7 +10311,6 @@ packages: /nwsapi/2.2.2: resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} - dev: true /object-assign/4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -10598,7 +10319,6 @@ packages: /object-hash/3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - dev: true /object-inspect/1.12.2: resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} @@ -10631,7 +10351,6 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.20.4 - dev: true /object.fromentries/2.0.6: resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} @@ -10640,7 +10359,6 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.20.4 - dev: true /object.getownpropertydescriptors/2.1.5: resolution: {integrity: sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==} @@ -10650,14 +10368,12 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.20.4 - dev: true /object.hasown/1.1.2: resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} dependencies: define-properties: 1.1.4 es-abstract: 1.20.4 - dev: true /object.values/1.1.6: resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} @@ -10666,7 +10382,6 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.20.4 - dev: true /obuf/1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} @@ -10715,7 +10430,6 @@ packages: prelude-ls: 1.1.2 type-check: 0.3.2 word-wrap: 1.2.3 - dev: true /optionator/0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} @@ -10727,7 +10441,6 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 word-wrap: 1.2.3 - dev: true /os-homedir/1.0.2: resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} @@ -10912,11 +10625,9 @@ packages: /performance-now/2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - dev: true /picocolors/0.2.1: resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} - dev: true /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -10928,12 +10639,10 @@ packages: /pify/2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - dev: true /pirates/4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} engines: {node: '>= 6'} - dev: true /pkg-dir/4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} @@ -10955,7 +10664,6 @@ packages: dependencies: postcss: 8.4.19 postcss-selector-parser: 6.0.10 - dev: true /postcss-browser-comments/4.0.0_o3gvceo4mmkmipwqbduijhv2ui: resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} @@ -10966,7 +10674,6 @@ packages: dependencies: browserslist: 4.21.4 postcss: 8.4.19 - dev: true /postcss-calc/8.2.4_postcss@8.4.19: resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} @@ -10985,7 +10692,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /postcss-color-functional-notation/4.2.4_postcss@8.4.19: resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} @@ -10995,7 +10701,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /postcss-color-hex-alpha/8.0.4_postcss@8.4.19: resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} @@ -11005,7 +10710,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /postcss-color-rebeccapurple/7.1.1_postcss@8.4.19: resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} @@ -11015,7 +10719,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /postcss-colormin/5.3.0_postcss@8.4.19: resolution: {integrity: sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==} @@ -11047,7 +10750,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /postcss-custom-properties/12.1.10_postcss@8.4.19: resolution: {integrity: sha512-U3BHdgrYhCrwTVcByFHs9EOBoqcKq4Lf3kXwbTi4hhq0qWhl/pDWq2THbv/ICX/Fl9KqeHBb8OVrTf2OaYF07A==} @@ -11057,7 +10759,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /postcss-custom-selectors/6.0.3_postcss@8.4.19: resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} @@ -11067,7 +10768,6 @@ packages: dependencies: postcss: 8.4.19 postcss-selector-parser: 6.0.10 - dev: true /postcss-dir-pseudo-class/6.0.5_postcss@8.4.19: resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} @@ -11077,7 +10777,6 @@ packages: dependencies: postcss: 8.4.19 postcss-selector-parser: 6.0.10 - dev: true /postcss-discard-comments/5.1.2_postcss@8.4.19: resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} @@ -11130,7 +10829,6 @@ packages: '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /postcss-env-function/4.0.6_postcss@8.4.19: resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} @@ -11140,7 +10838,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /postcss-flexbugs-fixes/5.0.2_postcss@8.4.19: resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} @@ -11148,7 +10845,6 @@ packages: postcss: ^8.1.4 dependencies: postcss: 8.4.19 - dev: true /postcss-focus-visible/6.0.4_postcss@8.4.19: resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} @@ -11158,7 +10854,6 @@ packages: dependencies: postcss: 8.4.19 postcss-selector-parser: 6.0.10 - dev: true /postcss-focus-within/5.0.4_postcss@8.4.19: resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} @@ -11168,7 +10863,6 @@ packages: dependencies: postcss: 8.4.19 postcss-selector-parser: 6.0.10 - dev: true /postcss-font-variant/5.0.0_postcss@8.4.19: resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} @@ -11176,7 +10870,6 @@ packages: postcss: ^8.1.0 dependencies: postcss: 8.4.19 - dev: true /postcss-gap-properties/3.0.5_postcss@8.4.19: resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} @@ -11185,7 +10878,6 @@ packages: postcss: ^8.2 dependencies: postcss: 8.4.19 - dev: true /postcss-image-set-function/4.0.7_postcss@8.4.19: resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} @@ -11195,7 +10887,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /postcss-import/14.1.0_postcss@8.4.18: resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} @@ -11219,7 +10910,6 @@ packages: postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.1 - dev: true /postcss-initial/4.0.1_postcss@8.4.19: resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} @@ -11227,7 +10917,6 @@ packages: postcss: ^8.0.0 dependencies: postcss: 8.4.19 - dev: true /postcss-js/4.0.0_postcss@8.4.18: resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==} @@ -11247,7 +10936,6 @@ packages: dependencies: camelcase-css: 2.0.1 postcss: 8.4.19 - dev: true /postcss-lab-function/4.2.1_postcss@8.4.19: resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} @@ -11258,7 +10946,6 @@ packages: '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /postcss-load-config/3.1.4_neo3lunb2qpadwxplzw7r2isgm: resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} @@ -11293,7 +10980,6 @@ packages: lilconfig: 2.0.6 postcss: 8.4.19 yaml: 1.10.2 - dev: true /postcss-loader/6.2.1_upg3rk2kpasnbk27hkqapxaxfq: resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} @@ -11307,7 +10993,6 @@ packages: postcss: 8.4.19 semver: 7.3.8 webpack: 5.75.0 - dev: true /postcss-loader/7.0.1_upg3rk2kpasnbk27hkqapxaxfq: resolution: {integrity: sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==} @@ -11330,7 +11015,6 @@ packages: postcss: ^8.4 dependencies: postcss: 8.4.19 - dev: true /postcss-media-minmax/5.0.0_postcss@8.4.19: resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} @@ -11339,7 +11023,6 @@ packages: postcss: ^8.1.0 dependencies: postcss: 8.4.19 - dev: true /postcss-merge-idents/5.1.1_postcss@8.4.19: resolution: {integrity: sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==} @@ -11469,7 +11152,6 @@ packages: dependencies: postcss: 8.4.19 postcss-selector-parser: 6.0.10 - dev: true /postcss-nesting/10.2.0_postcss@8.4.19: resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} @@ -11480,7 +11162,6 @@ packages: '@csstools/selector-specificity': 2.0.2_45y636a2vqremknoajyxd5nkzy postcss: 8.4.19 postcss-selector-parser: 6.0.10 - dev: true /postcss-normalize-charset/5.1.0_postcss@8.4.19: resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} @@ -11576,12 +11257,10 @@ packages: postcss: 8.4.19 postcss-browser-comments: 4.0.0_o3gvceo4mmkmipwqbduijhv2ui sanitize.css: 13.0.0 - dev: true /postcss-opacity-percentage/1.1.2: resolution: {integrity: sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==} engines: {node: ^12 || ^14 || >=16} - dev: true /postcss-ordered-values/5.1.3_postcss@8.4.19: resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} @@ -11601,7 +11280,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /postcss-page-break/3.0.4_postcss@8.4.19: resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} @@ -11609,7 +11287,6 @@ packages: postcss: ^8 dependencies: postcss: 8.4.19 - dev: true /postcss-place/7.0.5_postcss@8.4.19: resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} @@ -11619,7 +11296,6 @@ packages: dependencies: postcss: 8.4.19 postcss-value-parser: 4.2.0 - dev: true /postcss-preset-env/7.8.2_postcss@8.4.19: resolution: {integrity: sha512-rSMUEaOCnovKnwc5LvBDHUDzpGP+nrUeWZGWt9M72fBvckCi45JmnJigUr4QG4zZeOHmOCNCZnd2LKDvP++ZuQ==} @@ -11677,7 +11353,6 @@ packages: postcss-replace-overflow-wrap: 4.0.0_postcss@8.4.19 postcss-selector-not: 6.0.1_postcss@8.4.19 postcss-value-parser: 4.2.0 - dev: true /postcss-pseudo-class-any-link/7.1.6_postcss@8.4.19: resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} @@ -11687,7 +11362,6 @@ packages: dependencies: postcss: 8.4.19 postcss-selector-parser: 6.0.10 - dev: true /postcss-reduce-idents/5.2.0_postcss@8.4.19: resolution: {integrity: sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==} @@ -11724,7 +11398,6 @@ packages: postcss: ^8.0.3 dependencies: postcss: 8.4.19 - dev: true /postcss-selector-not/6.0.1_postcss@8.4.19: resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} @@ -11734,7 +11407,6 @@ packages: dependencies: postcss: 8.4.19 postcss-selector-parser: 6.0.10 - dev: true /postcss-selector-parser/6.0.10: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} @@ -11790,7 +11462,6 @@ packages: dependencies: picocolors: 0.2.1 source-map: 0.6.1 - dev: true /postcss/8.4.18: resolution: {integrity: sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==} @@ -11812,12 +11483,10 @@ packages: /prelude-ls/1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} - dev: true /prelude-ls/1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - dev: true /prepend-http/2.0.0: resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} @@ -11833,7 +11502,6 @@ packages: /pretty-bytes/5.6.0: resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} engines: {node: '>=6'} - dev: true /pretty-error/4.0.0: resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} @@ -11848,7 +11516,6 @@ packages: ansi-regex: 5.0.1 ansi-styles: 5.2.0 react-is: 17.0.2 - dev: true /pretty-format/28.1.3: resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} @@ -11858,7 +11525,6 @@ packages: ansi-regex: 5.0.1 ansi-styles: 5.2.0 react-is: 18.2.0 - dev: true /pretty-format/29.3.1: resolution: {integrity: sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==} @@ -11913,7 +11579,6 @@ packages: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} dependencies: asap: 2.0.6 - dev: true /prompts/2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} @@ -11948,7 +11613,6 @@ packages: /psl/1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - dev: true /pump/3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} @@ -11979,7 +11643,6 @@ packages: /q/1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} - dev: true /qs/6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} @@ -11989,7 +11652,6 @@ packages: /querystringify/2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - dev: true /queue-microtask/1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -12003,13 +11665,11 @@ packages: /quick-lru/5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} - dev: true /raf/3.4.1: resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} dependencies: performance-now: 2.1.0 - dev: true /randombytes/2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -12582,7 +12242,6 @@ packages: raf: 3.4.1 regenerator-runtime: 0.13.10 whatwg-fetch: 3.6.2 - dev: true /react-base16-styling/0.6.0: resolution: {integrity: sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==} @@ -12633,7 +12292,6 @@ packages: - eslint - supports-color - vue-template-compiler - dev: true /react-dev-utils/12.0.1_qw7fmzhoapcndkteb5rsc33stq: resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} @@ -12735,11 +12393,9 @@ packages: /react-is/17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - dev: true /react-is/18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true /react-json-view/1.21.3_2zx2umvpluuhvlq44va5bta2da: resolution: {integrity: sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==} @@ -12812,7 +12468,6 @@ packages: /react-refresh/0.11.0: resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} engines: {node: '>=0.10.0'} - dev: true /react-refresh/0.14.0: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} @@ -12992,7 +12647,6 @@ packages: - webpack-cli - webpack-hot-middleware - webpack-plugin-serve - dev: true /react-shallow-renderer/16.15.0_react@18.2.0: resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} @@ -13063,7 +12717,6 @@ packages: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: pify: 2.3.0 - dev: true /readable-stream/2.3.7: resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} @@ -13133,7 +12786,6 @@ packages: /regex-parser/2.2.11: resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} - dev: true /regexp.prototype.flags/1.4.3: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} @@ -13142,12 +12794,10 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 functions-have-names: 1.2.3 - dev: true /regexpp/3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} - dev: true /regexpu-core/4.8.0: resolution: {integrity: sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==} @@ -13281,7 +12931,6 @@ packages: /require-directory/2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - dev: true /require-from-string/2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} @@ -13303,7 +12952,6 @@ packages: engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 - dev: true /resolve-from/4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} @@ -13312,7 +12960,6 @@ packages: /resolve-from/5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - dev: true /resolve-pathname/3.0.0: resolution: {integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==} @@ -13335,12 +12982,10 @@ packages: loader-utils: 2.0.4 postcss: 7.0.39 source-map: 0.6.1 - dev: true /resolve.exports/1.1.0: resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} engines: {node: '>=10'} - dev: true /resolve/1.17.0: resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} @@ -13370,7 +13015,6 @@ packages: is-core-module: 2.11.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true /responselike/1.0.2: resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} @@ -13445,7 +13089,6 @@ packages: rollup: 2.79.1 serialize-javascript: 4.0.0 terser: 5.15.1 - dev: true /rollup-plugin-typescript2/0.34.1_aoc4guvlpr5bfeyf2nus4ubkpu: resolution: {integrity: sha512-P4cHLtGikESmqi1CA+tdMDUv8WbQV48mzPYt77TSTOPJpERyZ9TXdDgjSDix8Fkqce6soYz3+fa4lrC93IEkcw==} @@ -13468,7 +13111,6 @@ packages: hasBin: true optionalDependencies: fsevents: 2.3.2 - dev: true /rollup/3.3.0: resolution: {integrity: sha512-wqOV/vUJCYEbWsXvwCkgGWvgaEnsbn4jxBQWKpN816CqsmCimDmCNJI83c6if7QVD4v/zlyRzxN7U2yDT5rfoA==} @@ -13515,14 +13157,12 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.1.3 is-regex: 1.1.4 - dev: true /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} /sanitize.css/13.0.0: resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} - dev: true /sass-loader/12.6.0_webpack@5.75.0: resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} @@ -13546,7 +13186,6 @@ packages: klona: 2.0.5 neo-async: 2.6.2 webpack: 5.75.0 - dev: true /sax/1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} @@ -13556,7 +13195,6 @@ packages: engines: {node: '>=10'} dependencies: xmlchars: 2.2.0 - dev: true /scheduler/0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} @@ -13666,7 +13304,6 @@ packages: resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} dependencies: randombytes: 2.1.0 - dev: true /serialize-javascript/6.0.0: resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} @@ -13810,7 +13447,6 @@ packages: /source-list-map/2.0.1: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} - dev: true /source-map-js/1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} @@ -13826,7 +13462,6 @@ packages: iconv-lite: 0.6.3 source-map-js: 1.0.2 webpack: 5.75.0 - dev: true /source-map-resolve/0.6.0: resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} @@ -13854,14 +13489,12 @@ packages: /source-map/0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} - dev: true /source-map/0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} dependencies: whatwg-url: 7.1.0 - dev: true /sourcemap-codec/1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} @@ -13906,11 +13539,9 @@ packages: engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 - dev: true /stackframe/1.3.4: resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - dev: true /state-toggle/1.0.3: resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==} @@ -13943,7 +13574,6 @@ packages: dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 - dev: true /string-length/5.0.1: resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} @@ -13951,11 +13581,9 @@ packages: dependencies: char-regex: 2.0.1 strip-ansi: 7.0.1 - dev: true /string-natural-compare/3.0.1: resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} - dev: true /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -13985,7 +13613,6 @@ packages: internal-slot: 1.0.3 regexp.prototype.flags: 1.4.3 side-channel: 1.0.4 - dev: true /string.prototype.trimend/1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} @@ -13993,7 +13620,6 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.20.4 - dev: true /string.prototype.trimstart/1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} @@ -14001,7 +13627,6 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 es-abstract: 1.20.4 - dev: true /string_decoder/1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -14041,17 +13666,14 @@ packages: /strip-bom/3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - dev: true /strip-bom/4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} - dev: true /strip-comments/2.0.1: resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} engines: {node: '>=10'} - dev: true /strip-final-newline/2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} @@ -14073,7 +13695,6 @@ packages: webpack: ^5.0.0 dependencies: webpack: 5.75.0 - dev: true /style-to-object/0.3.0: resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} @@ -14115,7 +13736,6 @@ packages: dependencies: has-flag: 4.0.0 supports-color: 7.2.0 - dev: true /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} @@ -14143,7 +13763,6 @@ packages: stable: 0.1.8 unquote: 1.1.1 util.promisify: 1.0.1 - dev: true /svgo/2.8.0: resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} @@ -14160,7 +13779,6 @@ packages: /symbol-tree/3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - dev: true /tailwindcss/3.2.3_neo3lunb2qpadwxplzw7r2isgm: resolution: {integrity: sha512-Xt9D4PK4zuuQCEB8bwK9JUCKmTgUwyac/6b0/42Vqhgl6YJkep+Wf5wq+5uXYfmrupdAD0YY2NY1hyZp1HjRrg==} @@ -14228,7 +13846,6 @@ packages: resolve: 1.22.1 transitivePeerDependencies: - ts-node - dev: true /tapable/1.1.3: resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} @@ -14241,7 +13858,6 @@ packages: /temp-dir/2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} - dev: true /tempy/0.6.0: resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} @@ -14251,7 +13867,6 @@ packages: temp-dir: 2.0.0 type-fest: 0.16.0 unique-string: 2.0.0 - dev: true /terminal-link/2.1.1: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} @@ -14259,7 +13874,6 @@ packages: dependencies: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - dev: true /terser-webpack-plugin/5.3.6_webpack@5.75.0: resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} @@ -14301,14 +13915,12 @@ packages: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 - dev: true /text-table/0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} /throat/6.0.1: resolution: {integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==} - dev: true /thunky/1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} @@ -14323,7 +13935,6 @@ packages: /tmpl/1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: true /to-fast-properties/2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} @@ -14361,7 +13972,6 @@ packages: punycode: 2.1.1 universalify: 0.2.0 url-parse: 1.5.10 - dev: true /tr46/0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -14371,14 +13981,12 @@ packages: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: punycode: 2.1.1 - dev: true /tr46/2.1.0: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} engines: {node: '>=8'} dependencies: punycode: 2.1.1 - dev: true /trim-trailing-lines/1.1.4: resolution: {integrity: sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==} @@ -14394,7 +14002,6 @@ packages: /tryer/1.0.1: resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} - dev: true /ts-morph/16.0.0: resolution: {integrity: sha512-jGNF0GVpFj0orFw55LTsQxVYEUOCWBAbR5Ls7fTYE5pQsbW18ssTb/6UXx/GYAEjS+DQTp8VoTw0vqYMiaaQuw==} @@ -14440,11 +14047,9 @@ packages: json5: 1.0.1 minimist: 1.2.7 strip-bom: 3.0.0 - dev: true /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true /tslib/2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} @@ -14457,31 +14062,26 @@ packages: dependencies: tslib: 1.14.1 typescript: 4.8.4 - dev: true /type-check/0.3.2: resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 - dev: true /type-check/0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 - dev: true /type-detect/4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - dev: true /type-fest/0.16.0: resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} engines: {node: '>=10'} - dev: true /type-fest/0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} @@ -14490,7 +14090,6 @@ packages: /type-fest/0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - dev: true /type-fest/2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} @@ -14525,7 +14124,6 @@ packages: has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true /unescape/1.0.1: resolution: {integrity: sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==} @@ -14647,7 +14245,6 @@ packages: /universalify/0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} - dev: true /universalify/2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} @@ -14659,12 +14256,10 @@ packages: /unquote/1.1.1: resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} - dev: true /upath/1.2.0: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} - dev: true /update-browserslist-db/1.0.10_browserslist@4.21.4: resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} @@ -14730,7 +14325,6 @@ packages: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 - dev: true /use-composed-ref/1.3.0_react@18.2.0: resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} @@ -14802,7 +14396,6 @@ packages: es-abstract: 1.20.4 has-symbols: 1.0.3 object.getownpropertydescriptors: 2.1.5 - dev: true /utila/0.4.0: resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} @@ -14834,7 +14427,6 @@ packages: '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.9.0 source-map: 0.7.4 - dev: true /validator/13.7.0: resolution: {integrity: sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==} @@ -14957,14 +14549,12 @@ packages: deprecated: Use your platform's native performance.now() and performance.timeOrigin. dependencies: browser-process-hrtime: 1.0.0 - dev: true /w3c-xmlserializer/2.0.0: resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} engines: {node: '>=10'} dependencies: xml-name-validator: 3.0.0 - dev: true /wait-on/6.0.1: resolution: {integrity: sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==} @@ -14984,7 +14574,6 @@ packages: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 - dev: true /watchpack/2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} @@ -15008,17 +14597,14 @@ packages: /webidl-conversions/4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - dev: true /webidl-conversions/5.0.0: resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} engines: {node: '>=8'} - dev: true /webidl-conversions/6.1.0: resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} engines: {node: '>=10.4'} - dev: true /webpack-bundle-analyzer/4.7.0: resolution: {integrity: sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==} @@ -15108,7 +14694,6 @@ packages: tapable: 2.2.1 webpack: 5.75.0 webpack-sources: 2.3.1 - dev: true /webpack-merge/5.8.0: resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==} @@ -15123,7 +14708,6 @@ packages: dependencies: source-list-map: 2.0.1 source-map: 0.6.1 - dev: true /webpack-sources/2.3.1: resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} @@ -15131,7 +14715,6 @@ packages: dependencies: source-list-map: 2.0.1 source-map: 0.6.1 - dev: true /webpack-sources/3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} @@ -15205,15 +14788,12 @@ packages: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} dependencies: iconv-lite: 0.4.24 - dev: true /whatwg-fetch/3.6.2: resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==} - dev: true /whatwg-mimetype/2.3.0: resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} - dev: true /whatwg-url/5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -15228,7 +14808,6 @@ packages: lodash.sortby: 4.7.0 tr46: 1.0.1 webidl-conversions: 4.0.2 - dev: true /whatwg-url/8.7.0: resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} @@ -15237,7 +14816,6 @@ packages: lodash: 4.17.21 tr46: 2.1.0 webidl-conversions: 6.1.0 - dev: true /which-boxed-primitive/1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -15247,7 +14825,6 @@ packages: is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true /which-collection/1.0.1: resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} @@ -15304,20 +14881,17 @@ packages: /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} - dev: true /workbox-background-sync/6.5.4: resolution: {integrity: sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==} dependencies: idb: 7.1.1 workbox-core: 6.5.4 - dev: true /workbox-broadcast-update/6.5.4: resolution: {integrity: sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==} dependencies: workbox-core: 6.5.4 - dev: true /workbox-build/6.5.4: resolution: {integrity: sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==} @@ -15363,24 +14937,20 @@ packages: transitivePeerDependencies: - '@types/babel__core' - supports-color - dev: true /workbox-cacheable-response/6.5.4: resolution: {integrity: sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==} dependencies: workbox-core: 6.5.4 - dev: true /workbox-core/6.5.4: resolution: {integrity: sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==} - dev: true /workbox-expiration/6.5.4: resolution: {integrity: sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==} dependencies: idb: 7.1.1 workbox-core: 6.5.4 - dev: true /workbox-google-analytics/6.5.4: resolution: {integrity: sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==} @@ -15389,13 +14959,11 @@ packages: workbox-core: 6.5.4 workbox-routing: 6.5.4 workbox-strategies: 6.5.4 - dev: true /workbox-navigation-preload/6.5.4: resolution: {integrity: sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==} dependencies: workbox-core: 6.5.4 - dev: true /workbox-precaching/6.5.4: resolution: {integrity: sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==} @@ -15403,13 +14971,11 @@ packages: workbox-core: 6.5.4 workbox-routing: 6.5.4 workbox-strategies: 6.5.4 - dev: true /workbox-range-requests/6.5.4: resolution: {integrity: sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==} dependencies: workbox-core: 6.5.4 - dev: true /workbox-recipes/6.5.4: resolution: {integrity: sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==} @@ -15420,30 +14986,25 @@ packages: workbox-precaching: 6.5.4 workbox-routing: 6.5.4 workbox-strategies: 6.5.4 - dev: true /workbox-routing/6.5.4: resolution: {integrity: sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==} dependencies: workbox-core: 6.5.4 - dev: true /workbox-strategies/6.5.4: resolution: {integrity: sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==} dependencies: workbox-core: 6.5.4 - dev: true /workbox-streams/6.5.4: resolution: {integrity: sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==} dependencies: workbox-core: 6.5.4 workbox-routing: 6.5.4 - dev: true /workbox-sw/6.5.4: resolution: {integrity: sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==} - dev: true /workbox-webpack-plugin/6.5.4_webpack@5.75.0: resolution: {integrity: sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==} @@ -15460,14 +15021,12 @@ packages: transitivePeerDependencies: - '@types/babel__core' - supports-color - dev: true /workbox-window/6.5.4: resolution: {integrity: sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==} dependencies: '@types/trusted-types': 2.0.2 workbox-core: 6.5.4 - dev: true /wrap-ansi/7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} @@ -15535,11 +15094,9 @@ packages: /xml-name-validator/3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - dev: true /xmlchars/2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - dev: true /xtend/4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} @@ -15548,7 +15105,6 @@ packages: /y18n/5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - dev: true /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -15560,7 +15116,6 @@ packages: /yargs-parser/20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} - dev: true /yargs/16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} @@ -15573,7 +15128,6 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.9 - dev: true /yn/3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} From 42d87582b026f047c4985649e9ffcc06846f755b Mon Sep 17 00:00:00 2001 From: Mohamed EL AYADI Date: Sat, 26 Nov 2022 17:32:59 +0100 Subject: [PATCH 05/13] remove example project from source (keep only in my machine) --- packages/example/.env | 5 - packages/example/package.json | 30 - packages/example/pnpm-lock.yaml | 9722 ----------------- packages/example/public/index.html | 24 - packages/example/public/manifest.json | 8 - packages/example/src/App2.js | 67 - packages/example/src/example1/index.js | 5 - packages/example/src/index.bak.js | 126 - packages/example/src/index.css | 51 - packages/example/src/index.js | 218 - packages/example/src/past/App.js | 181 - packages/example/src/past/App2.js | 16 - packages/example/src/past/BasicUsageDemo.js | 149 - packages/example/src/past/BrokerDemo.js | 84 - packages/example/src/past/DemoDemo.js | 84 - packages/example/src/past/EmitDemo.js | 134 - packages/example/src/past/LanesDemo.js | 184 - packages/example/src/past/Navigation.js | 72 - packages/example/src/past/NextDemo.js | 183 - packages/example/src/past/Provider.js | 94 - packages/example/src/past/ReducersDemo.js | 72 - packages/example/src/past/ReduxDemo.js | 63 - packages/example/src/past/ReplaceStateDemo.js | 42 - packages/example/src/past/RoutingDemo.js | 106 - packages/example/src/past/SelectorsDemo.js | 111 - packages/example/src/past/StandaloneDemo.js | 50 - packages/example/src/past/Subscription.js | 144 - packages/example/src/past/bug.js | 110 - packages/example/src/past/index.js | 8 - packages/example/src/past/producers.js | 57 - packages/example/src/past/v2/App.js | 28 - packages/example/src/past/v2/Bug.js | 89 - packages/example/src/past/v2/Bug2.js | 202 - packages/example/src/past/v2/Bug3.js | 125 - .../src/past/v2/core/AsyncStateProvider.js | 22 - .../example/src/past/v2/domain/posts/api.js | 0 .../example/src/past/v2/domain/posts/index.js | 0 .../src/past/v2/domain/posts/promises.js | 0 .../src/past/v2/domain/posts/selectors.js | 0 .../example/src/past/v2/domain/users/api.js | 13 - .../example/src/past/v2/domain/users/index.js | 186 - .../src/past/v2/domain/users/producers.js | 47 - packages/example/src/past/v2/routing/index.js | 0 packages/example/src/past/v2/shared/utils.js | 64 - .../example/src/past/v2/suspense/Component.js | 22 - .../src/past/v2/suspense/Component2.js | 22 - .../src/past/v2/suspense/ComponentNested.js | 22 - .../src/past/v2/suspense/abstraction.js | 25 - .../src/past/v2/suspense/index-nested.js | 11 - .../example/src/past/v2/suspense/index.js | 11 - .../example/src/past/v2/suspense/index2.js | 11 - 51 files changed, 13100 deletions(-) delete mode 100644 packages/example/.env delete mode 100644 packages/example/package.json delete mode 100644 packages/example/pnpm-lock.yaml delete mode 100644 packages/example/public/index.html delete mode 100644 packages/example/public/manifest.json delete mode 100644 packages/example/src/App2.js delete mode 100644 packages/example/src/example1/index.js delete mode 100644 packages/example/src/index.bak.js delete mode 100644 packages/example/src/index.css delete mode 100644 packages/example/src/index.js delete mode 100644 packages/example/src/past/App.js delete mode 100644 packages/example/src/past/App2.js delete mode 100644 packages/example/src/past/BasicUsageDemo.js delete mode 100644 packages/example/src/past/BrokerDemo.js delete mode 100644 packages/example/src/past/DemoDemo.js delete mode 100644 packages/example/src/past/EmitDemo.js delete mode 100644 packages/example/src/past/LanesDemo.js delete mode 100644 packages/example/src/past/Navigation.js delete mode 100644 packages/example/src/past/NextDemo.js delete mode 100644 packages/example/src/past/Provider.js delete mode 100644 packages/example/src/past/ReducersDemo.js delete mode 100644 packages/example/src/past/ReduxDemo.js delete mode 100644 packages/example/src/past/ReplaceStateDemo.js delete mode 100644 packages/example/src/past/RoutingDemo.js delete mode 100644 packages/example/src/past/SelectorsDemo.js delete mode 100644 packages/example/src/past/StandaloneDemo.js delete mode 100644 packages/example/src/past/Subscription.js delete mode 100644 packages/example/src/past/bug.js delete mode 100644 packages/example/src/past/index.js delete mode 100644 packages/example/src/past/producers.js delete mode 100644 packages/example/src/past/v2/App.js delete mode 100644 packages/example/src/past/v2/Bug.js delete mode 100644 packages/example/src/past/v2/Bug2.js delete mode 100644 packages/example/src/past/v2/Bug3.js delete mode 100644 packages/example/src/past/v2/core/AsyncStateProvider.js delete mode 100644 packages/example/src/past/v2/domain/posts/api.js delete mode 100644 packages/example/src/past/v2/domain/posts/index.js delete mode 100644 packages/example/src/past/v2/domain/posts/promises.js delete mode 100644 packages/example/src/past/v2/domain/posts/selectors.js delete mode 100644 packages/example/src/past/v2/domain/users/api.js delete mode 100644 packages/example/src/past/v2/domain/users/index.js delete mode 100644 packages/example/src/past/v2/domain/users/producers.js delete mode 100644 packages/example/src/past/v2/routing/index.js delete mode 100644 packages/example/src/past/v2/shared/utils.js delete mode 100644 packages/example/src/past/v2/suspense/Component.js delete mode 100644 packages/example/src/past/v2/suspense/Component2.js delete mode 100644 packages/example/src/past/v2/suspense/ComponentNested.js delete mode 100644 packages/example/src/past/v2/suspense/abstraction.js delete mode 100644 packages/example/src/past/v2/suspense/index-nested.js delete mode 100644 packages/example/src/past/v2/suspense/index.js delete mode 100644 packages/example/src/past/v2/suspense/index2.js diff --git a/packages/example/.env b/packages/example/.env deleted file mode 100644 index 726e0d16..00000000 --- a/packages/example/.env +++ /dev/null @@ -1,5 +0,0 @@ -# Added to prevent error with mismatching eslint versions -# between the package and the /example due to the way npm/yarn link work. -# See issue for more info: https://github.com/Hermanya/create-react-hook/issues/3 -SKIP_PREFLIGHT_CHECK=true -PUBLIC_URL=/ diff --git a/packages/example/package.json b/packages/example/package.json deleted file mode 100644 index 4b65ccda..00000000 --- a/packages/example/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "react-async-state-example", - "homepage": "https://incepter.github.io/react-async-states", - "version": "0.0.0", - "license": "MIT", - "private": true, - "dependencies": { - "axios": "^0.21.1", - "lodash": "^4.17.21", - "prop-types": "^15.6.2", - "react": "18.2.0", - "react-async-states": "workspace:*", - "async-states-devtools": "workspace:*", - "react-dom": "18.2.0", - "react-router-dom": "6.4.3", - "react-scripts": "5.0.1" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test --env=jsdom", - "eject": "react-scripts eject" - }, - "browserslist": [ - ">0.2%", - "not dead", - "not ie <= 11", - "not op_mini all" - ] -} diff --git a/packages/example/pnpm-lock.yaml b/packages/example/pnpm-lock.yaml deleted file mode 100644 index 3a619ae3..00000000 --- a/packages/example/pnpm-lock.yaml +++ /dev/null @@ -1,9722 +0,0 @@ -lockfileVersion: 5.4 - -specifiers: - axios: ^0.21.1 - lodash: ^4.17.21 - prop-types: ^15.6.2 - react: 18.2.0 - react-async-states: 1.0.0-rc-7 - react-dom: 18.2.0 - react-router-dom: 6.4.3 - react-scripts: 5.0.1 - -dependencies: - axios: 0.21.4 - lodash: 4.17.21 - prop-types: 15.8.1 - react: 18.2.0 - react-async-states: link:../react-async-states - react-dom: 18.2.0_react@18.2.0 - react-router-dom: 6.4.3_biqbaboplfbrettd7655fr4n2y - react-scripts: 5.0.1_react@18.2.0 - -packages: - - /@ampproject/remapping/2.2.0: - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.17 - dev: false - - /@apideck/better-ajv-errors/0.3.6_ajv@8.11.0: - resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} - engines: {node: '>=10'} - peerDependencies: - ajv: '>=8' - dependencies: - ajv: 8.11.0 - json-schema: 0.4.0 - jsonpointer: 5.0.1 - leven: 3.1.0 - dev: false - - /@babel/code-frame/7.18.6: - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.18.6 - dev: false - - /@babel/compat-data/7.20.1: - resolution: {integrity: sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/core/7.20.2: - resolution: {integrity: sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.4 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 - '@babel/helper-module-transforms': 7.20.2 - '@babel/helpers': 7.20.1 - '@babel/parser': 7.20.3 - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 - convert-source-map: 1.9.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.1 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/eslint-parser/7.19.1_qn3xnppexigqgidmp7nt2fn2oy: - resolution: {integrity: sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': '>=7.11.0' - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@babel/core': 7.20.2 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.27.0 - eslint-visitor-keys: 2.1.0 - semver: 6.3.0 - dev: false - - /@babel/generator/7.20.4: - resolution: {integrity: sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.20.2 - '@jridgewell/gen-mapping': 0.3.2 - jsesc: 2.5.2 - dev: false - - /@babel/helper-annotate-as-pure/7.18.6: - resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.20.2 - dev: false - - /@babel/helper-builder-binary-assignment-operator-visitor/7.18.9: - resolution: {integrity: sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-explode-assignable-expression': 7.18.6 - '@babel/types': 7.20.2 - dev: false - - /@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.2: - resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.20.1 - '@babel/core': 7.20.2 - '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.4 - semver: 6.3.0 - dev: false - - /@babel/helper-create-class-features-plugin/7.20.2_@babel+core@7.20.2: - resolution: {integrity: sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-member-expression-to-functions': 7.18.9 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.19.1 - '@babel/helper-split-export-declaration': 7.18.6 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-create-regexp-features-plugin/7.19.0_@babel+core@7.20.2: - resolution: {integrity: sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-annotate-as-pure': 7.18.6 - regexpu-core: 5.2.1 - dev: false - - /@babel/helper-define-polyfill-provider/0.3.3_@babel+core@7.20.2: - resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} - peerDependencies: - '@babel/core': ^7.4.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - debug: 4.3.4 - lodash.debounce: 4.0.8 - resolve: 1.22.1 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-environment-visitor/7.18.9: - resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-explode-assignable-expression/7.18.6: - resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.20.2 - dev: false - - /@babel/helper-function-name/7.19.0: - resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.20.2 - dev: false - - /@babel/helper-hoist-variables/7.18.6: - resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.20.2 - dev: false - - /@babel/helper-member-expression-to-functions/7.18.9: - resolution: {integrity: sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.20.2 - dev: false - - /@babel/helper-module-imports/7.18.6: - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.20.2 - dev: false - - /@babel/helper-module-transforms/7.20.2: - resolution: {integrity: sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-simple-access': 7.20.2 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-optimise-call-expression/7.18.6: - resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.20.2 - dev: false - - /@babel/helper-plugin-utils/7.20.2: - resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.20.2: - resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-wrap-function': 7.19.0 - '@babel/types': 7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-replace-supers/7.19.1: - resolution: {integrity: sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==} - engines: {node: '>=6.9.0'} - dependencies: - '@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.20.1 - '@babel/types': 7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-simple-access/7.20.2: - resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.20.2 - dev: false - - /@babel/helper-skip-transparent-expression-wrappers/7.20.0: - resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.20.2 - dev: false - - /@babel/helper-split-export-declaration/7.18.6: - resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.20.2 - dev: false - - /@babel/helper-string-parser/7.19.4: - resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-validator-identifier/7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-validator-option/7.18.6: - resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-wrap-function/7.19.0: - resolution: {integrity: sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-function-name': 7.19.0 - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helpers/7.20.1: - resolution: {integrity: sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/highlight/7.18.6: - resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.19.1 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: false - - /@babel/parser/7.20.3: - resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.20.2 - dev: false - - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.18.9_@babel+core@7.20.2: - resolution: {integrity: sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.20.2 - dev: false - - /@babel/plugin-proposal-async-generator-functions/7.20.1_@babel+core@7.20.2: - resolution: {integrity: sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-proposal-class-properties/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-proposal-class-static-block/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-proposal-decorators/7.20.2_@babel+core@7.20.2: - resolution: {integrity: sha512-nkBH96IBmgKnbHQ5gXFrcmez+Z9S2EIDKDQGp005ROqBigc88Tky4rzCnlP/lnlj245dCEQl4/YyV0V1kYh5dw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-replace-supers': 7.19.1 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/plugin-syntax-decorators': 7.19.0_@babel+core@7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-proposal-dynamic-import/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.2 - dev: false - - /@babel/plugin-proposal-export-namespace-from/7.18.9_@babel+core@7.20.2: - resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.2 - dev: false - - /@babel/plugin-proposal-json-strings/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.2 - dev: false - - /@babel/plugin-proposal-logical-assignment-operators/7.18.9_@babel+core@7.20.2: - resolution: {integrity: sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.2 - dev: false - - /@babel/plugin-proposal-nullish-coalescing-operator/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.2 - dev: false - - /@babel/plugin-proposal-numeric-separator/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.2 - dev: false - - /@babel/plugin-proposal-object-rest-spread/7.20.2_@babel+core@7.20.2: - resolution: {integrity: sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.20.1 - '@babel/core': 7.20.2 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-transform-parameters': 7.20.3_@babel+core@7.20.2 - dev: false - - /@babel/plugin-proposal-optional-catch-binding/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.2 - dev: false - - /@babel/plugin-proposal-optional-chaining/7.18.9_@babel+core@7.20.2: - resolution: {integrity: sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.2 - dev: false - - /@babel/plugin-proposal-private-methods/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-proposal-private-property-in-object/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-proposal-unicode-property-regex/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} - engines: {node: '>=4'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.2: - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.20.2: - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.2: - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.20.2: - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-decorators/7.19.0_@babel+core@7.20.2: - resolution: {integrity: sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.20.2: - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.20.2: - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-flow/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-import-assertions/7.20.0_@babel+core@7.20.2: - resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.20.2: - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.2: - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.20.2: - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.20.2: - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.20.2: - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.2: - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.20.2: - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.20.2: - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.20.2: - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.20.2: - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.2: - resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-arrow-functions/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-async-to-generator/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-remap-async-to-generator': 7.18.9_@babel+core@7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-block-scoped-functions/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-block-scoping/7.20.2_@babel+core@7.20.2: - resolution: {integrity: sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-classes/7.20.2_@babel+core@7.20.2: - resolution: {integrity: sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-replace-supers': 7.19.1 - '@babel/helper-split-export-declaration': 7.18.6 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-computed-properties/7.18.9_@babel+core@7.20.2: - resolution: {integrity: sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-destructuring/7.20.2_@babel+core@7.20.2: - resolution: {integrity: sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-dotall-regex/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-duplicate-keys/7.18.9_@babel+core@7.20.2: - resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-exponentiation-operator/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.18.9 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-flow-strip-types/7.19.0_@babel+core@7.20.2: - resolution: {integrity: sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.20.2 - dev: false - - /@babel/plugin-transform-for-of/7.18.8_@babel+core@7.20.2: - resolution: {integrity: sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-function-name/7.18.9_@babel+core@7.20.2: - resolution: {integrity: sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-literals/7.18.9_@babel+core@7.20.2: - resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-member-expression-literals/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-modules-amd/7.19.6_@babel+core@7.20.2: - resolution: {integrity: sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-module-transforms': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-modules-commonjs/7.19.6_@babel+core@7.20.2: - resolution: {integrity: sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-module-transforms': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-simple-access': 7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-modules-systemjs/7.19.6_@babel+core@7.20.2: - resolution: {integrity: sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-identifier': 7.19.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-modules-umd/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-module-transforms': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-named-capturing-groups-regex/7.19.1_@babel+core@7.20.2: - resolution: {integrity: sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-new-target/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-object-super/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-replace-supers': 7.19.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-parameters/7.20.3_@babel+core@7.20.2: - resolution: {integrity: sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-property-literals/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-react-constant-elements/7.20.2_@babel+core@7.20.2: - resolution: {integrity: sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-react-display-name/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-react-jsx-development/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.20.2 - dev: false - - /@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.20.2: - resolution: {integrity: sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.2 - '@babel/types': 7.20.2 - dev: false - - /@babel/plugin-transform-react-pure-annotations/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-regenerator/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - regenerator-transform: 0.15.0 - dev: false - - /@babel/plugin-transform-reserved-words/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-runtime/7.19.6_@babel+core@7.20.2: - resolution: {integrity: sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-module-imports': 7.18.6 - '@babel/helper-plugin-utils': 7.20.2 - babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.2 - babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.2 - babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.2 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-shorthand-properties/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-spread/7.19.0_@babel+core@7.20.2: - resolution: {integrity: sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 - dev: false - - /@babel/plugin-transform-sticky-regex/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-template-literals/7.18.9_@babel+core@7.20.2: - resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-typeof-symbol/7.18.9_@babel+core@7.20.2: - resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-typescript/7.20.2_@babel+core@7.20.2: - resolution: {integrity: sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-class-features-plugin': 7.20.2_@babel+core@7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/plugin-transform-unicode-escapes/7.18.10_@babel+core@7.20.2: - resolution: {integrity: sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/plugin-transform-unicode-regex/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-create-regexp-features-plugin': 7.19.0_@babel+core@7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - dev: false - - /@babel/preset-env/7.20.2_@babel+core@7.20.2: - resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.20.1 - '@babel/core': 7.20.2 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-proposal-async-generator-functions': 7.20.1_@babel+core@7.20.2 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-class-static-block': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-dynamic-import': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-export-namespace-from': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-proposal-json-strings': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-logical-assignment-operators': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-object-rest-spread': 7.20.2_@babel+core@7.20.2 - '@babel/plugin-proposal-optional-catch-binding': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-private-property-in-object': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.2 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.2 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.20.2 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-import-assertions': 7.20.0_@babel+core@7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.20.2 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.2 - '@babel/plugin-transform-arrow-functions': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-async-to-generator': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-block-scoped-functions': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-block-scoping': 7.20.2_@babel+core@7.20.2 - '@babel/plugin-transform-classes': 7.20.2_@babel+core@7.20.2 - '@babel/plugin-transform-computed-properties': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-transform-destructuring': 7.20.2_@babel+core@7.20.2 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-duplicate-keys': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-transform-exponentiation-operator': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-for-of': 7.18.8_@babel+core@7.20.2 - '@babel/plugin-transform-function-name': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-transform-literals': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-transform-member-expression-literals': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-modules-amd': 7.19.6_@babel+core@7.20.2 - '@babel/plugin-transform-modules-commonjs': 7.19.6_@babel+core@7.20.2 - '@babel/plugin-transform-modules-systemjs': 7.19.6_@babel+core@7.20.2 - '@babel/plugin-transform-modules-umd': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-named-capturing-groups-regex': 7.19.1_@babel+core@7.20.2 - '@babel/plugin-transform-new-target': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-object-super': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-parameters': 7.20.3_@babel+core@7.20.2 - '@babel/plugin-transform-property-literals': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-regenerator': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-reserved-words': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-shorthand-properties': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-spread': 7.19.0_@babel+core@7.20.2 - '@babel/plugin-transform-sticky-regex': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-template-literals': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-transform-typeof-symbol': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-transform-unicode-escapes': 7.18.10_@babel+core@7.20.2 - '@babel/plugin-transform-unicode-regex': 7.18.6_@babel+core@7.20.2 - '@babel/preset-modules': 0.1.5_@babel+core@7.20.2 - '@babel/types': 7.20.2 - babel-plugin-polyfill-corejs2: 0.3.3_@babel+core@7.20.2 - babel-plugin-polyfill-corejs3: 0.6.0_@babel+core@7.20.2 - babel-plugin-polyfill-regenerator: 0.4.1_@babel+core@7.20.2 - core-js-compat: 3.26.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/preset-modules/0.1.5_@babel+core@7.20.2: - resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-dotall-regex': 7.18.6_@babel+core@7.20.2 - '@babel/types': 7.20.2 - esutils: 2.0.3 - dev: false - - /@babel/preset-react/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-transform-react-display-name': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-react-jsx': 7.19.0_@babel+core@7.20.2 - '@babel/plugin-transform-react-jsx-development': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-react-pure-annotations': 7.18.6_@babel+core@7.20.2 - dev: false - - /@babel/preset-typescript/7.18.6_@babel+core@7.20.2: - resolution: {integrity: sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-plugin-utils': 7.20.2 - '@babel/helper-validator-option': 7.18.6 - '@babel/plugin-transform-typescript': 7.20.2_@babel+core@7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/runtime-corejs3/7.20.1: - resolution: {integrity: sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==} - engines: {node: '>=6.9.0'} - dependencies: - core-js-pure: 3.26.0 - regenerator-runtime: 0.13.10 - dev: false - - /@babel/runtime/7.20.1: - resolution: {integrity: sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.13.10 - dev: false - - /@babel/template/7.18.10: - resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.18.6 - '@babel/parser': 7.20.3 - '@babel/types': 7.20.2 - dev: false - - /@babel/traverse/7.20.1: - resolution: {integrity: sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.4 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.3 - '@babel/types': 7.20.2 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/types/7.20.2: - resolution: {integrity: sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.19.4 - '@babel/helper-validator-identifier': 7.19.1 - to-fast-properties: 2.0.0 - dev: false - - /@bcoe/v8-coverage/0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: false - - /@csstools/normalize.css/12.0.0: - resolution: {integrity: sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==} - dev: false - - /@csstools/postcss-cascade-layers/1.1.1_postcss@8.4.19: - resolution: {integrity: sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/selector-specificity': 2.0.2_45y636a2vqremknoajyxd5nkzy - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /@csstools/postcss-color-function/1.1.1_postcss@8.4.19: - resolution: {integrity: sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-font-format-keywords/1.0.1_postcss@8.4.19: - resolution: {integrity: sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-hwb-function/1.0.2_postcss@8.4.19: - resolution: {integrity: sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-ic-unit/1.0.1_postcss@8.4.19: - resolution: {integrity: sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-is-pseudo-class/2.0.7_postcss@8.4.19: - resolution: {integrity: sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/selector-specificity': 2.0.2_45y636a2vqremknoajyxd5nkzy - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /@csstools/postcss-nested-calc/1.0.0_postcss@8.4.19: - resolution: {integrity: sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-normalize-display-values/1.0.1_postcss@8.4.19: - resolution: {integrity: sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-oklab-function/1.1.1_postcss@8.4.19: - resolution: {integrity: sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-progressive-custom-properties/1.3.0_postcss@8.4.19: - resolution: {integrity: sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-stepped-value-functions/1.0.1_postcss@8.4.19: - resolution: {integrity: sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-text-decoration-shorthand/1.0.0_postcss@8.4.19: - resolution: {integrity: sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-trigonometric-functions/1.0.2_postcss@8.4.19: - resolution: {integrity: sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==} - engines: {node: ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /@csstools/postcss-unset-value/1.0.2_postcss@8.4.19: - resolution: {integrity: sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - dev: false - - /@csstools/selector-specificity/2.0.2_45y636a2vqremknoajyxd5nkzy: - resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - postcss-selector-parser: ^6.0.10 - dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /@eslint/eslintrc/1.3.3: - resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.4.1 - globals: 13.17.0 - ignore: 5.2.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@humanwhocodes/config-array/0.11.7: - resolution: {integrity: sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: false - - /@humanwhocodes/module-importer/1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: false - - /@humanwhocodes/object-schema/1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - dev: false - - /@istanbuljs/load-nyc-config/1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - dev: false - - /@istanbuljs/schema/0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: false - - /@jest/console/27.5.1: - resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 18.11.9 - chalk: 4.1.2 - jest-message-util: 27.5.1 - jest-util: 27.5.1 - slash: 3.0.0 - dev: false - - /@jest/console/28.1.3: - resolution: {integrity: sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/types': 28.1.3 - '@types/node': 18.11.9 - chalk: 4.1.2 - jest-message-util: 28.1.3 - jest-util: 28.1.3 - slash: 3.0.0 - dev: false - - /@jest/core/27.5.1: - resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/console': 27.5.1 - '@jest/reporters': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 18.11.9 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.8.1 - exit: 0.1.2 - graceful-fs: 4.2.10 - jest-changed-files: 27.5.1 - jest-config: 27.5.1 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-resolve-dependencies: 27.5.1 - jest-runner: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - jest-watcher: 27.5.1 - micromatch: 4.0.5 - rimraf: 3.0.2 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: false - - /@jest/environment/27.5.1: - resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 18.11.9 - jest-mock: 27.5.1 - dev: false - - /@jest/fake-timers/27.5.1: - resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@sinonjs/fake-timers': 8.1.0 - '@types/node': 18.11.9 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-util: 27.5.1 - dev: false - - /@jest/globals/27.5.1: - resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/types': 27.5.1 - expect: 27.5.1 - dev: false - - /@jest/reporters/27.5.1: - resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 18.11.9 - chalk: 4.1.2 - collect-v8-coverage: 1.0.1 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.10 - istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 5.2.1 - istanbul-lib-report: 3.0.0 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.5 - jest-haste-map: 27.5.1 - jest-resolve: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - slash: 3.0.0 - source-map: 0.6.1 - string-length: 4.0.2 - terminal-link: 2.1.1 - v8-to-istanbul: 8.1.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@jest/schemas/28.1.3: - resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@sinclair/typebox': 0.24.51 - dev: false - - /@jest/source-map/27.5.1: - resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - callsites: 3.1.0 - graceful-fs: 4.2.10 - source-map: 0.6.1 - dev: false - - /@jest/test-result/27.5.1: - resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/console': 27.5.1 - '@jest/types': 27.5.1 - '@types/istanbul-lib-coverage': 2.0.4 - collect-v8-coverage: 1.0.1 - dev: false - - /@jest/test-result/28.1.3: - resolution: {integrity: sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/console': 28.1.3 - '@jest/types': 28.1.3 - '@types/istanbul-lib-coverage': 2.0.4 - collect-v8-coverage: 1.0.1 - dev: false - - /@jest/test-sequencer/27.5.1: - resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/test-result': 27.5.1 - graceful-fs: 4.2.10 - jest-haste-map: 27.5.1 - jest-runtime: 27.5.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@jest/transform/27.5.1: - resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/core': 7.20.2 - '@jest/types': 27.5.1 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 1.9.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.10 - jest-haste-map: 27.5.1 - jest-regex-util: 27.5.1 - jest-util: 27.5.1 - micromatch: 4.0.5 - pirates: 4.0.5 - slash: 3.0.0 - source-map: 0.6.1 - write-file-atomic: 3.0.3 - transitivePeerDependencies: - - supports-color - dev: false - - /@jest/types/27.5.1: - resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 18.11.9 - '@types/yargs': 16.0.4 - chalk: 4.1.2 - dev: false - - /@jest/types/28.1.3: - resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/schemas': 28.1.3 - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 18.11.9 - '@types/yargs': 17.0.13 - chalk: 4.1.2 - dev: false - - /@jridgewell/gen-mapping/0.1.1: - resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - dev: false - - /@jridgewell/gen-mapping/0.3.2: - resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.17 - dev: false - - /@jridgewell/resolve-uri/3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} - dev: false - - /@jridgewell/set-array/1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - dev: false - - /@jridgewell/source-map/0.3.2: - resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} - dependencies: - '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 - dev: false - - /@jridgewell/sourcemap-codec/1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: false - - /@jridgewell/trace-mapping/0.3.17: - resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} - dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 - dev: false - - /@leichtgewicht/ip-codec/2.0.4: - resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} - dev: false - - /@nicolo-ribaudo/eslint-scope-5-internals/5.1.1-v1: - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - dependencies: - eslint-scope: 5.1.1 - dev: false - - /@nodelib/fs.scandir/2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: false - - /@nodelib/fs.stat/2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: false - - /@nodelib/fs.walk/1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 - dev: false - - /@pmmmwh/react-refresh-webpack-plugin/0.5.9_unmakpayn7vcxadrrsbqlrpehy: - resolution: {integrity: sha512-7QV4cqUwhkDIHpMAZ9mestSJ2DMIotVTbOUwbiudhjCRTAWWKIaBecELiEM2LT3AHFeOAaHIcFu4dbXjX+9GBA==} - engines: {node: '>= 10.13'} - peerDependencies: - '@types/webpack': 4.x || 5.x - react-refresh: '>=0.10.0 <1.0.0' - sockjs-client: ^1.4.0 - type-fest: '>=0.17.0 <4.0.0' - webpack: '>=4.43.0 <6.0.0' - webpack-dev-server: 3.x || 4.x - webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x - peerDependenciesMeta: - '@types/webpack': - optional: true - sockjs-client: - optional: true - type-fest: - optional: true - webpack-dev-server: - optional: true - webpack-hot-middleware: - optional: true - webpack-plugin-serve: - optional: true - dependencies: - ansi-html-community: 0.0.8 - common-path-prefix: 3.0.0 - core-js-pure: 3.26.0 - error-stack-parser: 2.1.4 - find-up: 5.0.0 - html-entities: 2.3.3 - loader-utils: 2.0.4 - react-refresh: 0.11.0 - schema-utils: 3.1.1 - source-map: 0.7.4 - webpack: 5.75.0 - webpack-dev-server: 4.11.1_webpack@5.75.0 - dev: false - - /@remix-run/router/1.0.3: - resolution: {integrity: sha512-ceuyTSs7PZ/tQqi19YZNBc5X7kj1f8p+4DIyrcIYFY9h+hd1OKm4RqtiWldR9eGEvIiJfsqwM4BsuCtRIuEw6Q==} - engines: {node: '>=14'} - dev: false - - /@rollup/plugin-babel/5.3.1_rw3hudt2pmn5afxog7l3b6qtze: - resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} - engines: {node: '>= 10.0.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0 - peerDependenciesMeta: - '@types/babel__core': - optional: true - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-module-imports': 7.18.6 - '@rollup/pluginutils': 3.1.0_rollup@2.79.1 - rollup: 2.79.1 - dev: false - - /@rollup/plugin-node-resolve/11.2.1_rollup@2.79.1: - resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.79.1 - '@types/resolve': 1.17.1 - builtin-modules: 3.3.0 - deepmerge: 4.2.2 - is-module: 1.0.0 - resolve: 1.22.1 - rollup: 2.79.1 - dev: false - - /@rollup/plugin-replace/2.4.2_rollup@2.79.1: - resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.79.1 - magic-string: 0.25.9 - rollup: 2.79.1 - dev: false - - /@rollup/pluginutils/3.1.0_rollup@2.79.1: - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.1 - rollup: 2.79.1 - dev: false - - /@rushstack/eslint-patch/1.2.0: - resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} - dev: false - - /@sinclair/typebox/0.24.51: - resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} - dev: false - - /@sinonjs/commons/1.8.5: - resolution: {integrity: sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==} - dependencies: - type-detect: 4.0.8 - dev: false - - /@sinonjs/fake-timers/8.1.0: - resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} - dependencies: - '@sinonjs/commons': 1.8.5 - dev: false - - /@surma/rollup-plugin-off-main-thread/2.2.3: - resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} - dependencies: - ejs: 3.1.8 - json5: 2.2.1 - magic-string: 0.25.9 - string.prototype.matchall: 4.0.8 - dev: false - - /@svgr/babel-plugin-add-jsx-attribute/5.4.0: - resolution: {integrity: sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-remove-jsx-attribute/5.4.0: - resolution: {integrity: sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-remove-jsx-empty-expression/5.0.1: - resolution: {integrity: sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-replace-jsx-attribute-value/5.0.1: - resolution: {integrity: sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-svg-dynamic-title/5.4.0: - resolution: {integrity: sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-svg-em-dimensions/5.4.0: - resolution: {integrity: sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-transform-react-native-svg/5.4.0: - resolution: {integrity: sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-plugin-transform-svg-component/5.5.0: - resolution: {integrity: sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==} - engines: {node: '>=10'} - dev: false - - /@svgr/babel-preset/5.5.0: - resolution: {integrity: sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==} - engines: {node: '>=10'} - dependencies: - '@svgr/babel-plugin-add-jsx-attribute': 5.4.0 - '@svgr/babel-plugin-remove-jsx-attribute': 5.4.0 - '@svgr/babel-plugin-remove-jsx-empty-expression': 5.0.1 - '@svgr/babel-plugin-replace-jsx-attribute-value': 5.0.1 - '@svgr/babel-plugin-svg-dynamic-title': 5.4.0 - '@svgr/babel-plugin-svg-em-dimensions': 5.4.0 - '@svgr/babel-plugin-transform-react-native-svg': 5.4.0 - '@svgr/babel-plugin-transform-svg-component': 5.5.0 - dev: false - - /@svgr/core/5.5.0: - resolution: {integrity: sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==} - engines: {node: '>=10'} - dependencies: - '@svgr/plugin-jsx': 5.5.0 - camelcase: 6.3.0 - cosmiconfig: 7.0.1 - transitivePeerDependencies: - - supports-color - dev: false - - /@svgr/hast-util-to-babel-ast/5.5.0: - resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==} - engines: {node: '>=10'} - dependencies: - '@babel/types': 7.20.2 - dev: false - - /@svgr/plugin-jsx/5.5.0: - resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==} - engines: {node: '>=10'} - dependencies: - '@babel/core': 7.20.2 - '@svgr/babel-preset': 5.5.0 - '@svgr/hast-util-to-babel-ast': 5.5.0 - svg-parser: 2.0.4 - transitivePeerDependencies: - - supports-color - dev: false - - /@svgr/plugin-svgo/5.5.0: - resolution: {integrity: sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==} - engines: {node: '>=10'} - dependencies: - cosmiconfig: 7.0.1 - deepmerge: 4.2.2 - svgo: 1.3.2 - dev: false - - /@svgr/webpack/5.5.0: - resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==} - engines: {node: '>=10'} - dependencies: - '@babel/core': 7.20.2 - '@babel/plugin-transform-react-constant-elements': 7.20.2_@babel+core@7.20.2 - '@babel/preset-env': 7.20.2_@babel+core@7.20.2 - '@babel/preset-react': 7.18.6_@babel+core@7.20.2 - '@svgr/core': 5.5.0 - '@svgr/plugin-jsx': 5.5.0 - '@svgr/plugin-svgo': 5.5.0 - loader-utils: 2.0.4 - transitivePeerDependencies: - - supports-color - dev: false - - /@tootallnate/once/1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: false - - /@trysound/sax/0.2.0: - resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} - engines: {node: '>=10.13.0'} - dev: false - - /@types/babel__core/7.1.20: - resolution: {integrity: sha512-PVb6Bg2QuscZ30FvOU7z4guG6c926D9YRvOxEaelzndpMsvP+YM74Q/dAFASpg2l6+XLalxSGxcq/lrgYWZtyQ==} - dependencies: - '@babel/parser': 7.20.3 - '@babel/types': 7.20.2 - '@types/babel__generator': 7.6.4 - '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.18.2 - dev: false - - /@types/babel__generator/7.6.4: - resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} - dependencies: - '@babel/types': 7.20.2 - dev: false - - /@types/babel__template/7.4.1: - resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} - dependencies: - '@babel/parser': 7.20.3 - '@babel/types': 7.20.2 - dev: false - - /@types/babel__traverse/7.18.2: - resolution: {integrity: sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==} - dependencies: - '@babel/types': 7.20.2 - dev: false - - /@types/body-parser/1.19.2: - resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} - dependencies: - '@types/connect': 3.4.35 - '@types/node': 18.11.9 - dev: false - - /@types/bonjour/3.5.10: - resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} - dependencies: - '@types/node': 18.11.9 - dev: false - - /@types/connect-history-api-fallback/1.3.5: - resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} - dependencies: - '@types/express-serve-static-core': 4.17.31 - '@types/node': 18.11.9 - dev: false - - /@types/connect/3.4.35: - resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} - dependencies: - '@types/node': 18.11.9 - dev: false - - /@types/eslint-scope/3.7.4: - resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} - dependencies: - '@types/eslint': 8.4.10 - '@types/estree': 0.0.51 - dev: false - - /@types/eslint/8.4.10: - resolution: {integrity: sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==} - dependencies: - '@types/estree': 1.0.0 - '@types/json-schema': 7.0.11 - dev: false - - /@types/estree/0.0.39: - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - dev: false - - /@types/estree/0.0.51: - resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} - dev: false - - /@types/estree/1.0.0: - resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} - dev: false - - /@types/express-serve-static-core/4.17.31: - resolution: {integrity: sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==} - dependencies: - '@types/node': 18.11.9 - '@types/qs': 6.9.7 - '@types/range-parser': 1.2.4 - dev: false - - /@types/express/4.17.14: - resolution: {integrity: sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==} - dependencies: - '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.31 - '@types/qs': 6.9.7 - '@types/serve-static': 1.15.0 - dev: false - - /@types/graceful-fs/4.1.5: - resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} - dependencies: - '@types/node': 18.11.9 - dev: false - - /@types/html-minifier-terser/6.1.0: - resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} - dev: false - - /@types/http-proxy/1.17.9: - resolution: {integrity: sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==} - dependencies: - '@types/node': 18.11.9 - dev: false - - /@types/istanbul-lib-coverage/2.0.4: - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} - dev: false - - /@types/istanbul-lib-report/3.0.0: - resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - dev: false - - /@types/istanbul-reports/3.0.1: - resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} - dependencies: - '@types/istanbul-lib-report': 3.0.0 - dev: false - - /@types/json-schema/7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} - dev: false - - /@types/json5/0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: false - - /@types/mime/3.0.1: - resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} - dev: false - - /@types/node/18.11.9: - resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==} - dev: false - - /@types/parse-json/4.0.0: - resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} - dev: false - - /@types/prettier/2.7.1: - resolution: {integrity: sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==} - dev: false - - /@types/q/1.5.5: - resolution: {integrity: sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==} - dev: false - - /@types/qs/6.9.7: - resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} - dev: false - - /@types/range-parser/1.2.4: - resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - dev: false - - /@types/resolve/1.17.1: - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} - dependencies: - '@types/node': 18.11.9 - dev: false - - /@types/retry/0.12.0: - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - dev: false - - /@types/semver/7.3.13: - resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} - dev: false - - /@types/serve-index/1.9.1: - resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} - dependencies: - '@types/express': 4.17.14 - dev: false - - /@types/serve-static/1.15.0: - resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} - dependencies: - '@types/mime': 3.0.1 - '@types/node': 18.11.9 - dev: false - - /@types/sockjs/0.3.33: - resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} - dependencies: - '@types/node': 18.11.9 - dev: false - - /@types/stack-utils/2.0.1: - resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} - dev: false - - /@types/trusted-types/2.0.2: - resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==} - dev: false - - /@types/ws/8.5.3: - resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} - dependencies: - '@types/node': 18.11.9 - dev: false - - /@types/yargs-parser/21.0.0: - resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} - dev: false - - /@types/yargs/16.0.4: - resolution: {integrity: sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==} - dependencies: - '@types/yargs-parser': 21.0.0 - dev: false - - /@types/yargs/17.0.13: - resolution: {integrity: sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==} - dependencies: - '@types/yargs-parser': 21.0.0 - dev: false - - /@typescript-eslint/eslint-plugin/5.42.1_jnohwm7eexgw7uduhweedcbnpe: - resolution: {integrity: sha512-LyR6x784JCiJ1j6sH5Y0K6cdExqCCm8DJUTcwG5ThNXJj/G8o5E56u5EdG4SLy+bZAwZBswC+GYn3eGdttBVCg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/parser': 5.42.1_eslint@8.27.0 - '@typescript-eslint/scope-manager': 5.42.1 - '@typescript-eslint/type-utils': 5.42.1_eslint@8.27.0 - '@typescript-eslint/utils': 5.42.1_eslint@8.27.0 - debug: 4.3.4 - eslint: 8.27.0 - ignore: 5.2.0 - natural-compare-lite: 1.4.0 - regexpp: 3.2.0 - semver: 7.3.8 - tsutils: 3.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/experimental-utils/5.42.1_eslint@8.27.0: - resolution: {integrity: sha512-qona75z2MLpeZADEuCet5Pwvh1g/0cWScEEDy43chuUPc4klgDiwz5hLFk5dHcjFEETSYQHRPYiiHKW24EMPjw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.42.1_eslint@8.27.0 - eslint: 8.27.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - - /@typescript-eslint/parser/5.42.1_eslint@8.27.0: - resolution: {integrity: sha512-kAV+NiNBWVQDY9gDJDToTE/NO8BHi4f6b7zTsVAJoTkmB/zlfOpiEVBzHOKtlgTndCKe8vj9F/PuolemZSh50Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.42.1 - '@typescript-eslint/types': 5.42.1 - '@typescript-eslint/typescript-estree': 5.42.1 - debug: 4.3.4 - eslint: 8.27.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/scope-manager/5.42.1: - resolution: {integrity: sha512-QAZY/CBP1Emx4rzxurgqj3rUinfsh/6mvuKbLNMfJMMKYLRBfweus8brgXF8f64ABkIZ3zdj2/rYYtF8eiuksQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.42.1 - '@typescript-eslint/visitor-keys': 5.42.1 - dev: false - - /@typescript-eslint/type-utils/5.42.1_eslint@8.27.0: - resolution: {integrity: sha512-WWiMChneex5w4xPIX56SSnQQo0tEOy5ZV2dqmj8Z371LJ0E+aymWD25JQ/l4FOuuX+Q49A7pzh/CGIQflxMVXg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 5.42.1 - '@typescript-eslint/utils': 5.42.1_eslint@8.27.0 - debug: 4.3.4 - eslint: 8.27.0 - tsutils: 3.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/types/5.42.1: - resolution: {integrity: sha512-Qrco9dsFF5lhalz+lLFtxs3ui1/YfC6NdXu+RAGBa8uSfn01cjO7ssCsjIsUs484vny9Xm699FSKwpkCcqwWwA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: false - - /@typescript-eslint/typescript-estree/5.42.1: - resolution: {integrity: sha512-qElc0bDOuO0B8wDhhW4mYVgi/LZL+igPwXtV87n69/kYC/7NG3MES0jHxJNCr4EP7kY1XVsRy8C/u3DYeTKQmw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.42.1 - '@typescript-eslint/visitor-keys': 5.42.1 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.3.8 - tsutils: 3.21.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@typescript-eslint/utils/5.42.1_eslint@8.27.0: - resolution: {integrity: sha512-Gxvf12xSp3iYZd/fLqiQRD4uKZjDNR01bQ+j8zvhPjpsZ4HmvEFL/tC4amGNyxN9Rq+iqvpHLhlqx6KTxz9ZyQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.42.1 - '@typescript-eslint/types': 5.42.1 - '@typescript-eslint/typescript-estree': 5.42.1 - eslint: 8.27.0 - eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.27.0 - semver: 7.3.8 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - - /@typescript-eslint/visitor-keys/5.42.1: - resolution: {integrity: sha512-LOQtSF4z+hejmpUvitPlc4hA7ERGoj2BVkesOcG91HCn8edLGUXbTrErmutmPbl8Bo9HjAvOO/zBKQHExXNA2A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.42.1 - eslint-visitor-keys: 3.3.0 - dev: false - - /@webassemblyjs/ast/1.11.1: - resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} - dependencies: - '@webassemblyjs/helper-numbers': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - dev: false - - /@webassemblyjs/floating-point-hex-parser/1.11.1: - resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} - dev: false - - /@webassemblyjs/helper-api-error/1.11.1: - resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} - dev: false - - /@webassemblyjs/helper-buffer/1.11.1: - resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} - dev: false - - /@webassemblyjs/helper-numbers/1.11.1: - resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} - dependencies: - '@webassemblyjs/floating-point-hex-parser': 1.11.1 - '@webassemblyjs/helper-api-error': 1.11.1 - '@xtuc/long': 4.2.2 - dev: false - - /@webassemblyjs/helper-wasm-bytecode/1.11.1: - resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} - dev: false - - /@webassemblyjs/helper-wasm-section/1.11.1: - resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} - dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-buffer': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - '@webassemblyjs/wasm-gen': 1.11.1 - dev: false - - /@webassemblyjs/ieee754/1.11.1: - resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} - dependencies: - '@xtuc/ieee754': 1.2.0 - dev: false - - /@webassemblyjs/leb128/1.11.1: - resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} - dependencies: - '@xtuc/long': 4.2.2 - dev: false - - /@webassemblyjs/utf8/1.11.1: - resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} - dev: false - - /@webassemblyjs/wasm-edit/1.11.1: - resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} - dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-buffer': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - '@webassemblyjs/helper-wasm-section': 1.11.1 - '@webassemblyjs/wasm-gen': 1.11.1 - '@webassemblyjs/wasm-opt': 1.11.1 - '@webassemblyjs/wasm-parser': 1.11.1 - '@webassemblyjs/wast-printer': 1.11.1 - dev: false - - /@webassemblyjs/wasm-gen/1.11.1: - resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} - dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - '@webassemblyjs/ieee754': 1.11.1 - '@webassemblyjs/leb128': 1.11.1 - '@webassemblyjs/utf8': 1.11.1 - dev: false - - /@webassemblyjs/wasm-opt/1.11.1: - resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} - dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-buffer': 1.11.1 - '@webassemblyjs/wasm-gen': 1.11.1 - '@webassemblyjs/wasm-parser': 1.11.1 - dev: false - - /@webassemblyjs/wasm-parser/1.11.1: - resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} - dependencies: - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/helper-api-error': 1.11.1 - '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - '@webassemblyjs/ieee754': 1.11.1 - '@webassemblyjs/leb128': 1.11.1 - '@webassemblyjs/utf8': 1.11.1 - dev: false - - /@webassemblyjs/wast-printer/1.11.1: - resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} - dependencies: - '@webassemblyjs/ast': 1.11.1 - '@xtuc/long': 4.2.2 - dev: false - - /@xtuc/ieee754/1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: false - - /@xtuc/long/4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: false - - /abab/2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - dev: false - - /accepts/1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - dev: false - - /acorn-globals/6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - dev: false - - /acorn-import-assertions/1.8.0_acorn@8.8.1: - resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} - peerDependencies: - acorn: ^8 - dependencies: - acorn: 8.8.1 - dev: false - - /acorn-jsx/5.3.2_acorn@8.8.1: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.8.1 - dev: false - - /acorn-node/1.8.2: - resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - xtend: 4.0.2 - dev: false - - /acorn-walk/7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: false - - /acorn/7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: false - - /acorn/8.8.1: - resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: false - - /address/1.2.1: - resolution: {integrity: sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==} - engines: {node: '>= 10.0.0'} - dev: false - - /adjust-sourcemap-loader/4.0.0: - resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} - engines: {node: '>=8.9'} - dependencies: - loader-utils: 2.0.4 - regex-parser: 2.2.11 - dev: false - - /agent-base/6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /ajv-formats/2.1.1: - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependenciesMeta: - ajv: - optional: true - dependencies: - ajv: 8.11.0 - dev: false - - /ajv-keywords/3.5.2_ajv@6.12.6: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - dependencies: - ajv: 6.12.6 - dev: false - - /ajv-keywords/5.1.0_ajv@8.11.0: - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 - dependencies: - ajv: 8.11.0 - fast-deep-equal: 3.1.3 - dev: false - - /ajv/6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: false - - /ajv/8.11.0: - resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: false - - /ansi-escapes/4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.21.3 - dev: false - - /ansi-html-community/0.0.8: - resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} - engines: {'0': node >= 0.8.0} - hasBin: true - dev: false - - /ansi-regex/5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: false - - /ansi-regex/6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: false - - /ansi-styles/3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: false - - /ansi-styles/4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: false - - /ansi-styles/5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: false - - /anymatch/3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: false - - /arg/5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: false - - /argparse/1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: false - - /argparse/2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: false - - /aria-query/4.2.2: - resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==} - engines: {node: '>=6.0'} - dependencies: - '@babel/runtime': 7.20.1 - '@babel/runtime-corejs3': 7.20.1 - dev: false - - /array-flatten/1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: false - - /array-flatten/2.1.2: - resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} - dev: false - - /array-includes/3.1.6: - resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 - get-intrinsic: 1.1.3 - is-string: 1.0.7 - dev: false - - /array-union/2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: false - - /array.prototype.flat/1.3.1: - resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 - es-shim-unscopables: 1.0.0 - dev: false - - /array.prototype.flatmap/1.3.1: - resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 - es-shim-unscopables: 1.0.0 - dev: false - - /array.prototype.reduce/1.0.5: - resolution: {integrity: sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 - es-array-method-boxes-properly: 1.0.0 - is-string: 1.0.7 - dev: false - - /asap/2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: false - - /ast-types-flow/0.0.7: - resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} - dev: false - - /async/3.2.4: - resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - dev: false - - /asynckit/0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false - - /at-least-node/1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - dev: false - - /autoprefixer/10.4.13_postcss@8.4.19: - resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - dependencies: - browserslist: 4.21.4 - caniuse-lite: 1.0.30001431 - fraction.js: 4.2.0 - normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /axe-core/4.5.1: - resolution: {integrity: sha512-1exVbW0X1O/HSr/WMwnaweyqcWOgZgLiVxdLG34pvSQk4NlYQr9OUy0JLwuhFfuVNQzzqgH57eYzkFBCb3bIsQ==} - engines: {node: '>=4'} - dev: false - - /axios/0.21.4: - resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} - dependencies: - follow-redirects: 1.15.2 - transitivePeerDependencies: - - debug - dev: false - - /axobject-query/2.2.0: - resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} - dev: false - - /babel-jest/27.5.1_@babel+core@7.20.2: - resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - dependencies: - '@babel/core': 7.20.2 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__core': 7.1.20 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1_@babel+core@7.20.2 - chalk: 4.1.2 - graceful-fs: 4.2.10 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-loader/8.3.0_npabyccmuonwo2rku4k53xo3hi: - resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} - engines: {node: '>= 8.9'} - peerDependencies: - '@babel/core': ^7.0.0 - webpack: '>=2' - dependencies: - '@babel/core': 7.20.2 - find-cache-dir: 3.3.2 - loader-utils: 2.0.4 - make-dir: 3.1.0 - schema-utils: 2.7.1 - webpack: 5.75.0 - dev: false - - /babel-plugin-istanbul/6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - dependencies: - '@babel/helper-plugin-utils': 7.20.2 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-jest-hoist/27.5.1: - resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.20.2 - '@types/babel__core': 7.1.20 - '@types/babel__traverse': 7.18.2 - dev: false - - /babel-plugin-macros/3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} - engines: {node: '>=10', npm: '>=6'} - dependencies: - '@babel/runtime': 7.20.1 - cosmiconfig: 7.0.1 - resolve: 1.22.1 - dev: false - - /babel-plugin-named-asset-import/0.3.8_@babel+core@7.20.2: - resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} - peerDependencies: - '@babel/core': ^7.1.0 - dependencies: - '@babel/core': 7.20.2 - dev: false - - /babel-plugin-polyfill-corejs2/0.3.3_@babel+core@7.20.2: - resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.20.1 - '@babel/core': 7.20.2 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.2 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-corejs3/0.6.0_@babel+core@7.20.2: - resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.2 - core-js-compat: 3.26.0 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-regenerator/0.4.1_@babel+core@7.20.2: - resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.20.2 - '@babel/helper-define-polyfill-provider': 0.3.3_@babel+core@7.20.2 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-transform-react-remove-prop-types/0.4.24: - resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==} - dev: false - - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.20.2: - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.20.2 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.2 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.2 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.20.2 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.2 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.2 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.2 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.2 - dev: false - - /babel-preset-jest/27.5.1_@babel+core@7.20.2: - resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.20.2 - babel-plugin-jest-hoist: 27.5.1 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.2 - dev: false - - /babel-preset-react-app/10.0.1: - resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} - dependencies: - '@babel/core': 7.20.2 - '@babel/plugin-proposal-class-properties': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-decorators': 7.20.2_@babel+core@7.20.2 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-numeric-separator': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-optional-chaining': 7.18.9_@babel+core@7.20.2 - '@babel/plugin-proposal-private-methods': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-proposal-private-property-in-object': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-flow-strip-types': 7.19.0_@babel+core@7.20.2 - '@babel/plugin-transform-react-display-name': 7.18.6_@babel+core@7.20.2 - '@babel/plugin-transform-runtime': 7.19.6_@babel+core@7.20.2 - '@babel/preset-env': 7.20.2_@babel+core@7.20.2 - '@babel/preset-react': 7.18.6_@babel+core@7.20.2 - '@babel/preset-typescript': 7.18.6_@babel+core@7.20.2 - '@babel/runtime': 7.20.1 - babel-plugin-macros: 3.1.0 - babel-plugin-transform-react-remove-prop-types: 0.4.24 - transitivePeerDependencies: - - supports-color - dev: false - - /balanced-match/1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: false - - /batch/0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - dev: false - - /bfj/7.0.2: - resolution: {integrity: sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==} - engines: {node: '>= 8.0.0'} - dependencies: - bluebird: 3.7.2 - check-types: 11.1.2 - hoopy: 0.1.4 - tryer: 1.0.1 - dev: false - - /big.js/5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - dev: false - - /binary-extensions/2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: false - - /bluebird/3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - dev: false - - /body-parser/1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dependencies: - bytes: 3.1.2 - content-type: 1.0.4 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.1 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /bonjour-service/1.0.14: - resolution: {integrity: sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==} - dependencies: - array-flatten: 2.1.2 - dns-equal: 1.0.0 - fast-deep-equal: 3.1.3 - multicast-dns: 7.2.5 - dev: false - - /boolbase/1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: false - - /brace-expansion/1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: false - - /brace-expansion/2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: false - - /braces/3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: false - - /browser-process-hrtime/1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: false - - /browserslist/4.21.4: - resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001431 - electron-to-chromium: 1.4.284 - node-releases: 2.0.6 - update-browserslist-db: 1.0.10_browserslist@4.21.4 - dev: false - - /bser/2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - dependencies: - node-int64: 0.4.0 - dev: false - - /buffer-from/1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: false - - /builtin-modules/3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: false - - /bytes/3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - dev: false - - /bytes/3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: false - - /call-bind/1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.1.3 - dev: false - - /callsites/3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: false - - /camel-case/4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - dependencies: - pascal-case: 3.1.2 - tslib: 2.4.1 - dev: false - - /camelcase-css/2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: false - - /camelcase/5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: false - - /camelcase/6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: false - - /caniuse-api/3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - dependencies: - browserslist: 4.21.4 - caniuse-lite: 1.0.30001431 - lodash.memoize: 4.1.2 - lodash.uniq: 4.5.0 - dev: false - - /caniuse-lite/1.0.30001431: - resolution: {integrity: sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==} - dev: false - - /case-sensitive-paths-webpack-plugin/2.4.0: - resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} - engines: {node: '>=4'} - dev: false - - /chalk/2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: false - - /chalk/4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: false - - /char-regex/1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - dev: false - - /char-regex/2.0.1: - resolution: {integrity: sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==} - engines: {node: '>=12.20'} - dev: false - - /check-types/11.1.2: - resolution: {integrity: sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==} - dev: false - - /chokidar/3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.2 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.2 - dev: false - - /chrome-trace-event/1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} - engines: {node: '>=6.0'} - dev: false - - /ci-info/3.5.0: - resolution: {integrity: sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==} - dev: false - - /cjs-module-lexer/1.2.2: - resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} - dev: false - - /clean-css/5.3.1: - resolution: {integrity: sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==} - engines: {node: '>= 10.0'} - dependencies: - source-map: 0.6.1 - dev: false - - /cliui/7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: false - - /co/4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: false - - /coa/2.0.2: - resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} - engines: {node: '>= 4.0'} - dependencies: - '@types/q': 1.5.5 - chalk: 2.4.2 - q: 1.5.1 - dev: false - - /collect-v8-coverage/1.0.1: - resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} - dev: false - - /color-convert/1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: false - - /color-convert/2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: false - - /color-name/1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: false - - /color-name/1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: false - - /colord/2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - dev: false - - /colorette/2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} - dev: false - - /combined-stream/1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: false - - /commander/2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: false - - /commander/7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - dev: false - - /commander/8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - dev: false - - /common-path-prefix/3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - dev: false - - /common-tags/1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} - dev: false - - /commondir/1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: false - - /compressible/2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - - /compression/1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - bytes: 3.0.0 - compressible: 2.0.18 - debug: 2.6.9 - on-headers: 1.0.2 - safe-buffer: 5.1.2 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: false - - /concat-map/0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: false - - /confusing-browser-globals/1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} - dev: false - - /connect-history-api-fallback/2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} - engines: {node: '>=0.8'} - dev: false - - /content-disposition/0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /content-type/1.0.4: - resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} - engines: {node: '>= 0.6'} - dev: false - - /convert-source-map/1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: false - - /cookie-signature/1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: false - - /cookie/0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - dev: false - - /core-js-compat/3.26.0: - resolution: {integrity: sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==} - dependencies: - browserslist: 4.21.4 - dev: false - - /core-js-pure/3.26.0: - resolution: {integrity: sha512-LiN6fylpVBVwT8twhhluD9TzXmZQQsr2I2eIKtWNbZI1XMfBT7CV18itaN6RA7EtQd/SDdRx/wzvAShX2HvhQA==} - requiresBuild: true - dev: false - - /core-js/3.26.0: - resolution: {integrity: sha512-+DkDrhoR4Y0PxDz6rurahuB+I45OsEUv8E1maPTB6OuHRohMMcznBq9TMpdpDMm/hUPob/mJJS3PqgbHpMTQgw==} - requiresBuild: true - dev: false - - /core-util-is/1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: false - - /cosmiconfig/6.0.0: - resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} - engines: {node: '>=8'} - dependencies: - '@types/parse-json': 4.0.0 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: false - - /cosmiconfig/7.0.1: - resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} - engines: {node: '>=10'} - dependencies: - '@types/parse-json': 4.0.0 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: false - - /cross-spawn/7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: false - - /crypto-random-string/2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: false - - /css-blank-pseudo/3.0.3_postcss@8.4.19: - resolution: {integrity: sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /css-declaration-sorter/6.3.1_postcss@8.4.19: - resolution: {integrity: sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==} - engines: {node: ^10 || ^12 || >=14} - peerDependencies: - postcss: ^8.0.9 - dependencies: - postcss: 8.4.19 - dev: false - - /css-has-pseudo/3.0.4_postcss@8.4.19: - resolution: {integrity: sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /css-loader/6.7.1_webpack@5.75.0: - resolution: {integrity: sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - icss-utils: 5.1.0_postcss@8.4.19 - postcss: 8.4.19 - postcss-modules-extract-imports: 3.0.0_postcss@8.4.19 - postcss-modules-local-by-default: 4.0.0_postcss@8.4.19 - postcss-modules-scope: 3.0.0_postcss@8.4.19 - postcss-modules-values: 4.0.0_postcss@8.4.19 - postcss-value-parser: 4.2.0 - semver: 7.3.8 - webpack: 5.75.0 - dev: false - - /css-minimizer-webpack-plugin/3.4.1_webpack@5.75.0: - resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - '@parcel/css': '*' - clean-css: '*' - csso: '*' - esbuild: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - '@parcel/css': - optional: true - clean-css: - optional: true - csso: - optional: true - esbuild: - optional: true - dependencies: - cssnano: 5.1.14_postcss@8.4.19 - jest-worker: 27.5.1 - postcss: 8.4.19 - schema-utils: 4.0.0 - serialize-javascript: 6.0.0 - source-map: 0.6.1 - webpack: 5.75.0 - dev: false - - /css-prefers-color-scheme/6.0.3_postcss@8.4.19: - resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} - engines: {node: ^12 || ^14 || >=16} - hasBin: true - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.19 - dev: false - - /css-select-base-adapter/0.1.1: - resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} - dev: false - - /css-select/2.1.0: - resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} - dependencies: - boolbase: 1.0.0 - css-what: 3.4.2 - domutils: 1.7.0 - nth-check: 1.0.2 - dev: false - - /css-select/4.3.0: - resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} - dependencies: - boolbase: 1.0.0 - css-what: 6.1.0 - domhandler: 4.3.1 - domutils: 2.8.0 - nth-check: 2.1.1 - dev: false - - /css-tree/1.0.0-alpha.37: - resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} - engines: {node: '>=8.0.0'} - dependencies: - mdn-data: 2.0.4 - source-map: 0.6.1 - dev: false - - /css-tree/1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} - engines: {node: '>=8.0.0'} - dependencies: - mdn-data: 2.0.14 - source-map: 0.6.1 - dev: false - - /css-what/3.4.2: - resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} - engines: {node: '>= 6'} - dev: false - - /css-what/6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: false - - /cssdb/7.1.0: - resolution: {integrity: sha512-Sd99PrFgx28ez4GHu8yoQIufc/70h9oYowDf4EjeIKi8mac9whxRjhM3IaMr6EllP6KKKWtJrMfN6C7T9tIWvQ==} - dev: false - - /cssesc/3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /cssnano-preset-default/5.2.13_postcss@8.4.19: - resolution: {integrity: sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - css-declaration-sorter: 6.3.1_postcss@8.4.19 - cssnano-utils: 3.1.0_postcss@8.4.19 - postcss: 8.4.19 - postcss-calc: 8.2.4_postcss@8.4.19 - postcss-colormin: 5.3.0_postcss@8.4.19 - postcss-convert-values: 5.1.3_postcss@8.4.19 - postcss-discard-comments: 5.1.2_postcss@8.4.19 - postcss-discard-duplicates: 5.1.0_postcss@8.4.19 - postcss-discard-empty: 5.1.1_postcss@8.4.19 - postcss-discard-overridden: 5.1.0_postcss@8.4.19 - postcss-merge-longhand: 5.1.7_postcss@8.4.19 - postcss-merge-rules: 5.1.3_postcss@8.4.19 - postcss-minify-font-values: 5.1.0_postcss@8.4.19 - postcss-minify-gradients: 5.1.1_postcss@8.4.19 - postcss-minify-params: 5.1.4_postcss@8.4.19 - postcss-minify-selectors: 5.2.1_postcss@8.4.19 - postcss-normalize-charset: 5.1.0_postcss@8.4.19 - postcss-normalize-display-values: 5.1.0_postcss@8.4.19 - postcss-normalize-positions: 5.1.1_postcss@8.4.19 - postcss-normalize-repeat-style: 5.1.1_postcss@8.4.19 - postcss-normalize-string: 5.1.0_postcss@8.4.19 - postcss-normalize-timing-functions: 5.1.0_postcss@8.4.19 - postcss-normalize-unicode: 5.1.1_postcss@8.4.19 - postcss-normalize-url: 5.1.0_postcss@8.4.19 - postcss-normalize-whitespace: 5.1.1_postcss@8.4.19 - postcss-ordered-values: 5.1.3_postcss@8.4.19 - postcss-reduce-initial: 5.1.1_postcss@8.4.19 - postcss-reduce-transforms: 5.1.0_postcss@8.4.19 - postcss-svgo: 5.1.0_postcss@8.4.19 - postcss-unique-selectors: 5.1.1_postcss@8.4.19 - dev: false - - /cssnano-utils/3.1.0_postcss@8.4.19: - resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - dev: false - - /cssnano/5.1.14_postcss@8.4.19: - resolution: {integrity: sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - cssnano-preset-default: 5.2.13_postcss@8.4.19 - lilconfig: 2.0.6 - postcss: 8.4.19 - yaml: 1.10.2 - dev: false - - /csso/4.2.0: - resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} - engines: {node: '>=8.0.0'} - dependencies: - css-tree: 1.1.3 - dev: false - - /cssom/0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: false - - /cssom/0.4.4: - resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} - dev: false - - /cssstyle/2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} - dependencies: - cssom: 0.3.8 - dev: false - - /damerau-levenshtein/1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: false - - /data-urls/2.0.0: - resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} - engines: {node: '>=10'} - dependencies: - abab: 2.0.6 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - dev: false - - /debug/2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: false - - /debug/3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: false - - /debug/4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: false - - /decimal.js/10.4.2: - resolution: {integrity: sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==} - dev: false - - /dedent/0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - dev: false - - /deep-is/0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: false - - /deepmerge/4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} - engines: {node: '>=0.10.0'} - dev: false - - /default-gateway/6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} - dependencies: - execa: 5.1.1 - dev: false - - /define-lazy-prop/2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: false - - /define-properties/1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} - engines: {node: '>= 0.4'} - dependencies: - has-property-descriptors: 1.0.0 - object-keys: 1.1.1 - dev: false - - /defined/1.0.1: - resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} - dev: false - - /delayed-stream/1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: false - - /depd/1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: false - - /depd/2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: false - - /destroy/1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: false - - /detect-newline/3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: false - - /detect-node/2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - dev: false - - /detect-port-alt/1.1.6: - resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} - engines: {node: '>= 4.2.1'} - hasBin: true - dependencies: - address: 1.2.1 - debug: 2.6.9 - transitivePeerDependencies: - - supports-color - dev: false - - /detective/5.2.1: - resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} - engines: {node: '>=0.8.0'} - hasBin: true - dependencies: - acorn-node: 1.8.2 - defined: 1.0.1 - minimist: 1.2.7 - dev: false - - /didyoumean/1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: false - - /diff-sequences/27.5.1: - resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: false - - /dir-glob/3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: false - - /dlv/1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: false - - /dns-equal/1.0.0: - resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==} - dev: false - - /dns-packet/5.4.0: - resolution: {integrity: sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==} - engines: {node: '>=6'} - dependencies: - '@leichtgewicht/ip-codec': 2.0.4 - dev: false - - /doctrine/2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - dev: false - - /doctrine/3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: false - - /dom-converter/0.2.0: - resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} - dependencies: - utila: 0.4.0 - dev: false - - /dom-serializer/0.2.2: - resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} - dependencies: - domelementtype: 2.3.0 - entities: 2.2.0 - dev: false - - /dom-serializer/1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - entities: 2.2.0 - dev: false - - /domelementtype/1.3.1: - resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} - dev: false - - /domelementtype/2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: false - - /domexception/2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} - engines: {node: '>=8'} - dependencies: - webidl-conversions: 5.0.0 - dev: false - - /domhandler/4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - dependencies: - domelementtype: 2.3.0 - dev: false - - /domutils/1.7.0: - resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} - dependencies: - dom-serializer: 0.2.2 - domelementtype: 1.3.1 - dev: false - - /domutils/2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - dependencies: - dom-serializer: 1.4.1 - domelementtype: 2.3.0 - domhandler: 4.3.1 - dev: false - - /dot-case/3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - dependencies: - no-case: 3.0.4 - tslib: 2.4.1 - dev: false - - /dotenv-expand/5.1.0: - resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} - dev: false - - /dotenv/10.0.0: - resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} - engines: {node: '>=10'} - dev: false - - /duplexer/0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: false - - /ee-first/1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: false - - /ejs/3.1.8: - resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - jake: 10.8.5 - dev: false - - /electron-to-chromium/1.4.284: - resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} - dev: false - - /emittery/0.10.2: - resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} - engines: {node: '>=12'} - dev: false - - /emittery/0.8.1: - resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} - engines: {node: '>=10'} - dev: false - - /emoji-regex/8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: false - - /emoji-regex/9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: false - - /emojis-list/3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - dev: false - - /encodeurl/1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: false - - /enhanced-resolve/5.10.0: - resolution: {integrity: sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==} - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: 4.2.10 - tapable: 2.2.1 - dev: false - - /entities/2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - dev: false - - /error-ex/1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - dev: false - - /error-stack-parser/2.1.4: - resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - dependencies: - stackframe: 1.3.4 - dev: false - - /es-abstract/1.20.4: - resolution: {integrity: sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==} - engines: {node: '>= 0.4'} - dependencies: - 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.3 - 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.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-weakref: 1.0.2 - object-inspect: 1.12.2 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.4.3 - safe-regex-test: 1.0.0 - string.prototype.trimend: 1.0.6 - string.prototype.trimstart: 1.0.6 - unbox-primitive: 1.0.2 - dev: false - - /es-array-method-boxes-properly/1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} - dev: false - - /es-module-lexer/0.9.3: - resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} - dev: false - - /es-shim-unscopables/1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} - dependencies: - has: 1.0.3 - dev: false - - /es-to-primitive/1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: false - - /escalade/3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: false - - /escape-html/1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: false - - /escape-string-regexp/1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: false - - /escape-string-regexp/2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: false - - /escape-string-regexp/4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: false - - /escodegen/2.0.0: - resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 - dev: false - - /eslint-config-react-app/7.0.1_eslint@8.27.0+jest@27.5.1: - resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} - engines: {node: '>=14.0.0'} - peerDependencies: - eslint: ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/core': 7.20.2 - '@babel/eslint-parser': 7.19.1_qn3xnppexigqgidmp7nt2fn2oy - '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/eslint-plugin': 5.42.1_jnohwm7eexgw7uduhweedcbnpe - '@typescript-eslint/parser': 5.42.1_eslint@8.27.0 - babel-preset-react-app: 10.0.1 - confusing-browser-globals: 1.0.11 - eslint: 8.27.0 - eslint-plugin-flowtype: 8.0.3_eslint@8.27.0 - eslint-plugin-import: 2.26.0_jnohwm7eexgw7uduhweedcbnpe - eslint-plugin-jest: 25.7.0_6gbqo5dn22c6l3hmvpvlgj4uym - eslint-plugin-jsx-a11y: 6.6.1_eslint@8.27.0 - eslint-plugin-react: 7.31.10_eslint@8.27.0 - eslint-plugin-react-hooks: 4.6.0_eslint@8.27.0 - eslint-plugin-testing-library: 5.9.1_eslint@8.27.0 - transitivePeerDependencies: - - '@babel/plugin-syntax-flow' - - '@babel/plugin-transform-react-jsx' - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - jest - - supports-color - dev: false - - /eslint-import-resolver-node/0.3.6: - resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} - dependencies: - debug: 3.2.7 - resolve: 1.22.1 - transitivePeerDependencies: - - supports-color - dev: false - - /eslint-module-utils/2.7.4_l3rkqmr6ujglf4zsfjyz5e7jai: - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.42.1_eslint@8.27.0 - debug: 3.2.7 - eslint: 8.27.0 - eslint-import-resolver-node: 0.3.6 - transitivePeerDependencies: - - supports-color - dev: false - - /eslint-plugin-flowtype/8.0.3_eslint@8.27.0: - resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@babel/plugin-syntax-flow': ^7.14.5 - '@babel/plugin-transform-react-jsx': ^7.14.9 - eslint: ^8.1.0 - dependencies: - eslint: 8.27.0 - lodash: 4.17.21 - string-natural-compare: 3.0.1 - dev: false - - /eslint-plugin-import/2.26.0_jnohwm7eexgw7uduhweedcbnpe: - resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.42.1_eslint@8.27.0 - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - debug: 2.6.9 - doctrine: 2.1.0 - eslint: 8.27.0 - eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.4_l3rkqmr6ujglf4zsfjyz5e7jai - has: 1.0.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.1 - tsconfig-paths: 3.14.1 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: false - - /eslint-plugin-jest/25.7.0_6gbqo5dn22c6l3hmvpvlgj4uym: - resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 5.42.1_jnohwm7eexgw7uduhweedcbnpe - '@typescript-eslint/experimental-utils': 5.42.1_eslint@8.27.0 - eslint: 8.27.0 - jest: 27.5.1 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - - /eslint-plugin-jsx-a11y/6.6.1_eslint@8.27.0: - resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - '@babel/runtime': 7.20.1 - aria-query: 4.2.2 - array-includes: 3.1.6 - ast-types-flow: 0.0.7 - axe-core: 4.5.1 - axobject-query: 2.2.0 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - eslint: 8.27.0 - has: 1.0.3 - jsx-ast-utils: 3.3.3 - language-tags: 1.0.5 - minimatch: 3.1.2 - semver: 6.3.0 - dev: false - - /eslint-plugin-react-hooks/4.6.0_eslint@8.27.0: - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.27.0 - dev: false - - /eslint-plugin-react/7.31.10_eslint@8.27.0: - resolution: {integrity: sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - array-includes: 3.1.6 - array.prototype.flatmap: 1.3.1 - doctrine: 2.1.0 - eslint: 8.27.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.3 - minimatch: 3.1.2 - object.entries: 1.1.6 - object.fromentries: 2.0.6 - object.hasown: 1.1.2 - object.values: 1.1.6 - prop-types: 15.8.1 - resolve: 2.0.0-next.4 - semver: 6.3.0 - string.prototype.matchall: 4.0.8 - dev: false - - /eslint-plugin-testing-library/5.9.1_eslint@8.27.0: - resolution: {integrity: sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@typescript-eslint/utils': 5.42.1_eslint@8.27.0 - eslint: 8.27.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - - /eslint-scope/5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - dev: false - - /eslint-scope/7.1.1: - resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: false - - /eslint-utils/3.0.0_eslint@8.27.0: - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.27.0 - eslint-visitor-keys: 2.1.0 - dev: false - - /eslint-visitor-keys/2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: false - - /eslint-visitor-keys/3.3.0: - resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: false - - /eslint-webpack-plugin/3.2.0_5mastfusvewdnfotkrq73j4uja: - resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} - engines: {node: '>= 12.13.0'} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - webpack: ^5.0.0 - dependencies: - '@types/eslint': 8.4.10 - eslint: 8.27.0 - jest-worker: 28.1.3 - micromatch: 4.0.5 - normalize-path: 3.0.0 - schema-utils: 4.0.0 - webpack: 5.75.0 - dev: false - - /eslint/8.27.0: - resolution: {integrity: sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint/eslintrc': 1.3.3 - '@humanwhocodes/config-array': 0.11.7 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.27.0 - eslint-visitor-keys: 3.3.0 - espree: 9.4.1 - esquery: 1.4.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.17.0 - grapheme-splitter: 1.0.4 - ignore: 5.2.0 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-sdsl: 4.1.5 - 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.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: false - - /espree/9.4.1: - resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.8.1 - acorn-jsx: 5.3.2_acorn@8.8.1 - eslint-visitor-keys: 3.3.0 - dev: false - - /esprima/4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /esquery/1.4.0: - resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - dev: false - - /esrecurse/4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - dev: false - - /estraverse/4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: false - - /estraverse/5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: false - - /estree-walker/1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - dev: false - - /esutils/2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: false - - /etag/1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: false - - /eventemitter3/4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: false - - /events/3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: false - - /execa/5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: false - - /exit/0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - dev: false - - /expect/27.5.1: - resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - jest-get-type: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - dev: false - - /express/4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.1 - content-disposition: 0.5.4 - content-type: 1.0.4 - cookie: 0.5.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - dev: false - - /fast-deep-equal/3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: false - - /fast-glob/3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - dev: false - - /fast-json-stable-stringify/2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: false - - /fast-levenshtein/2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: false - - /fastq/1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} - dependencies: - reusify: 1.0.4 - dev: false - - /faye-websocket/0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} - dependencies: - websocket-driver: 0.7.4 - dev: false - - /fb-watchman/2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - dependencies: - bser: 2.1.1 - dev: false - - /file-entry-cache/6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.0.4 - dev: false - - /file-loader/6.2.0_webpack@5.75.0: - resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} - engines: {node: '>= 10.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - loader-utils: 2.0.4 - schema-utils: 3.1.1 - webpack: 5.75.0 - dev: false - - /filelist/1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} - dependencies: - minimatch: 5.1.0 - dev: false - - /filesize/8.0.7: - resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} - engines: {node: '>= 0.4.0'} - dev: false - - /fill-range/7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: false - - /finalhandler/1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /find-cache-dir/3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - dev: false - - /find-up/3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - dependencies: - locate-path: 3.0.0 - dev: false - - /find-up/4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - dev: false - - /find-up/5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: false - - /flat-cache/3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.7 - rimraf: 3.0.2 - dev: false - - /flatted/3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - dev: false - - /follow-redirects/1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false - - /fork-ts-checker-webpack-plugin/6.5.2_5mastfusvewdnfotkrq73j4uja: - resolution: {integrity: sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==} - engines: {node: '>=10', yarn: '>=1.0.0'} - peerDependencies: - eslint: '>= 6' - typescript: '>= 2.7' - vue-template-compiler: '*' - webpack: '>= 4' - peerDependenciesMeta: - eslint: - optional: true - vue-template-compiler: - optional: true - dependencies: - '@babel/code-frame': 7.18.6 - '@types/json-schema': 7.0.11 - chalk: 4.1.2 - chokidar: 3.5.3 - cosmiconfig: 6.0.0 - deepmerge: 4.2.2 - eslint: 8.27.0 - fs-extra: 9.1.0 - glob: 7.2.3 - memfs: 3.4.10 - minimatch: 3.1.2 - schema-utils: 2.7.0 - semver: 7.3.8 - tapable: 1.1.3 - webpack: 5.75.0 - dev: false - - /form-data/3.0.1: - resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - - /forwarded/0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: false - - /fraction.js/4.2.0: - resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} - dev: false - - /fresh/0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: false - - /fs-extra/10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - dependencies: - graceful-fs: 4.2.10 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: false - - /fs-extra/9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.10 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: false - - /fs-monkey/1.0.3: - resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} - dev: false - - /fs.realpath/1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: false - - /fsevents/2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /function-bind/1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: false - - /function.prototype.name/1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 - functions-have-names: 1.2.3 - dev: false - - /functions-have-names/1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: false - - /gensync/1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: false - - /get-caller-file/2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: false - - /get-intrinsic/1.1.3: - resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.3 - dev: false - - /get-own-enumerable-property-symbols/3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - dev: false - - /get-package-type/0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: false - - /get-stream/6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: false - - /get-symbol-description/1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.3 - dev: false - - /glob-parent/5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: false - - /glob-parent/6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: false - - /glob-to-regexp/0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: false - - /glob/7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: false - - /global-modules/2.0.0: - resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} - engines: {node: '>=6'} - dependencies: - global-prefix: 3.0.0 - dev: false - - /global-prefix/3.0.0: - resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} - engines: {node: '>=6'} - dependencies: - ini: 1.3.8 - kind-of: 6.0.3 - which: 1.3.1 - dev: false - - /globals/11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: false - - /globals/13.17.0: - resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: false - - /globby/11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.2.12 - ignore: 5.2.0 - merge2: 1.4.1 - slash: 3.0.0 - dev: false - - /graceful-fs/4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - dev: false - - /grapheme-splitter/1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - dev: false - - /gzip-size/6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - dependencies: - duplexer: 0.1.2 - dev: false - - /handle-thing/2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - dev: false - - /harmony-reflect/1.6.2: - resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} - dev: false - - /has-bigints/1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: false - - /has-flag/3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: false - - /has-flag/4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: false - - /has-property-descriptors/1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} - dependencies: - get-intrinsic: 1.1.3 - dev: false - - /has-symbols/1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: false - - /has-tostringtag/1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: false - - /has/1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 - dev: false - - /he/1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: false - - /hoopy/0.1.4: - resolution: {integrity: sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==} - engines: {node: '>= 6.0.0'} - dev: false - - /hpack.js/2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} - dependencies: - inherits: 2.0.4 - obuf: 1.1.2 - readable-stream: 2.3.7 - wbuf: 1.7.3 - dev: false - - /html-encoding-sniffer/2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} - engines: {node: '>=10'} - dependencies: - whatwg-encoding: 1.0.5 - dev: false - - /html-entities/2.3.3: - resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} - dev: false - - /html-escaper/2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: false - - /html-minifier-terser/6.1.0: - resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} - engines: {node: '>=12'} - hasBin: true - dependencies: - camel-case: 4.1.2 - clean-css: 5.3.1 - commander: 8.3.0 - he: 1.2.0 - param-case: 3.0.4 - relateurl: 0.2.7 - terser: 5.15.1 - dev: false - - /html-webpack-plugin/5.5.0_webpack@5.75.0: - resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==} - engines: {node: '>=10.13.0'} - peerDependencies: - webpack: ^5.20.0 - dependencies: - '@types/html-minifier-terser': 6.1.0 - html-minifier-terser: 6.1.0 - lodash: 4.17.21 - pretty-error: 4.0.0 - tapable: 2.2.1 - webpack: 5.75.0 - dev: false - - /htmlparser2/6.1.0: - resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} - dependencies: - domelementtype: 2.3.0 - domhandler: 4.3.1 - domutils: 2.8.0 - entities: 2.2.0 - dev: false - - /http-deceiver/1.2.7: - resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - dev: false - - /http-errors/1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 - dev: false - - /http-errors/2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - dev: false - - /http-parser-js/0.5.8: - resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} - dev: false - - /http-proxy-agent/4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /http-proxy-middleware/2.0.6_@types+express@4.17.14: - resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true - dependencies: - '@types/express': 4.17.14 - '@types/http-proxy': 1.17.9 - http-proxy: 1.18.1 - is-glob: 4.0.3 - is-plain-obj: 3.0.0 - micromatch: 4.0.5 - transitivePeerDependencies: - - debug - dev: false - - /http-proxy/1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} - dependencies: - eventemitter3: 4.0.7 - follow-redirects: 1.15.2 - requires-port: 1.0.0 - transitivePeerDependencies: - - debug - dev: false - - /https-proxy-agent/5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: false - - /human-signals/2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: false - - /iconv-lite/0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: false - - /iconv-lite/0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: false - - /icss-utils/5.1.0_postcss@8.4.19: - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.19 - dev: false - - /idb/7.1.1: - resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} - dev: false - - /identity-obj-proxy/3.0.0: - resolution: {integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==} - engines: {node: '>=4'} - dependencies: - harmony-reflect: 1.6.2 - dev: false - - /ignore/5.2.0: - resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} - engines: {node: '>= 4'} - dev: false - - /immer/9.0.16: - resolution: {integrity: sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==} - dev: false - - /import-fresh/3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: false - - /import-local/3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - dev: false - - /imurmurhash/0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: false - - /inflight/1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: false - - /inherits/2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - dev: false - - /inherits/2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: false - - /ini/1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: false - - /internal-slot/1.0.3: - resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.1.3 - has: 1.0.3 - side-channel: 1.0.4 - dev: false - - /ipaddr.js/1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: false - - /ipaddr.js/2.0.1: - resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==} - engines: {node: '>= 10'} - dev: false - - /is-arrayish/0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: false - - /is-bigint/1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - dependencies: - has-bigints: 1.0.2 - dev: false - - /is-binary-path/2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: false - - /is-boolean-object/1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: false - - /is-callable/1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: false - - /is-core-module/2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} - dependencies: - has: 1.0.3 - dev: false - - /is-date-object/1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: false - - /is-docker/2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: false - - /is-extglob/2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: false - - /is-fullwidth-code-point/3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: false - - /is-generator-fn/2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: false - - /is-glob/4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: false - - /is-module/1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: false - - /is-negative-zero/2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: false - - /is-number-object/1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: false - - /is-number/7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: false - - /is-obj/1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} - dev: false - - /is-path-inside/3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: false - - /is-plain-obj/3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - dev: false - - /is-potential-custom-element-name/1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - dev: false - - /is-regex/1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: false - - /is-regexp/1.0.0: - resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} - engines: {node: '>=0.10.0'} - dev: false - - /is-root/2.1.0: - resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} - engines: {node: '>=6'} - dev: false - - /is-shared-array-buffer/1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - dependencies: - call-bind: 1.0.2 - dev: false - - /is-stream/2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: false - - /is-string/1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: false - - /is-symbol/1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: false - - /is-typedarray/1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: false - - /is-weakref/1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.2 - dev: false - - /is-wsl/2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: false - - /isarray/1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: false - - /isexe/2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: false - - /istanbul-lib-coverage/3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} - engines: {node: '>=8'} - dev: false - - /istanbul-lib-instrument/5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} - dependencies: - '@babel/core': 7.20.2 - '@babel/parser': 7.20.3 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: false - - /istanbul-lib-report/3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} - dependencies: - istanbul-lib-coverage: 3.2.0 - make-dir: 3.1.0 - supports-color: 7.2.0 - dev: false - - /istanbul-lib-source-maps/4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - dependencies: - debug: 4.3.4 - istanbul-lib-coverage: 3.2.0 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - dev: false - - /istanbul-reports/3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} - engines: {node: '>=8'} - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 - dev: false - - /jake/10.8.5: - resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} - engines: {node: '>=10'} - hasBin: true - dependencies: - async: 3.2.4 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 - dev: false - - /jest-changed-files/27.5.1: - resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - execa: 5.1.1 - throat: 6.0.1 - dev: false - - /jest-circus/27.5.1: - resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 18.11.9 - chalk: 4.1.2 - co: 4.6.0 - dedent: 0.7.0 - expect: 27.5.1 - is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - slash: 3.0.0 - stack-utils: 2.0.6 - throat: 6.0.1 - transitivePeerDependencies: - - supports-color - dev: false - - /jest-cli/27.5.1: - resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.10 - import-local: 3.1.0 - jest-config: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - prompts: 2.4.2 - yargs: 16.2.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: false - - /jest-config/27.5.1: - resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - ts-node: '>=9.0.0' - peerDependenciesMeta: - ts-node: - optional: true - dependencies: - '@babel/core': 7.20.2 - '@jest/test-sequencer': 27.5.1 - '@jest/types': 27.5.1 - babel-jest: 27.5.1_@babel+core@7.20.2 - chalk: 4.1.2 - ci-info: 3.5.0 - deepmerge: 4.2.2 - glob: 7.2.3 - graceful-fs: 4.2.10 - jest-circus: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-get-type: 27.5.1 - jest-jasmine2: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runner: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - micromatch: 4.0.5 - parse-json: 5.2.0 - pretty-format: 27.5.1 - slash: 3.0.0 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: false - - /jest-diff/27.5.1: - resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - chalk: 4.1.2 - diff-sequences: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: false - - /jest-docblock/27.5.1: - resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - detect-newline: 3.1.0 - dev: false - - /jest-each/27.5.1: - resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - chalk: 4.1.2 - jest-get-type: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - dev: false - - /jest-environment-jsdom/27.5.1: - resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 18.11.9 - jest-mock: 27.5.1 - jest-util: 27.5.1 - jsdom: 16.7.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: false - - /jest-environment-node/27.5.1: - resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 18.11.9 - jest-mock: 27.5.1 - jest-util: 27.5.1 - dev: false - - /jest-get-type/27.5.1: - resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: false - - /jest-haste-map/27.5.1: - resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/graceful-fs': 4.1.5 - '@types/node': 18.11.9 - anymatch: 3.1.2 - fb-watchman: 2.0.2 - graceful-fs: 4.2.10 - jest-regex-util: 27.5.1 - jest-serializer: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - micromatch: 4.0.5 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.2 - dev: false - - /jest-jasmine2/27.5.1: - resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 18.11.9 - chalk: 4.1.2 - co: 4.6.0 - expect: 27.5.1 - is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - throat: 6.0.1 - transitivePeerDependencies: - - supports-color - dev: false - - /jest-leak-detector/27.5.1: - resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: false - - /jest-matcher-utils/27.5.1: - resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - chalk: 4.1.2 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: false - - /jest-message-util/27.5.1: - resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/code-frame': 7.18.6 - '@jest/types': 27.5.1 - '@types/stack-utils': 2.0.1 - chalk: 4.1.2 - graceful-fs: 4.2.10 - micromatch: 4.0.5 - pretty-format: 27.5.1 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: false - - /jest-message-util/28.1.3: - resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@babel/code-frame': 7.18.6 - '@jest/types': 28.1.3 - '@types/stack-utils': 2.0.1 - chalk: 4.1.2 - graceful-fs: 4.2.10 - micromatch: 4.0.5 - pretty-format: 28.1.3 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: false - - /jest-mock/27.5.1: - resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 18.11.9 - dev: false - - /jest-pnp-resolver/1.2.2_jest-resolve@27.5.1: - resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - dependencies: - jest-resolve: 27.5.1 - dev: false - - /jest-regex-util/27.5.1: - resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: false - - /jest-regex-util/28.0.2: - resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dev: false - - /jest-resolve-dependencies/27.5.1: - resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - jest-regex-util: 27.5.1 - jest-snapshot: 27.5.1 - transitivePeerDependencies: - - supports-color - dev: false - - /jest-resolve/27.5.1: - resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - chalk: 4.1.2 - graceful-fs: 4.2.10 - jest-haste-map: 27.5.1 - jest-pnp-resolver: 1.2.2_jest-resolve@27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - resolve: 1.22.1 - resolve.exports: 1.1.0 - slash: 3.0.0 - dev: false - - /jest-runner/27.5.1: - resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/console': 27.5.1 - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 18.11.9 - chalk: 4.1.2 - emittery: 0.8.1 - graceful-fs: 4.2.10 - jest-docblock: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-haste-map: 27.5.1 - jest-leak-detector: 27.5.1 - jest-message-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runtime: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - source-map-support: 0.5.21 - throat: 6.0.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: false - - /jest-runtime/27.5.1: - resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/globals': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - chalk: 4.1.2 - cjs-module-lexer: 1.2.2 - collect-v8-coverage: 1.0.1 - execa: 5.1.1 - glob: 7.2.3 - graceful-fs: 4.2.10 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /jest-serializer/27.5.1: - resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/node': 18.11.9 - graceful-fs: 4.2.10 - dev: false - - /jest-snapshot/27.5.1: - resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/core': 7.20.2 - '@babel/generator': 7.20.4 - '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.2 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__traverse': 7.18.2 - '@types/prettier': 2.7.1 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.2 - chalk: 4.1.2 - expect: 27.5.1 - graceful-fs: 4.2.10 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - jest-haste-map: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-util: 27.5.1 - natural-compare: 1.4.0 - pretty-format: 27.5.1 - semver: 7.3.8 - transitivePeerDependencies: - - supports-color - dev: false - - /jest-util/27.5.1: - resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 18.11.9 - chalk: 4.1.2 - ci-info: 3.5.0 - graceful-fs: 4.2.10 - picomatch: 2.3.1 - dev: false - - /jest-util/28.1.3: - resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/types': 28.1.3 - '@types/node': 18.11.9 - chalk: 4.1.2 - ci-info: 3.5.0 - graceful-fs: 4.2.10 - picomatch: 2.3.1 - dev: false - - /jest-validate/27.5.1: - resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 27.5.1 - leven: 3.1.0 - pretty-format: 27.5.1 - dev: false - - /jest-watch-typeahead/1.1.0_jest@27.5.1: - resolution: {integrity: sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - jest: ^27.0.0 || ^28.0.0 - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - jest: 27.5.1 - jest-regex-util: 28.0.2 - jest-watcher: 28.1.3 - slash: 4.0.0 - string-length: 5.0.1 - strip-ansi: 7.0.1 - dev: false - - /jest-watcher/27.5.1: - resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 18.11.9 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - jest-util: 27.5.1 - string-length: 4.0.2 - dev: false - - /jest-watcher/28.1.3: - resolution: {integrity: sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/test-result': 28.1.3 - '@jest/types': 28.1.3 - '@types/node': 18.11.9 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.10.2 - jest-util: 28.1.3 - string-length: 4.0.2 - dev: false - - /jest-worker/26.6.2: - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': 18.11.9 - merge-stream: 2.0.0 - supports-color: 7.2.0 - dev: false - - /jest-worker/27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': 18.11.9 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: false - - /jest-worker/28.1.3: - resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@types/node': 18.11.9 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: false - - /jest/27.5.1: - resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 27.5.1 - import-local: 3.1.0 - jest-cli: 27.5.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: false - - /js-sdsl/4.1.5: - resolution: {integrity: sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==} - dev: false - - /js-tokens/4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: false - - /js-yaml/3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: false - - /js-yaml/4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: false - - /jsdom/16.7.0: - resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} - engines: {node: '>=10'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - dependencies: - abab: 2.0.6 - acorn: 8.8.1 - acorn-globals: 6.0.0 - cssom: 0.4.4 - cssstyle: 2.3.0 - data-urls: 2.0.0 - decimal.js: 10.4.2 - domexception: 2.0.1 - escodegen: 2.0.0 - form-data: 3.0.1 - html-encoding-sniffer: 2.0.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.2 - parse5: 6.0.1 - saxes: 5.0.1 - symbol-tree: 3.2.4 - tough-cookie: 4.1.2 - w3c-hr-time: 1.0.2 - w3c-xmlserializer: 2.0.0 - webidl-conversions: 6.1.0 - whatwg-encoding: 1.0.5 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - ws: 7.5.9 - xml-name-validator: 3.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: false - - /jsesc/0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - dev: false - - /jsesc/2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /json-parse-even-better-errors/2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: false - - /json-schema-traverse/0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: false - - /json-schema-traverse/1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: false - - /json-schema/0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - dev: false - - /json-stable-stringify-without-jsonify/1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: false - - /json5/1.0.1: - resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} - hasBin: true - dependencies: - minimist: 1.2.7 - dev: false - - /json5/2.2.1: - resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} - engines: {node: '>=6'} - hasBin: true - dev: false - - /jsonfile/6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - dependencies: - universalify: 2.0.0 - optionalDependencies: - graceful-fs: 4.2.10 - dev: false - - /jsonpointer/5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - dev: false - - /jsx-ast-utils/3.3.3: - resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} - engines: {node: '>=4.0'} - dependencies: - array-includes: 3.1.6 - object.assign: 4.1.4 - dev: false - - /kind-of/6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: false - - /kleur/3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: false - - /klona/2.0.5: - resolution: {integrity: sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==} - engines: {node: '>= 8'} - dev: false - - /language-subtag-registry/0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - dev: false - - /language-tags/1.0.5: - resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} - dependencies: - language-subtag-registry: 0.3.22 - dev: false - - /leven/3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: false - - /levn/0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 - dev: false - - /levn/0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: false - - /lilconfig/2.0.6: - resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} - engines: {node: '>=10'} - dev: false - - /lines-and-columns/1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: false - - /loader-runner/4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - dev: false - - /loader-utils/2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} - dependencies: - big.js: 5.2.2 - emojis-list: 3.0.0 - json5: 2.2.1 - dev: false - - /loader-utils/3.2.1: - resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} - engines: {node: '>= 12.13.0'} - dev: false - - /locate-path/3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - dependencies: - p-locate: 3.0.0 - path-exists: 3.0.0 - dev: false - - /locate-path/5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - dependencies: - p-locate: 4.1.0 - dev: false - - /locate-path/6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: false - - /lodash.debounce/4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - dev: false - - /lodash.memoize/4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - dev: false - - /lodash.merge/4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: false - - /lodash.sortby/4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - dev: false - - /lodash.uniq/4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - dev: false - - /lodash/4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: false - - /loose-envify/1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: false - - /lower-case/2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.4.1 - dev: false - - /lru-cache/6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: false - - /magic-string/0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - dependencies: - sourcemap-codec: 1.4.8 - dev: false - - /make-dir/3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.0 - dev: false - - /makeerror/1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - dependencies: - tmpl: 1.0.5 - dev: false - - /mdn-data/2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - dev: false - - /mdn-data/2.0.4: - resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} - dev: false - - /media-typer/0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - dev: false - - /memfs/3.4.10: - resolution: {integrity: sha512-0bCUP+L79P4am30yP1msPzApwuMQG23TjwlwdHeEV5MxioDR1a0AgB0T9FfggU52eJuDCq8WVwb5ekznFyWiTQ==} - engines: {node: '>= 4.0.0'} - dependencies: - fs-monkey: 1.0.3 - dev: false - - /merge-descriptors/1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - dev: false - - /merge-stream/2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: false - - /merge2/1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: false - - /methods/1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: false - - /micromatch/4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - dev: false - - /mime-db/1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false - - /mime-types/2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - - /mime/1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /mimic-fn/2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: false - - /mini-css-extract-plugin/2.6.1_webpack@5.75.0: - resolution: {integrity: sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - schema-utils: 4.0.0 - webpack: 5.75.0 - dev: false - - /minimalistic-assert/1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - dev: false - - /minimatch/3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: false - - /minimatch/5.1.0: - resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: false - - /minimist/1.2.7: - resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} - dev: false - - /mkdirp/0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - dependencies: - minimist: 1.2.7 - dev: false - - /ms/2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: false - - /ms/2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: false - - /ms/2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: false - - /multicast-dns/7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true - dependencies: - dns-packet: 5.4.0 - thunky: 1.1.0 - dev: false - - /nanoid/3.3.4: - resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: false - - /natural-compare-lite/1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: false - - /natural-compare/1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: false - - /negotiator/0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: false - - /neo-async/2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: false - - /no-case/3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.4.1 - dev: false - - /node-forge/1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - dev: false - - /node-int64/0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - dev: false - - /node-releases/2.0.6: - resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} - dev: false - - /normalize-path/3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: false - - /normalize-range/0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: false - - /normalize-url/6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - dev: false - - /npm-run-path/4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - dev: false - - /nth-check/1.0.2: - resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} - dependencies: - boolbase: 1.0.0 - dev: false - - /nth-check/2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - dependencies: - boolbase: 1.0.0 - dev: false - - /nwsapi/2.2.2: - resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} - dev: false - - /object-assign/4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: false - - /object-hash/3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - dev: false - - /object-inspect/1.12.2: - resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} - dev: false - - /object-keys/1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: false - - /object.assign/4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: false - - /object.entries/1.1.6: - resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 - dev: false - - /object.fromentries/2.0.6: - resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 - dev: false - - /object.getownpropertydescriptors/2.1.5: - resolution: {integrity: sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==} - engines: {node: '>= 0.8'} - dependencies: - array.prototype.reduce: 1.0.5 - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 - dev: false - - /object.hasown/1.1.2: - resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} - dependencies: - define-properties: 1.1.4 - es-abstract: 1.20.4 - dev: false - - /object.values/1.1.6: - resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 - dev: false - - /obuf/1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - dev: false - - /on-finished/2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 - dev: false - - /on-headers/1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - dev: false - - /once/1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: false - - /onetime/5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - dev: false - - /open/8.4.0: - resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} - engines: {node: '>=12'} - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - dev: false - - /optionator/0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - word-wrap: 1.2.3 - dev: false - - /optionator/0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.3 - dev: false - - /p-limit/2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - dependencies: - p-try: 2.2.0 - dev: false - - /p-limit/3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: false - - /p-locate/3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - dependencies: - p-limit: 2.3.0 - dev: false - - /p-locate/4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - dependencies: - p-limit: 2.3.0 - dev: false - - /p-locate/5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: false - - /p-retry/4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 - dev: false - - /p-try/2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: false - - /param-case/3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} - dependencies: - dot-case: 3.0.4 - tslib: 2.4.1 - dev: false - - /parent-module/1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: false - - /parse-json/5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - dependencies: - '@babel/code-frame': 7.18.6 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - dev: false - - /parse5/6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: false - - /parseurl/1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: false - - /pascal-case/3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - dependencies: - no-case: 3.0.4 - tslib: 2.4.1 - dev: false - - /path-exists/3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: false - - /path-exists/4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: false - - /path-is-absolute/1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: false - - /path-key/3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: false - - /path-parse/1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: false - - /path-to-regexp/0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - dev: false - - /path-type/4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: false - - /performance-now/2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - dev: false - - /picocolors/0.2.1: - resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} - dev: false - - /picocolors/1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: false - - /picomatch/2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: false - - /pify/2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: false - - /pirates/4.0.5: - resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} - engines: {node: '>= 6'} - dev: false - - /pkg-dir/4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - dev: false - - /pkg-up/3.1.0: - resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} - engines: {node: '>=8'} - dependencies: - find-up: 3.0.0 - dev: false - - /postcss-attribute-case-insensitive/5.0.2_postcss@8.4.19: - resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /postcss-browser-comments/4.0.0_o3gvceo4mmkmipwqbduijhv2ui: - resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} - engines: {node: '>=8'} - peerDependencies: - browserslist: '>=4' - postcss: '>=8' - dependencies: - browserslist: 4.21.4 - postcss: 8.4.19 - dev: false - - /postcss-calc/8.2.4_postcss@8.4.19: - resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} - peerDependencies: - postcss: ^8.2.2 - dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-clamp/4.1.0_postcss@8.4.19: - resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} - engines: {node: '>=7.6.0'} - peerDependencies: - postcss: ^8.4.6 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-color-functional-notation/4.2.4_postcss@8.4.19: - resolution: {integrity: sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-color-hex-alpha/8.0.4_postcss@8.4.19: - resolution: {integrity: sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-color-rebeccapurple/7.1.1_postcss@8.4.19: - resolution: {integrity: sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-colormin/5.3.0_postcss@8.4.19: - resolution: {integrity: sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.21.4 - caniuse-api: 3.0.0 - colord: 2.9.3 - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-convert-values/5.1.3_postcss@8.4.19: - resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.21.4 - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-custom-media/8.0.2_postcss@8.4.19: - resolution: {integrity: sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-custom-properties/12.1.10_postcss@8.4.19: - resolution: {integrity: sha512-U3BHdgrYhCrwTVcByFHs9EOBoqcKq4Lf3kXwbTi4hhq0qWhl/pDWq2THbv/ICX/Fl9KqeHBb8OVrTf2OaYF07A==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-custom-selectors/6.0.3_postcss@8.4.19: - resolution: {integrity: sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.3 - dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /postcss-dir-pseudo-class/6.0.5_postcss@8.4.19: - resolution: {integrity: sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /postcss-discard-comments/5.1.2_postcss@8.4.19: - resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - dev: false - - /postcss-discard-duplicates/5.1.0_postcss@8.4.19: - resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - dev: false - - /postcss-discard-empty/5.1.1_postcss@8.4.19: - resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - dev: false - - /postcss-discard-overridden/5.1.0_postcss@8.4.19: - resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - dev: false - - /postcss-double-position-gradients/3.1.2_postcss@8.4.19: - resolution: {integrity: sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-env-function/4.0.6_postcss@8.4.19: - resolution: {integrity: sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-flexbugs-fixes/5.0.2_postcss@8.4.19: - resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==} - peerDependencies: - postcss: ^8.1.4 - dependencies: - postcss: 8.4.19 - dev: false - - /postcss-focus-visible/6.0.4_postcss@8.4.19: - resolution: {integrity: sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /postcss-focus-within/5.0.4_postcss@8.4.19: - resolution: {integrity: sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /postcss-font-variant/5.0.0_postcss@8.4.19: - resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.19 - dev: false - - /postcss-gap-properties/3.0.5_postcss@8.4.19: - resolution: {integrity: sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - dev: false - - /postcss-image-set-function/4.0.7_postcss@8.4.19: - resolution: {integrity: sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-import/14.1.0_postcss@8.4.19: - resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} - engines: {node: '>=10.0.0'} - peerDependencies: - postcss: ^8.0.0 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.1 - dev: false - - /postcss-initial/4.0.1_postcss@8.4.19: - resolution: {integrity: sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==} - peerDependencies: - postcss: ^8.0.0 - dependencies: - postcss: 8.4.19 - dev: false - - /postcss-js/4.0.0_postcss@8.4.19: - resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.3.3 - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.19 - dev: false - - /postcss-lab-function/4.2.1_postcss@8.4.19: - resolution: {integrity: sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-load-config/3.1.4_postcss@8.4.19: - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - dependencies: - lilconfig: 2.0.6 - postcss: 8.4.19 - yaml: 1.10.2 - dev: false - - /postcss-loader/6.2.1_upg3rk2kpasnbk27hkqapxaxfq: - resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 - dependencies: - cosmiconfig: 7.0.1 - klona: 2.0.5 - postcss: 8.4.19 - semver: 7.3.8 - webpack: 5.75.0 - dev: false - - /postcss-logical/5.0.4_postcss@8.4.19: - resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.4 - dependencies: - postcss: 8.4.19 - dev: false - - /postcss-media-minmax/5.0.0_postcss@8.4.19: - resolution: {integrity: sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.19 - dev: false - - /postcss-merge-longhand/5.1.7_postcss@8.4.19: - resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - stylehacks: 5.1.1_postcss@8.4.19 - dev: false - - /postcss-merge-rules/5.1.3_postcss@8.4.19: - resolution: {integrity: sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.21.4 - caniuse-api: 3.0.0 - cssnano-utils: 3.1.0_postcss@8.4.19 - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /postcss-minify-font-values/5.1.0_postcss@8.4.19: - resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-minify-gradients/5.1.1_postcss@8.4.19: - resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - colord: 2.9.3 - cssnano-utils: 3.1.0_postcss@8.4.19 - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-minify-params/5.1.4_postcss@8.4.19: - resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.21.4 - cssnano-utils: 3.1.0_postcss@8.4.19 - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-minify-selectors/5.2.1_postcss@8.4.19: - resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /postcss-modules-extract-imports/3.0.0_postcss@8.4.19: - resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.19 - dev: false - - /postcss-modules-local-by-default/4.0.0_postcss@8.4.19: - resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - icss-utils: 5.1.0_postcss@8.4.19 - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-modules-scope/3.0.0_postcss@8.4.19: - resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /postcss-modules-values/4.0.0_postcss@8.4.19: - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - dependencies: - icss-utils: 5.1.0_postcss@8.4.19 - postcss: 8.4.19 - dev: false - - /postcss-nested/6.0.0_postcss@8.4.19: - resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /postcss-nesting/10.2.0_postcss@8.4.19: - resolution: {integrity: sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/selector-specificity': 2.0.2_45y636a2vqremknoajyxd5nkzy - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /postcss-normalize-charset/5.1.0_postcss@8.4.19: - resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - dev: false - - /postcss-normalize-display-values/5.1.0_postcss@8.4.19: - resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-positions/5.1.1_postcss@8.4.19: - resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-repeat-style/5.1.1_postcss@8.4.19: - resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-string/5.1.0_postcss@8.4.19: - resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-timing-functions/5.1.0_postcss@8.4.19: - resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-unicode/5.1.1_postcss@8.4.19: - resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.21.4 - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-url/5.1.0_postcss@8.4.19: - resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - normalize-url: 6.1.0 - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize-whitespace/5.1.1_postcss@8.4.19: - resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-normalize/10.0.1_o3gvceo4mmkmipwqbduijhv2ui: - resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} - engines: {node: '>= 12'} - peerDependencies: - browserslist: '>= 4' - postcss: '>= 8' - dependencies: - '@csstools/normalize.css': 12.0.0 - browserslist: 4.21.4 - postcss: 8.4.19 - postcss-browser-comments: 4.0.0_o3gvceo4mmkmipwqbduijhv2ui - sanitize.css: 13.0.0 - dev: false - - /postcss-opacity-percentage/1.1.2: - resolution: {integrity: sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==} - engines: {node: ^12 || ^14 || >=16} - dev: false - - /postcss-ordered-values/5.1.3_postcss@8.4.19: - resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - cssnano-utils: 3.1.0_postcss@8.4.19 - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-overflow-shorthand/3.0.4_postcss@8.4.19: - resolution: {integrity: sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-page-break/3.0.4_postcss@8.4.19: - resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} - peerDependencies: - postcss: ^8 - dependencies: - postcss: 8.4.19 - dev: false - - /postcss-place/7.0.5_postcss@8.4.19: - resolution: {integrity: sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-preset-env/7.8.2_postcss@8.4.19: - resolution: {integrity: sha512-rSMUEaOCnovKnwc5LvBDHUDzpGP+nrUeWZGWt9M72fBvckCi45JmnJigUr4QG4zZeOHmOCNCZnd2LKDvP++ZuQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - '@csstools/postcss-cascade-layers': 1.1.1_postcss@8.4.19 - '@csstools/postcss-color-function': 1.1.1_postcss@8.4.19 - '@csstools/postcss-font-format-keywords': 1.0.1_postcss@8.4.19 - '@csstools/postcss-hwb-function': 1.0.2_postcss@8.4.19 - '@csstools/postcss-ic-unit': 1.0.1_postcss@8.4.19 - '@csstools/postcss-is-pseudo-class': 2.0.7_postcss@8.4.19 - '@csstools/postcss-nested-calc': 1.0.0_postcss@8.4.19 - '@csstools/postcss-normalize-display-values': 1.0.1_postcss@8.4.19 - '@csstools/postcss-oklab-function': 1.1.1_postcss@8.4.19 - '@csstools/postcss-progressive-custom-properties': 1.3.0_postcss@8.4.19 - '@csstools/postcss-stepped-value-functions': 1.0.1_postcss@8.4.19 - '@csstools/postcss-text-decoration-shorthand': 1.0.0_postcss@8.4.19 - '@csstools/postcss-trigonometric-functions': 1.0.2_postcss@8.4.19 - '@csstools/postcss-unset-value': 1.0.2_postcss@8.4.19 - autoprefixer: 10.4.13_postcss@8.4.19 - browserslist: 4.21.4 - css-blank-pseudo: 3.0.3_postcss@8.4.19 - css-has-pseudo: 3.0.4_postcss@8.4.19 - css-prefers-color-scheme: 6.0.3_postcss@8.4.19 - cssdb: 7.1.0 - postcss: 8.4.19 - postcss-attribute-case-insensitive: 5.0.2_postcss@8.4.19 - postcss-clamp: 4.1.0_postcss@8.4.19 - postcss-color-functional-notation: 4.2.4_postcss@8.4.19 - postcss-color-hex-alpha: 8.0.4_postcss@8.4.19 - postcss-color-rebeccapurple: 7.1.1_postcss@8.4.19 - postcss-custom-media: 8.0.2_postcss@8.4.19 - postcss-custom-properties: 12.1.10_postcss@8.4.19 - postcss-custom-selectors: 6.0.3_postcss@8.4.19 - postcss-dir-pseudo-class: 6.0.5_postcss@8.4.19 - postcss-double-position-gradients: 3.1.2_postcss@8.4.19 - postcss-env-function: 4.0.6_postcss@8.4.19 - postcss-focus-visible: 6.0.4_postcss@8.4.19 - postcss-focus-within: 5.0.4_postcss@8.4.19 - postcss-font-variant: 5.0.0_postcss@8.4.19 - postcss-gap-properties: 3.0.5_postcss@8.4.19 - postcss-image-set-function: 4.0.7_postcss@8.4.19 - postcss-initial: 4.0.1_postcss@8.4.19 - postcss-lab-function: 4.2.1_postcss@8.4.19 - postcss-logical: 5.0.4_postcss@8.4.19 - postcss-media-minmax: 5.0.0_postcss@8.4.19 - postcss-nesting: 10.2.0_postcss@8.4.19 - postcss-opacity-percentage: 1.1.2 - postcss-overflow-shorthand: 3.0.4_postcss@8.4.19 - postcss-page-break: 3.0.4_postcss@8.4.19 - postcss-place: 7.0.5_postcss@8.4.19 - postcss-pseudo-class-any-link: 7.1.6_postcss@8.4.19 - postcss-replace-overflow-wrap: 4.0.0_postcss@8.4.19 - postcss-selector-not: 6.0.1_postcss@8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-pseudo-class-any-link/7.1.6_postcss@8.4.19: - resolution: {integrity: sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /postcss-reduce-initial/5.1.1_postcss@8.4.19: - resolution: {integrity: sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.21.4 - caniuse-api: 3.0.0 - postcss: 8.4.19 - dev: false - - /postcss-reduce-transforms/5.1.0_postcss@8.4.19: - resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - dev: false - - /postcss-replace-overflow-wrap/4.0.0_postcss@8.4.19: - resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} - peerDependencies: - postcss: ^8.0.3 - dependencies: - postcss: 8.4.19 - dev: false - - /postcss-selector-not/6.0.1_postcss@8.4.19: - resolution: {integrity: sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==} - engines: {node: ^12 || ^14 || >=16} - peerDependencies: - postcss: ^8.2 - dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /postcss-selector-parser/6.0.10: - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} - engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - dev: false - - /postcss-svgo/5.1.0_postcss@8.4.19: - resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - postcss-value-parser: 4.2.0 - svgo: 2.8.0 - dev: false - - /postcss-unique-selectors/5.1.1_postcss@8.4.19: - resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /postcss-value-parser/4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: false - - /postcss/7.0.39: - resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} - engines: {node: '>=6.0.0'} - dependencies: - picocolors: 0.2.1 - source-map: 0.6.1 - dev: false - - /postcss/8.4.19: - resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.4 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: false - - /prelude-ls/1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} - engines: {node: '>= 0.8.0'} - dev: false - - /prelude-ls/1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: false - - /pretty-bytes/5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - dev: false - - /pretty-error/4.0.0: - resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} - dependencies: - lodash: 4.17.21 - renderkid: 3.0.0 - dev: false - - /pretty-format/27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 - dev: false - - /pretty-format/28.1.3: - resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/schemas': 28.1.3 - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 18.2.0 - dev: false - - /process-nextick-args/2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: false - - /promise/8.3.0: - resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} - dependencies: - asap: 2.0.6 - dev: false - - /prompts/2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - dev: false - - /prop-types/15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - dev: false - - /proxy-addr/2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - dev: false - - /psl/1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - dev: false - - /punycode/2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} - engines: {node: '>=6'} - dev: false - - /q/1.5.1: - resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} - engines: {node: '>=0.6.0', teleport: '>=0.2.0'} - dev: false - - /qs/6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.4 - dev: false - - /querystringify/2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - dev: false - - /queue-microtask/1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: false - - /quick-lru/5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - dev: false - - /raf/3.4.1: - resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} - dependencies: - performance-now: 2.1.0 - dev: false - - /randombytes/2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /range-parser/1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: false - - /raw-body/2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: false - - /react-app-polyfill/3.0.0: - resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==} - engines: {node: '>=14'} - dependencies: - core-js: 3.26.0 - object-assign: 4.1.1 - promise: 8.3.0 - raf: 3.4.1 - regenerator-runtime: 0.13.10 - whatwg-fetch: 3.6.2 - dev: false - - /react-dev-utils/12.0.1_5mastfusvewdnfotkrq73j4uja: - resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=2.7' - webpack: '>=4' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/code-frame': 7.18.6 - address: 1.2.1 - browserslist: 4.21.4 - chalk: 4.1.2 - cross-spawn: 7.0.3 - detect-port-alt: 1.1.6 - escape-string-regexp: 4.0.0 - filesize: 8.0.7 - find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.2_5mastfusvewdnfotkrq73j4uja - global-modules: 2.0.0 - globby: 11.1.0 - gzip-size: 6.0.0 - immer: 9.0.16 - is-root: 2.1.0 - loader-utils: 3.2.1 - open: 8.4.0 - pkg-up: 3.1.0 - prompts: 2.4.2 - react-error-overlay: 6.0.11 - recursive-readdir: 2.2.3 - shell-quote: 1.7.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - webpack: 5.75.0 - transitivePeerDependencies: - - eslint - - supports-color - - vue-template-compiler - dev: false - - /react-dom/18.2.0_react@18.2.0: - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 - dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 - dev: false - - /react-error-overlay/6.0.11: - resolution: {integrity: sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==} - dev: false - - /react-is/16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: false - - /react-is/17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - dev: false - - /react-is/18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: false - - /react-refresh/0.11.0: - resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} - engines: {node: '>=0.10.0'} - dev: false - - /react-router-dom/6.4.3_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-MiaYQU8CwVCaOfJdYvt84KQNjT78VF0TJrA17SIQgNHRvLnXDJO6qsFqq8F/zzB1BWZjCFIrQpu4QxcshitziQ==} - engines: {node: '>=14'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' - dependencies: - '@remix-run/router': 1.0.3 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - react-router: 6.4.3_react@18.2.0 - dev: false - - /react-router/6.4.3_react@18.2.0: - resolution: {integrity: sha512-BT6DoGn6aV1FVP5yfODMOiieakp3z46P1Fk0RNzJMACzE7C339sFuHebfvWtnB4pzBvXXkHP2vscJzWRuUjTtA==} - engines: {node: '>=14'} - peerDependencies: - react: '>=16.8' - dependencies: - '@remix-run/router': 1.0.3 - react: 18.2.0 - dev: false - - /react-scripts/5.0.1_react@18.2.0: - resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} - engines: {node: '>=14.0.0'} - hasBin: true - peerDependencies: - react: '>= 16' - typescript: ^3.2.1 || ^4 - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@babel/core': 7.20.2 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.9_unmakpayn7vcxadrrsbqlrpehy - '@svgr/webpack': 5.5.0 - babel-jest: 27.5.1_@babel+core@7.20.2 - babel-loader: 8.3.0_npabyccmuonwo2rku4k53xo3hi - babel-plugin-named-asset-import: 0.3.8_@babel+core@7.20.2 - babel-preset-react-app: 10.0.1 - bfj: 7.0.2 - browserslist: 4.21.4 - camelcase: 6.3.0 - case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.7.1_webpack@5.75.0 - css-minimizer-webpack-plugin: 3.4.1_webpack@5.75.0 - dotenv: 10.0.0 - dotenv-expand: 5.1.0 - eslint: 8.27.0 - eslint-config-react-app: 7.0.1_eslint@8.27.0+jest@27.5.1 - eslint-webpack-plugin: 3.2.0_5mastfusvewdnfotkrq73j4uja - file-loader: 6.2.0_webpack@5.75.0 - fs-extra: 10.1.0 - html-webpack-plugin: 5.5.0_webpack@5.75.0 - identity-obj-proxy: 3.0.0 - jest: 27.5.1 - jest-resolve: 27.5.1 - jest-watch-typeahead: 1.1.0_jest@27.5.1 - mini-css-extract-plugin: 2.6.1_webpack@5.75.0 - postcss: 8.4.19 - postcss-flexbugs-fixes: 5.0.2_postcss@8.4.19 - postcss-loader: 6.2.1_upg3rk2kpasnbk27hkqapxaxfq - postcss-normalize: 10.0.1_o3gvceo4mmkmipwqbduijhv2ui - postcss-preset-env: 7.8.2_postcss@8.4.19 - prompts: 2.4.2 - react: 18.2.0 - react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1_5mastfusvewdnfotkrq73j4uja - react-refresh: 0.11.0 - resolve: 1.22.1 - resolve-url-loader: 4.0.0 - sass-loader: 12.6.0_webpack@5.75.0 - semver: 7.3.8 - source-map-loader: 3.0.2_webpack@5.75.0 - style-loader: 3.3.1_webpack@5.75.0 - tailwindcss: 3.2.3 - terser-webpack-plugin: 5.3.6_webpack@5.75.0 - webpack: 5.75.0 - webpack-dev-server: 4.11.1_webpack@5.75.0 - webpack-manifest-plugin: 4.1.1_webpack@5.75.0 - workbox-webpack-plugin: 6.5.4_webpack@5.75.0 - optionalDependencies: - fsevents: 2.3.2 - transitivePeerDependencies: - - '@babel/plugin-syntax-flow' - - '@babel/plugin-transform-react-jsx' - - '@parcel/css' - - '@swc/core' - - '@types/babel__core' - - '@types/webpack' - - bufferutil - - canvas - - clean-css - - csso - - debug - - esbuild - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - fibers - - node-notifier - - node-sass - - rework - - rework-visit - - sass - - sass-embedded - - sockjs-client - - supports-color - - ts-node - - type-fest - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - webpack-hot-middleware - - webpack-plugin-serve - dev: false - - /react/18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - dev: false - - /read-cache/1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - dependencies: - pify: 2.3.0 - dev: false - - /readable-stream/2.3.7: - resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - dev: false - - /readable-stream/3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: false - - /readdirp/3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: false - - /recursive-readdir/2.2.3: - resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} - engines: {node: '>=6.0.0'} - dependencies: - minimatch: 3.1.2 - dev: false - - /regenerate-unicode-properties/10.1.0: - resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - dev: false - - /regenerate/1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: false - - /regenerator-runtime/0.13.10: - resolution: {integrity: sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==} - dev: false - - /regenerator-transform/0.15.0: - resolution: {integrity: sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==} - dependencies: - '@babel/runtime': 7.20.1 - dev: false - - /regex-parser/2.2.11: - resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} - dev: false - - /regexp.prototype.flags/1.4.3: - resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - functions-have-names: 1.2.3 - dev: false - - /regexpp/3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: false - - /regexpu-core/5.2.1: - resolution: {integrity: sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==} - engines: {node: '>=4'} - dependencies: - regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.0 - regjsgen: 0.7.1 - regjsparser: 0.9.1 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.0.0 - dev: false - - /regjsgen/0.7.1: - resolution: {integrity: sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==} - dev: false - - /regjsparser/0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true - dependencies: - jsesc: 0.5.0 - dev: false - - /relateurl/0.2.7: - resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} - engines: {node: '>= 0.10'} - dev: false - - /renderkid/3.0.0: - resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} - dependencies: - css-select: 4.3.0 - dom-converter: 0.2.0 - htmlparser2: 6.1.0 - lodash: 4.17.21 - strip-ansi: 6.0.1 - dev: false - - /require-directory/2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: false - - /require-from-string/2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: false - - /requires-port/1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: false - - /resolve-cwd/3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - dependencies: - resolve-from: 5.0.0 - dev: false - - /resolve-from/4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: false - - /resolve-from/5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: false - - /resolve-url-loader/4.0.0: - resolution: {integrity: sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==} - engines: {node: '>=8.9'} - peerDependencies: - rework: 1.0.1 - rework-visit: 1.0.0 - peerDependenciesMeta: - rework: - optional: true - rework-visit: - optional: true - dependencies: - adjust-sourcemap-loader: 4.0.0 - convert-source-map: 1.9.0 - loader-utils: 2.0.4 - postcss: 7.0.39 - source-map: 0.6.1 - dev: false - - /resolve.exports/1.1.0: - resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} - engines: {node: '>=10'} - dev: false - - /resolve/1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true - dependencies: - is-core-module: 2.11.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: false - - /resolve/2.0.0-next.4: - resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} - hasBin: true - dependencies: - is-core-module: 2.11.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: false - - /retry/0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: false - - /reusify/1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: false - - /rimraf/3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: false - - /rollup-plugin-terser/7.0.2_rollup@2.79.1: - resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} - peerDependencies: - rollup: ^2.0.0 - dependencies: - '@babel/code-frame': 7.18.6 - jest-worker: 26.6.2 - rollup: 2.79.1 - serialize-javascript: 4.0.0 - terser: 5.15.1 - dev: false - - /rollup/2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: false - - /run-parallel/1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - dev: false - - /safe-buffer/5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: false - - /safe-buffer/5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false - - /safe-regex-test/1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.3 - is-regex: 1.1.4 - dev: false - - /safer-buffer/2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: false - - /sanitize.css/13.0.0: - resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} - dev: false - - /sass-loader/12.6.0_webpack@5.75.0: - resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - fibers: '>= 3.1.0' - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - sass: ^1.3.0 - sass-embedded: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - sass-embedded: - optional: true - dependencies: - klona: 2.0.5 - neo-async: 2.6.2 - webpack: 5.75.0 - dev: false - - /sax/1.2.4: - resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} - dev: false - - /saxes/5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} - engines: {node: '>=10'} - dependencies: - xmlchars: 2.2.0 - dev: false - - /scheduler/0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} - dependencies: - loose-envify: 1.4.0 - dev: false - - /schema-utils/2.7.0: - resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} - engines: {node: '>= 8.9.0'} - dependencies: - '@types/json-schema': 7.0.11 - ajv: 6.12.6 - ajv-keywords: 3.5.2_ajv@6.12.6 - dev: false - - /schema-utils/2.7.1: - resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} - engines: {node: '>= 8.9.0'} - dependencies: - '@types/json-schema': 7.0.11 - ajv: 6.12.6 - ajv-keywords: 3.5.2_ajv@6.12.6 - dev: false - - /schema-utils/3.1.1: - resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/json-schema': 7.0.11 - ajv: 6.12.6 - ajv-keywords: 3.5.2_ajv@6.12.6 - dev: false - - /schema-utils/4.0.0: - resolution: {integrity: sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==} - engines: {node: '>= 12.13.0'} - dependencies: - '@types/json-schema': 7.0.11 - ajv: 8.11.0 - ajv-formats: 2.1.1 - ajv-keywords: 5.1.0_ajv@8.11.0 - dev: false - - /select-hose/2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - dev: false - - /selfsigned/2.1.1: - resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==} - engines: {node: '>=10'} - dependencies: - node-forge: 1.3.1 - dev: false - - /semver/6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true - dev: false - - /semver/7.3.8: - resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: false - - /send/0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - dev: false - - /serialize-javascript/4.0.0: - resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} - dependencies: - randombytes: 2.1.0 - dev: false - - /serialize-javascript/6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} - dependencies: - randombytes: 2.1.0 - dev: false - - /serve-index/1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - batch: 0.6.1 - debug: 2.6.9 - escape-html: 1.0.3 - http-errors: 1.6.3 - mime-types: 2.1.35 - parseurl: 1.3.3 - transitivePeerDependencies: - - supports-color - dev: false - - /serve-static/1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0 - transitivePeerDependencies: - - supports-color - dev: false - - /setprototypeof/1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - dev: false - - /setprototypeof/1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: false - - /shebang-command/2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: false - - /shebang-regex/3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: false - - /shell-quote/1.7.4: - resolution: {integrity: sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==} - dev: false - - /side-channel/1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.1.3 - object-inspect: 1.12.2 - dev: false - - /signal-exit/3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: false - - /sisteransi/1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: false - - /slash/3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: false - - /slash/4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: false - - /sockjs/0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} - dependencies: - faye-websocket: 0.11.4 - uuid: 8.3.2 - websocket-driver: 0.7.4 - dev: false - - /source-list-map/2.0.1: - resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} - dev: false - - /source-map-js/1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: false - - /source-map-loader/3.0.2_webpack@5.75.0: - resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - abab: 2.0.6 - iconv-lite: 0.6.3 - source-map-js: 1.0.2 - webpack: 5.75.0 - dev: false - - /source-map-support/0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: false - - /source-map/0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: false - - /source-map/0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: false - - /source-map/0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - dependencies: - whatwg-url: 7.1.0 - dev: false - - /sourcemap-codec/1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - dev: false - - /spdy-transport/3.0.0: - resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} - dependencies: - debug: 4.3.4 - detect-node: 2.1.0 - hpack.js: 2.1.6 - obuf: 1.1.2 - readable-stream: 3.6.0 - wbuf: 1.7.3 - transitivePeerDependencies: - - supports-color - dev: false - - /spdy/4.0.2: - resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} - engines: {node: '>=6.0.0'} - dependencies: - debug: 4.3.4 - handle-thing: 2.0.1 - http-deceiver: 1.2.7 - select-hose: 2.0.0 - spdy-transport: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: false - - /sprintf-js/1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: false - - /stable/0.1.8: - resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} - deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' - dev: false - - /stack-utils/2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - dependencies: - escape-string-regexp: 2.0.0 - dev: false - - /stackframe/1.3.4: - resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} - dev: false - - /statuses/1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: false - - /statuses/2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: false - - /string-length/4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - dev: false - - /string-length/5.0.1: - resolution: {integrity: sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==} - engines: {node: '>=12.20'} - dependencies: - char-regex: 2.0.1 - strip-ansi: 7.0.1 - dev: false - - /string-natural-compare/3.0.1: - resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} - dev: false - - /string-width/4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: false - - /string.prototype.matchall/4.0.8: - resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} - dependencies: - call-bind: 1.0.2 - 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.3 - side-channel: 1.0.4 - dev: false - - /string.prototype.trimend/1.0.6: - resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 - dev: false - - /string.prototype.trimstart/1.0.6: - resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 - dev: false - - /string_decoder/1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - dependencies: - safe-buffer: 5.1.2 - dev: false - - /string_decoder/1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /stringify-object/3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} - engines: {node: '>=4'} - dependencies: - get-own-enumerable-property-symbols: 3.0.2 - is-obj: 1.0.1 - is-regexp: 1.0.0 - dev: false - - /strip-ansi/6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: false - - /strip-ansi/7.0.1: - resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} - engines: {node: '>=12'} - dependencies: - ansi-regex: 6.0.1 - dev: false - - /strip-bom/3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: false - - /strip-bom/4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: false - - /strip-comments/2.0.1: - resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} - engines: {node: '>=10'} - dev: false - - /strip-final-newline/2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: false - - /strip-json-comments/3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: false - - /style-loader/3.3.1_webpack@5.75.0: - resolution: {integrity: sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - webpack: 5.75.0 - dev: false - - /stylehacks/5.1.1_postcss@8.4.19: - resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - dependencies: - browserslist: 4.21.4 - postcss: 8.4.19 - postcss-selector-parser: 6.0.10 - dev: false - - /supports-color/5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: false - - /supports-color/7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: false - - /supports-color/8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - dependencies: - has-flag: 4.0.0 - dev: false - - /supports-hyperlinks/2.3.0: - resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - dev: false - - /supports-preserve-symlinks-flag/1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: false - - /svg-parser/2.0.4: - resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - dev: false - - /svgo/1.3.2: - resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} - engines: {node: '>=4.0.0'} - deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. - hasBin: true - dependencies: - chalk: 2.4.2 - coa: 2.0.2 - css-select: 2.1.0 - css-select-base-adapter: 0.1.1 - css-tree: 1.0.0-alpha.37 - csso: 4.2.0 - js-yaml: 3.14.1 - mkdirp: 0.5.6 - object.values: 1.1.6 - sax: 1.2.4 - stable: 0.1.8 - unquote: 1.1.1 - util.promisify: 1.0.1 - dev: false - - /svgo/2.8.0: - resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} - engines: {node: '>=10.13.0'} - hasBin: true - dependencies: - '@trysound/sax': 0.2.0 - commander: 7.2.0 - css-select: 4.3.0 - css-tree: 1.1.3 - csso: 4.2.0 - picocolors: 1.0.0 - stable: 0.1.8 - dev: false - - /symbol-tree/3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - dev: false - - /tailwindcss/3.2.3: - resolution: {integrity: sha512-Xt9D4PK4zuuQCEB8bwK9JUCKmTgUwyac/6b0/42Vqhgl6YJkep+Wf5wq+5uXYfmrupdAD0YY2NY1hyZp1HjRrg==} - engines: {node: '>=12.13.0'} - hasBin: true - dependencies: - arg: 5.0.2 - chokidar: 3.5.3 - color-name: 1.1.4 - detective: 5.2.1 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.2.12 - glob-parent: 6.0.2 - is-glob: 4.0.3 - lilconfig: 2.0.6 - micromatch: 4.0.5 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.19 - postcss-import: 14.1.0_postcss@8.4.19 - postcss-js: 4.0.0_postcss@8.4.19 - postcss-load-config: 3.1.4_postcss@8.4.19 - postcss-nested: 6.0.0_postcss@8.4.19 - postcss-selector-parser: 6.0.10 - postcss-value-parser: 4.2.0 - quick-lru: 5.1.1 - resolve: 1.22.1 - transitivePeerDependencies: - - ts-node - dev: false - - /tapable/1.1.3: - resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} - engines: {node: '>=6'} - dev: false - - /tapable/2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: false - - /temp-dir/2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - dev: false - - /tempy/0.6.0: - resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} - engines: {node: '>=10'} - dependencies: - is-stream: 2.0.1 - temp-dir: 2.0.0 - type-fest: 0.16.0 - unique-string: 2.0.0 - dev: false - - /terminal-link/2.1.1: - resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} - engines: {node: '>=8'} - dependencies: - ansi-escapes: 4.3.2 - supports-hyperlinks: 2.3.0 - dev: false - - /terser-webpack-plugin/5.3.6_webpack@5.75.0: - resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - dependencies: - '@jridgewell/trace-mapping': 0.3.17 - jest-worker: 27.5.1 - schema-utils: 3.1.1 - serialize-javascript: 6.0.0 - terser: 5.15.1 - webpack: 5.75.0 - dev: false - - /terser/5.15.1: - resolution: {integrity: sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@jridgewell/source-map': 0.3.2 - acorn: 8.8.1 - commander: 2.20.3 - source-map-support: 0.5.21 - dev: false - - /test-exclude/6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - dev: false - - /text-table/0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: false - - /throat/6.0.1: - resolution: {integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==} - dev: false - - /thunky/1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - dev: false - - /tmpl/1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: false - - /to-fast-properties/2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: false - - /to-regex-range/5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: false - - /toidentifier/1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: false - - /tough-cookie/4.1.2: - resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} - engines: {node: '>=6'} - dependencies: - psl: 1.9.0 - punycode: 2.1.1 - universalify: 0.2.0 - url-parse: 1.5.10 - dev: false - - /tr46/1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - dependencies: - punycode: 2.1.1 - dev: false - - /tr46/2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} - engines: {node: '>=8'} - dependencies: - punycode: 2.1.1 - dev: false - - /tryer/1.0.1: - resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} - dev: false - - /tsconfig-paths/3.14.1: - resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.1 - minimist: 1.2.7 - strip-bom: 3.0.0 - dev: false - - /tslib/1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: false - - /tslib/2.4.1: - resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} - dev: false - - /tsutils/3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - dev: false - - /type-check/0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - dev: false - - /type-check/0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - dev: false - - /type-detect/4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: false - - /type-fest/0.16.0: - resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} - engines: {node: '>=10'} - dev: false - - /type-fest/0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: false - - /type-fest/0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: false - - /type-is/1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - dev: false - - /typedarray-to-buffer/3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - dev: false - - /unbox-primitive/1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - dependencies: - call-bind: 1.0.2 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: false - - /unicode-canonical-property-names-ecmascript/2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - dev: false - - /unicode-match-property-ecmascript/2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 - unicode-property-aliases-ecmascript: 2.1.0 - dev: false - - /unicode-match-property-value-ecmascript/2.0.0: - resolution: {integrity: sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==} - engines: {node: '>=4'} - dev: false - - /unicode-property-aliases-ecmascript/2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - dev: false - - /unique-string/2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: false - - /universalify/0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - dev: false - - /universalify/2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} - engines: {node: '>= 10.0.0'} - dev: false - - /unpipe/1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: false - - /unquote/1.1.1: - resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} - dev: false - - /upath/1.2.0: - resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} - engines: {node: '>=4'} - dev: false - - /update-browserslist-db/1.0.10_browserslist@4.21.4: - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.21.4 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: false - - /uri-js/4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.1.1 - dev: false - - /url-parse/1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - dev: false - - /util-deprecate/1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: false - - /util.promisify/1.0.1: - resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} - dependencies: - define-properties: 1.1.4 - es-abstract: 1.20.4 - has-symbols: 1.0.3 - object.getownpropertydescriptors: 2.1.5 - dev: false - - /utila/0.4.0: - resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} - dev: false - - /utils-merge/1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: false - - /uuid/8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: false - - /v8-to-istanbul/8.1.1: - resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} - engines: {node: '>=10.12.0'} - dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.9.0 - source-map: 0.7.4 - dev: false - - /vary/1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: false - - /w3c-hr-time/1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - deprecated: Use your platform's native performance.now() and performance.timeOrigin. - dependencies: - browser-process-hrtime: 1.0.0 - dev: false - - /w3c-xmlserializer/2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} - engines: {node: '>=10'} - dependencies: - xml-name-validator: 3.0.0 - dev: false - - /walker/1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - dependencies: - makeerror: 1.0.12 - dev: false - - /watchpack/2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} - engines: {node: '>=10.13.0'} - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.10 - dev: false - - /wbuf/1.7.3: - resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} - dependencies: - minimalistic-assert: 1.0.1 - dev: false - - /webidl-conversions/4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - dev: false - - /webidl-conversions/5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} - engines: {node: '>=8'} - dev: false - - /webidl-conversions/6.1.0: - resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} - engines: {node: '>=10.4'} - dev: false - - /webpack-dev-middleware/5.3.3_webpack@5.75.0: - resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - dependencies: - colorette: 2.0.19 - memfs: 3.4.10 - mime-types: 2.1.35 - range-parser: 1.2.1 - schema-utils: 4.0.0 - webpack: 5.75.0 - dev: false - - /webpack-dev-server/4.11.1_webpack@5.75.0: - resolution: {integrity: sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==} - engines: {node: '>= 12.13.0'} - hasBin: true - peerDependencies: - webpack: ^4.37.0 || ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/bonjour': 3.5.10 - '@types/connect-history-api-fallback': 1.3.5 - '@types/express': 4.17.14 - '@types/serve-index': 1.9.1 - '@types/serve-static': 1.15.0 - '@types/sockjs': 0.3.33 - '@types/ws': 8.5.3 - ansi-html-community: 0.0.8 - bonjour-service: 1.0.14 - chokidar: 3.5.3 - colorette: 2.0.19 - compression: 1.7.4 - connect-history-api-fallback: 2.0.0 - default-gateway: 6.0.3 - express: 4.18.2 - graceful-fs: 4.2.10 - html-entities: 2.3.3 - http-proxy-middleware: 2.0.6_@types+express@4.17.14 - ipaddr.js: 2.0.1 - open: 8.4.0 - p-retry: 4.6.2 - rimraf: 3.0.2 - schema-utils: 4.0.0 - selfsigned: 2.1.1 - serve-index: 1.9.1 - sockjs: 0.3.24 - spdy: 4.0.2 - webpack: 5.75.0 - webpack-dev-middleware: 5.3.3_webpack@5.75.0 - ws: 8.11.0 - transitivePeerDependencies: - - bufferutil - - debug - - supports-color - - utf-8-validate - dev: false - - /webpack-manifest-plugin/4.1.1_webpack@5.75.0: - resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} - engines: {node: '>=12.22.0'} - peerDependencies: - webpack: ^4.44.2 || ^5.47.0 - dependencies: - tapable: 2.2.1 - webpack: 5.75.0 - webpack-sources: 2.3.1 - dev: false - - /webpack-sources/1.4.3: - resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} - dependencies: - source-list-map: 2.0.1 - source-map: 0.6.1 - dev: false - - /webpack-sources/2.3.1: - resolution: {integrity: sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==} - engines: {node: '>=10.13.0'} - dependencies: - source-list-map: 2.0.1 - source-map: 0.6.1 - dev: false - - /webpack-sources/3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: false - - /webpack/5.75.0: - resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/eslint-scope': 3.7.4 - '@types/estree': 0.0.51 - '@webassemblyjs/ast': 1.11.1 - '@webassemblyjs/wasm-edit': 1.11.1 - '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.8.1 - acorn-import-assertions: 1.8.0_acorn@8.8.1 - browserslist: 4.21.4 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.10.0 - es-module-lexer: 0.9.3 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.10 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.1.1 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.6_webpack@5.75.0 - watchpack: 2.4.0 - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - dev: false - - /websocket-driver/0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - dependencies: - http-parser-js: 0.5.8 - safe-buffer: 5.2.1 - websocket-extensions: 0.1.4 - dev: false - - /websocket-extensions/0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - dev: false - - /whatwg-encoding/1.0.5: - resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} - dependencies: - iconv-lite: 0.4.24 - dev: false - - /whatwg-fetch/3.6.2: - resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==} - dev: false - - /whatwg-mimetype/2.3.0: - resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} - dev: false - - /whatwg-url/7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - dependencies: - lodash.sortby: 4.7.0 - tr46: 1.0.1 - webidl-conversions: 4.0.2 - dev: false - - /whatwg-url/8.7.0: - resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} - engines: {node: '>=10'} - dependencies: - lodash: 4.17.21 - tr46: 2.1.0 - webidl-conversions: 6.1.0 - dev: false - - /which-boxed-primitive/1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - dev: false - - /which/1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: false - - /which/2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: false - - /word-wrap/1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} - dev: false - - /workbox-background-sync/6.5.4: - resolution: {integrity: sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==} - dependencies: - idb: 7.1.1 - workbox-core: 6.5.4 - dev: false - - /workbox-broadcast-update/6.5.4: - resolution: {integrity: sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==} - dependencies: - workbox-core: 6.5.4 - dev: false - - /workbox-build/6.5.4: - resolution: {integrity: sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==} - engines: {node: '>=10.0.0'} - dependencies: - '@apideck/better-ajv-errors': 0.3.6_ajv@8.11.0 - '@babel/core': 7.20.2 - '@babel/preset-env': 7.20.2_@babel+core@7.20.2 - '@babel/runtime': 7.20.1 - '@rollup/plugin-babel': 5.3.1_rw3hudt2pmn5afxog7l3b6qtze - '@rollup/plugin-node-resolve': 11.2.1_rollup@2.79.1 - '@rollup/plugin-replace': 2.4.2_rollup@2.79.1 - '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.11.0 - common-tags: 1.8.2 - fast-json-stable-stringify: 2.1.0 - fs-extra: 9.1.0 - glob: 7.2.3 - lodash: 4.17.21 - pretty-bytes: 5.6.0 - rollup: 2.79.1 - rollup-plugin-terser: 7.0.2_rollup@2.79.1 - 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 - transitivePeerDependencies: - - '@types/babel__core' - - supports-color - dev: false - - /workbox-cacheable-response/6.5.4: - resolution: {integrity: sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==} - dependencies: - workbox-core: 6.5.4 - dev: false - - /workbox-core/6.5.4: - resolution: {integrity: sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==} - dev: false - - /workbox-expiration/6.5.4: - resolution: {integrity: sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==} - dependencies: - idb: 7.1.1 - workbox-core: 6.5.4 - dev: false - - /workbox-google-analytics/6.5.4: - resolution: {integrity: sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==} - dependencies: - workbox-background-sync: 6.5.4 - workbox-core: 6.5.4 - workbox-routing: 6.5.4 - workbox-strategies: 6.5.4 - dev: false - - /workbox-navigation-preload/6.5.4: - resolution: {integrity: sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==} - dependencies: - workbox-core: 6.5.4 - dev: false - - /workbox-precaching/6.5.4: - resolution: {integrity: sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==} - dependencies: - workbox-core: 6.5.4 - workbox-routing: 6.5.4 - workbox-strategies: 6.5.4 - dev: false - - /workbox-range-requests/6.5.4: - resolution: {integrity: sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==} - dependencies: - workbox-core: 6.5.4 - dev: false - - /workbox-recipes/6.5.4: - resolution: {integrity: sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==} - dependencies: - 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 - dev: false - - /workbox-routing/6.5.4: - resolution: {integrity: sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==} - dependencies: - workbox-core: 6.5.4 - dev: false - - /workbox-strategies/6.5.4: - resolution: {integrity: sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==} - dependencies: - workbox-core: 6.5.4 - dev: false - - /workbox-streams/6.5.4: - resolution: {integrity: sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==} - dependencies: - workbox-core: 6.5.4 - workbox-routing: 6.5.4 - dev: false - - /workbox-sw/6.5.4: - resolution: {integrity: sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==} - dev: false - - /workbox-webpack-plugin/6.5.4_webpack@5.75.0: - resolution: {integrity: sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==} - engines: {node: '>=10.0.0'} - peerDependencies: - webpack: ^4.4.0 || ^5.9.0 - dependencies: - fast-json-stable-stringify: 2.1.0 - pretty-bytes: 5.6.0 - upath: 1.2.0 - webpack: 5.75.0 - webpack-sources: 1.4.3 - workbox-build: 6.5.4 - transitivePeerDependencies: - - '@types/babel__core' - - supports-color - dev: false - - /workbox-window/6.5.4: - resolution: {integrity: sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==} - dependencies: - '@types/trusted-types': 2.0.2 - workbox-core: 6.5.4 - dev: false - - /wrap-ansi/7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: false - - /wrappy/1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: false - - /write-file-atomic/3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - dev: false - - /ws/7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - - /ws/8.11.0: - resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false - - /xml-name-validator/3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - dev: false - - /xmlchars/2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - dev: false - - /xtend/4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: false - - /y18n/5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: false - - /yallist/4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: false - - /yaml/1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} - dev: false - - /yargs-parser/20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: false - - /yargs/16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.9 - dev: false - - /yocto-queue/0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: false diff --git a/packages/example/public/index.html b/packages/example/public/index.html deleted file mode 100644 index 65d9ff1f..00000000 --- a/packages/example/public/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - react-async-states - - - - - -
    -
    - Loading -
    -
    - - diff --git a/packages/example/public/manifest.json b/packages/example/public/manifest.json deleted file mode 100644 index 5d85093c..00000000 --- a/packages/example/public/manifest.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "short_name": "react-async-states", - "name": "react-async-states", - "start_url": "./index.html", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/packages/example/src/App2.js b/packages/example/src/App2.js deleted file mode 100644 index fcb07fce..00000000 --- a/packages/example/src/App2.js +++ /dev/null @@ -1,67 +0,0 @@ -import React from "react"; -import { - RenderStrategy, - StateBoundary, - useCurrentState, - AsyncStateStatus -} from "react-async-states"; - -const config = { - lazy: false, - producer: async function () { - const response = await fetch('https://jsonplaceholder.typicode.com/users/12'); - if (!response.ok) { - throw new Error(response.status); - } - return response.json(); - } -} - -function Wrapper({children}) { - const [t, e] = React.useState(false); - - return ( - <> - - {t && children} - - ) -} - -function MyError() { - const {state: {data: error}} = useCurrentState(); - - return
    This error is happening: {error?.toString?.()}
    -} - -function MyPending() { - const {state: {props}} = useCurrentState(); - - return
    PENDING WITH PROPS: {JSON.stringify(props, null, 4)}
    -} - -export default function App2() { - return ( - -

    Result!

    - , - [AsyncStateStatus.success]: , - }} - /> -
    - ); -} - -function CurrentState() { - const currentState = useCurrentState(); - return
    - Current state details {currentState.state.status} -
    -      {JSON.stringify(currentState, null, 4)}
    -    
    -
    -} diff --git a/packages/example/src/example1/index.js b/packages/example/src/example1/index.js deleted file mode 100644 index 7f82178b..00000000 --- a/packages/example/src/example1/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import React from "react"; - -export default function App() { - return "Hello! Ongoing!"; -} diff --git a/packages/example/src/index.bak.js b/packages/example/src/index.bak.js deleted file mode 100644 index 2167ac31..00000000 --- a/packages/example/src/index.bak.js +++ /dev/null @@ -1,126 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' - -import './index.css' -import App from "./past/App"; - -import App2 from './past/v2/Bug2'; - - -import { createSource, useSource, useAsyncState } from "react-async-states"; - -function getOrCreateHost(id) { - const maybeElement = document.getElementById(id); - if (!maybeElement) { - const host = document.createElement("div"); - host.setAttribute("id", id); - document.body.appendChild(host); - return host; - } - return maybeElement; -} - -function initVanillaHost(host) { - const incrButton = document.createElement("button"); - incrButton.innerHTML = "+"; - incrButton.addEventListener("click", increment); - const decrButton = document.createElement("button"); - decrButton.innerHTML = "-"; - decrButton.addEventListener("click", decrement); - const span = document.createElement("span"); - span.setAttribute("id", "vanilla-content"); - span.innerHTML = "Counter value is " + counterSource.getState().data; - const title = document.createElement("h1"); - title.innerHTML = "Vanilla js"; - host.appendChild(title); - host.appendChild(decrButton); - host.appendChild(span); - host.appendChild(incrButton); - -} - -const root1Host = getOrCreateHost("root"); -const root2Host = getOrCreateHost("root2"); -const vanillaHost = getOrCreateHost("vanilla"); - -const root = ReactDOM.createRoot(root1Host); -const root2 = ReactDOM.createRoot(root2Host); - -const counterSource = createSource("counter", null, {initialValue: 0}); -const decrement = () => counterSource.setState(p => p.data - 1); -const increment = () => counterSource.setState(p => p.data + 1); - -function userProducer() { - return fetch(`https://jsonplaceholder.typicode.com/users/1`).then((res) => - res.json() - ); -} - -const source = createSource("user-1", userProducer, {skipPendingDelayMs: 400}); - -function Toto() { - const {state, abort} = useAsyncState({ - source, - events: {change: (e) => console.log("CHANGE EVENT", e.state)} - }); - - return ( -
    - - - {state.timestamp} -
    -
    {JSON.stringify(state, null, 4)}
    -
    -
    - ); -} - -// root.render(); -// root2.render(); -// initVanillaHost(vanillaHost); - -counterSource.subscribe((newState) => { - document.getElementById("vanilla-content").innerHTML = `Counter value is ${newState.data}`; -}, "vanilla-subscription"); - -function Counter({from}) { - const {state} = useSource(counterSource); - - return ( -
    -

    {from}

    - - Counter value is {state.data} - -
    - ) -} - -function MeTesting() { - return
    Hello, world!
    -} - - -// -// const button = document.createElement("button"); -// button.innerHTML = "Click me"; -// button.onclick = function () { -// console.log("Root created"); -// root.render( -// -// ); -// console.log("rendered root!"); -// Promise.resolve().then(() => console.log('promised did resolve !')); -// setTimeout(() => console.log('timeout passed')); -// }; -// document.body.appendChild(button); -// - -// ReactDOM.render( -// , document.getElementById('root')); - -// const anotherRoot = document.createElement("div"); -// document.body.appendChild(anotherRoot); -// -// ReactDOM.render(, anotherRoot); diff --git a/packages/example/src/index.css b/packages/example/src/index.css deleted file mode 100644 index ec90b9f1..00000000 --- a/packages/example/src/index.css +++ /dev/null @@ -1,51 +0,0 @@ -/* body { - margin: 0; - padding: 0; - font-family: sans-serif; -} */ -body { - margin: 0; -} -.splash-animated { - animation: gradient 6s infinite linear; -} -.splash { - background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d58b); - background-size: 300% 100%; - height: 100vh; -} -.loading { - font-size: 3rem; - display: flex; - align-items: center; - justify-content: center; - height: 100%; -} - -@keyframes gradient { - 0% { - background-position: 0% 50%; - } - 50% { - background-position: 100% -50%; - } - 100% { - background-position: 0% 50%; - } -} - -.card { - --card-blend-mode: overlay; - background-color: #fff; - border-radius: 0.5rem; - box-shadow: 0.05rem 0.1rem 0.3rem -0.03rem rgba(0, 0, 0, 0.45); - background-image: linear-gradient( - #5e9ad9, #e271ad, - white max(9.5rem, 27vh) - ); - overflow: hidden; -} -@keyframes fadeIn { - 0% { opacity: 0; } - 100% { opacity: 1; } -} diff --git a/packages/example/src/index.js b/packages/example/src/index.js deleted file mode 100644 index 39162ba1..00000000 --- a/packages/example/src/index.js +++ /dev/null @@ -1,218 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' - -import { - AsyncStateProvider, - AsyncStateStatus, - useAsyncState, - createSource, - useSource -} from "react-async-states"; - -import App from "./past/App" - -import './index.css' - -import {autoConfigureDevtools} from "async-states-devtools" -import "async-states-devtools/dist/style.css" -autoConfigureDevtools({open: true}); - -async function fetchProfiles(props) { - - const controller = new AbortController(); - - props.onAbort(() => { - controller.abort() - }); - - await new Promise((resolve) => { - const id = setTimeout(resolve, 800); - props.onAbort(() => clearTimeout(id)); - }) - - return await fetch( - `https://jsonplaceholder.typicode.com/users/${props.args[0] ?? ''}`, - {signal: controller.signal} - ).then(r => r.json()); -} - -const profilesList = createSource("profiles", fetchProfiles, { -// runEffect: "delay", -// runEffectDurationMs: 800 -}); -const root = ReactDOM.createRoot(document.getElementById("root")); - -// runpSource(profilesList) -// .then(() => { -// root.render( -// -// -// -// -// -// -// -// ) -// }); - -// const myManager = AsyncStateManager(); -// -// setInterval(() => { -// console.log('manager', myManager.entries); -// }, 2000) - -root.render( - <> - - - {/**/} - - {/**/} - {/**/} - -
    - {/**/} - {/* */} - {/* */} - {/* */} - {/**/} - - {/**/} - - {/*
    */} - {/**/} -
    - -) - -function CounterDetails() { - const result = useAsyncState("counter") - return ( -
    -

    Details

    - -
    - - {result.mode} - -
    -          {JSON.stringify(result.state, null, 4)}
    -        
    -
    -
    - ); -} - -function CounterHoister() { - const result = useAsyncState.hoist({ - key: "counter", - initialValue: 0, - resetStateOnDispose: true, - }) - return ( -
    -

    Hoister

    - -
    - - {result.mode} - -
    -          {JSON.stringify(result.state, null, 4)}
    -        
    -
    -
    - ); -} - -// -function ProfilesView(props) { - const {state, run} = useSource(profilesList); - - if (state.status !== AsyncStateStatus.error && state.status !== AsyncStateStatus.success) { - return "Pending..." + state.status; - } - - if (state.status === AsyncStateStatus.error) { - return Error occurred!!! {state.data?.toString?.()} - } - const data = Array.isArray(state.data) ? state.data : [state.data] - return ( -
    - - {data.map((profile, index) => )} -
    - ); -} - -function ProfileView({profile, index}) { - return (
    {profile.id} - {profile.name}
    ) -} - -// function ProviderTest() { -// return ( -// -// -// -// ); -// } - -function Wrapper({children, initialValue = false}) { - const [mounted, setMounted] = React.useState(initialValue); - - return ( - <> - - {mounted && children} - - ); -} - -// -// function Hoister() { -// const {state} = useAsyncState.hoist({ -// key: "haha", -// initialValue: 5, -// producer: () => 3, -// resetStateOnDispose: true, -// }); -// -// return state.data; -// } diff --git a/packages/example/src/past/App.js b/packages/example/src/past/App.js deleted file mode 100644 index b5cf1c64..00000000 --- a/packages/example/src/past/App.js +++ /dev/null @@ -1,181 +0,0 @@ -import React from "react"; -import { useAsyncState } from "react-async-states"; -import { BrowserRouter as Router, Route, Routes } from "react-router-dom"; -import BasicUsageDemo from "./BasicUsageDemo"; -import RoutingDemo from "./RoutingDemo"; -import SelectorsDemo from "./SelectorsDemo"; -import ReducersDemo from "./ReducersDemo"; -import StandaloneDemo from "./StandaloneDemo"; -import DemoDemo from "./DemoDemo"; -import EmitDemo from "./EmitDemo"; -import ReduxDemo from "./ReduxDemo"; -import BrokerDemo from "./BrokerDemo"; -import NextDemo from "./NextDemo"; -import LanesDemo from "./LanesDemo"; -import Navigation from "./Navigation"; -import DemoProvider from "./Provider"; - - - -function demoProducer(props) { - props.run("posts"); - console.log('posts state', props.select("posts")); - return null; -} - -function ProducerRunPropsDemo() { - const {state: {data}, run, abort} = useAsyncState.auto(demoProducer); - const {mode, state: postsState} = useAsyncState.lazy("users"); - return ( -
    -

    run effects demo

    -

    State value is:
    {JSON.stringify(data ?? [], null, 4)}

    - -

    posts state value - is {mode}:
    {JSON.stringify(postsState ?? {}, null, 4)}
    -

    - - -
    - ); -} - - -function OutsideProvider() { - - return -} - -function InsideProvider() { - const {mode, state, run, setState} = useAsyncState({ - lazy: true, - key: "counter", - initialValue: 0, - selector: s => s.data, - hoistToProvider: true, - }); - - console.log('state is', mode, state) - - return (<> - - - ); -} - -function ShowCounter() { - const {state} = useAsyncState({key: "counter", selector: s => s.data}); - - return counter is: {state} -} - -export default function App() { - React.useEffect(() => console.log('app mounted'), []); - return ( - - {/**/} - {/**/} - - -
    - -
    - - }> - - }> - - }> - - }> - - - }> - - - }> - - - }> - - - }> - - - }> - - - }> - - - }> - - - -
    - -
    -
    - ) - ; -} - -function GeneratorsTests() { - return ( - <> - - - - - - ); -} - -function* syncGenExample() { - for (let i = 0; i < 10_0; i++) { - yield i; - } - // throw 5; - return yield 10_001; -} - -function GeneratorSync() { - const {state} = useAsyncState.auto(syncGenExample); - // console.log('sync generator value', state); - return null; -} - -function* asyncGenExample(props) { - for (let i = 0; i < 10; i++) { - yield i; - } - let timeoutId; - props.onAbort(function onAbort() { - console.log('aborting timeout id', timeoutId); - clearTimeout(timeoutId); - }); - return yield new Promise(resolve => timeoutId = setTimeout(resolve, 10000)); - // try { - // throw new Error("testing"); - // } catch (e) { - // throw e; - // } -} - -function GeneratorAsync() { - // React.useLayoutEffect(() => { - // console.log('async mounted layout effect'); - // return () => console.log('unmounting layout effect!! async'); - // }, []); - // React.useEffect(() => { - // console.log('async mounted'); - // return () => console.log('unmounting!! async'); - // }, []); - const {state, read} = useAsyncState.auto(asyncGenExample); - // React.useEffect(() => { - // console.log('status change', state.status); - // }, [state.status]) - // console.log('async generator value', read()); - return null; -} diff --git a/packages/example/src/past/App2.js b/packages/example/src/past/App2.js deleted file mode 100644 index 1ece771a..00000000 --- a/packages/example/src/past/App2.js +++ /dev/null @@ -1,16 +0,0 @@ -import React from "react"; -import { useAsyncState } from "react-async-states"; -import { demoAsyncStates } from "./Provider"; - -export default function App2() { - const {state: {status,data}} = useAsyncState(demoAsyncStates.users); - return (
    -

    This is a whole new react tree

    -
    - status: {status} -
    -        {JSON.stringify(data ?? {}, null, 2)}
    -      
    -
    -
    ) -} diff --git a/packages/example/src/past/BasicUsageDemo.js b/packages/example/src/past/BasicUsageDemo.js deleted file mode 100644 index 2e8203bf..00000000 --- a/packages/example/src/past/BasicUsageDemo.js +++ /dev/null @@ -1,149 +0,0 @@ -import React from "react"; -import { demoAsyncStates } from "./Provider"; -import { useAsyncState, useSelector } from "react-async-states"; - -function SimpleSub({ - source, - asyncStateKey, - displayValue, - lazy = false, - suspend = false, - cacheConfig = null - }) { - // console.log('inside simple sub', asyncStateKey, source); - const { - key, - invalidateCache, - state, - read, - run, - abort, - mode - } = useAsyncState({source, key: asyncStateKey, lazy, cacheConfig}); - - if (!key) { - return "waiting..."; - } - // console.log('later,', {key, state, mode}) - const {status, data} = state; - // console.log('source ' + source.key, source.getState(), source.isSource, source); - - // console.log('suspend', suspend, read()); - const readData = suspend ? read().data : data; - return ( -
    - Key: {key} -
    - Status: {status} -
    - Run: -
    - Run: -
    - Abort: -
    - {status === "success" && ( -
    - Data: -
    -
      - {displayValue(readData)} -
    -
    - )} -
    - ); -} - -export default function Demo() { - return ( -
    -
    -
    - -
    -
    -

    Subscribe to global async state - {demoAsyncStates.users.key}

    -
    - - data?.map(user =>
  • {user.id} - {user.username} - {user.name} - {user.email}
  • )} - /> -
    -
    - - data?.map(post =>
  • {post.id} - - userId: {post.userId} - {post.title}
  • )} - /> -
    -
    -
    -
    -
    -
    - ); -} - -function UndefinedProducerDemo() { - - return ( - <> - - - - - ); -} - -function UndefinedProducerDemoHoister() { - const {state} = useAsyncState({ - lazy: true, - key: "user_input", - selector: s => s.data, - hoistToProvider: true, - initialValue: "Type something", - }); - - return ( -
    -

    user input value: {state}

    -
    - ); -} - -function UndefinedProducerDemoConsumer() { - const {state, run} = useAsyncState("user_input"); - if (!state) { - return null; - } - const {data} = state; - return ( - run(e.target.value)} - value={data} placeholder="type something"/> - ); -} - -function selectCurrentValue(state) { - return state?.data; -} - -function UndefinedProducerDemoSelector() { - const data = useSelector("user_input", selectCurrentValue); - return ( - -
    -

    I select data from user input: {data}

    -
    - ); -} diff --git a/packages/example/src/past/BrokerDemo.js b/packages/example/src/past/BrokerDemo.js deleted file mode 100644 index bc8c5517..00000000 --- a/packages/example/src/past/BrokerDemo.js +++ /dev/null @@ -1,84 +0,0 @@ -import React from "react"; -import { useAsyncState } from "react-async-states"; - - -function brokerProducer(props) { - return new Promise((resolve, reject) => { - const ws = new WebSocket("ws://localhost:9091"); - ws.addEventListener("error", (message) => { - reject({connected: false, error: message}); - }); - ws.addEventListener("open", () => { - resolve({ws, connected: true}); - }); - ws.addEventListener("close", message => { - props.emit(message, "error"); - }); - ws.addEventListener("message", (message) => { - const jsonData = JSON.parse(message.data); - const {to} = jsonData; - if (to) { - props.run(to, null, jsonData); - } - }); - props.onAbort(() => ws.close()); - }); -} - -function logsProducer(props) { - const msg = props.args[0]; - if (msg) { - return [...(props.lastSuccess.data ?? []), msg]; - } -} - -function productsProducer(props) { - const msg = props.args[0]; - if (msg) { - return [...(props.lastSuccess.data ?? []), msg]; - } -} - -function conversationsProducer(props) { - const msg = props.args[0]; - if (msg) { - return [...(props.lastSuccess.data ?? []), msg]; - } -} - -export default function BrokerDemo() { - return ( - <> - - - - - - ); -} - -function BrokerSetup() { - const {state: {status}} = useAsyncState.auto(brokerProducer); - useAsyncState.hoist({key: "logs", producer: logsProducer}); - useAsyncState.hoist({key: "products", producer: productsProducer}); - useAsyncState.hoist({key: "conversations", producer: conversationsProducer}); - - return ( -
    - Broker status: {status} -
    - ); -} - -function BrokerSubs({subKey}) { - const {mode, state} = useAsyncState(subKey); - - return ( - - broker sub {subKey} on mode {mode} -
    -        {JSON.stringify((state.data ?? []), null, 4)}
    -      
    -
    - ); -} diff --git a/packages/example/src/past/DemoDemo.js b/packages/example/src/past/DemoDemo.js deleted file mode 100644 index 27ad7e72..00000000 --- a/packages/example/src/past/DemoDemo.js +++ /dev/null @@ -1,84 +0,0 @@ -import React from "react"; -import { useAsyncState } from "react-async-states"; -import { demoAsyncStates } from "./Provider"; - -export function Inject() { - useAsyncState({ - initialValue: {}, - key: "hakky-login", - hoistToProvider: true, - producer(props) { - return {...props.lastSuccess.data, [props.args[0]]: props.args[1]}; - } - }); - - return null; -} - - -function getUser(props) { - const controller = new AbortController(); - props.onAbort(() => { - controller.abort() - }); - console.log('props', props.payload.userId); - return fetch(`https://jsonplaceholder.typicode.com/users`, {signal: controller.signal}).then(r => r.json()); -} - - -export default function DemoDemo() { - // const [isPending, startTransition] = React.useTransition(); - const {state: {status, data}, run} = useAsyncState(demoAsyncStates.users); - - console.log(data); - return ( - <> - -
    -
    - { - console.log('onchange, running'); - // startTransition(run); - run(); - }}/> -
    - {status} -
    -
    -        {JSON.stringify(data, null, 4)}
    -      
    - - ); -} - -function timeout(delay, value, cb) { - return new Promise(res => cb(setTimeout(() => res(value), delay))); -} - -function interval(delay, value, cb) { - return new Promise(res => cb(setTimeout(() => res(value), delay))); -} - -function BuilderDemo() { - const {state} = useAsyncState({ - lazy: false, - initialValue: 0, - runEffect: "delay", - runEffectDurationMs: 2000, - selector: s => s.status === "pending" ? "pending..." : JSON.stringify(s.data), - producer: function producer(props) { - let timeoutId; - props.onAbort(() => clearTimeout(timeoutId)); - - return timeout(2000, props.lastSuccess.data + 1, id => timeoutId = id); - }, - }); - - return `state value is: ${state}`; -} - - - - - - diff --git a/packages/example/src/past/EmitDemo.js b/packages/example/src/past/EmitDemo.js deleted file mode 100644 index 0a86ea42..00000000 --- a/packages/example/src/past/EmitDemo.js +++ /dev/null @@ -1,134 +0,0 @@ -import React from "react"; -import { useAsyncState } from "react-async-states"; - - -function remoteProducer(props) { - const state = props.lastSuccess; - const [type, payload] = props.args; - - console.log('running', state, type, payload); - - switch (type) { - case "connect": { - return new Promise((resolve, reject) => { - const ws = new WebSocket("ws://localhost:9090"); - ws.addEventListener("error", (message) => { - reject({error: message}); - }); - ws.addEventListener("open", (message) => { - resolve({ws, messages: [], connected: !!ws}); - }); - ws.addEventListener("message", (message) => { - props.emit(old => ({ - ...old.data, - messages: ([...old.data.messages, { - data: message.data, - sender: "remote" - }]) - })); - }); - props.onAbort(() => ws.close()); - }); - } - case "send": { - state.data.ws.send(payload); - return { - ...state.data, - messages: [...state.data.messages, {data: payload, sender: "me"}] - }; - } - } - return null; -} - -function wsProducer(props) { - const ws = new WebSocket("ws://localhost:9090"); - - return new Promise((res, rej) => { - ws.addEventListener("open", () => res([])); - ws.addEventListener("error", () => props.emit(new Error("error"), "error")); - ws.addEventListener("close", () => rej(new Error("close"))); - props.onAbort(() => ws.close()); - }); -} - -function WsDemo() { - const ref = React.useRef(); - const { - state: {status, data}, - run, - abort - } = useAsyncState.auto(remoteProducer); - return ( -
    -

    Ws demo

    -

    status is {status}

    -

    State value is:
    {JSON.stringify(data ?? [], null, 4)}
    -

    - {status === "error" &&

    State error is:
    {data?.toString()}

    } - -
    - - - -
    - ); -} - -function intervalProducer(props) { - let intervalId = setInterval(() => props.emit(old => old.data + 1), 1000); - props.onAbort(() => clearInterval(intervalId)); - return props.args[0] ?? 0; -} - -function IntervalDemo() { - const {state: {data}, run, abort} = useAsyncState.auto(intervalProducer); - return ( -
    -

    Interval demo

    -

    State value is:
    {JSON.stringify(data ?? [], null, 4)}
    -

    - - -
    - ); -} - -export default function DemoDemo() { - - return ( - <> - -
    - -
    - - - ); -} - -function demoProducer(props) { - props.run("posts"); - console.log('posts state', props.select("posts")); - return null; -} - -function ProducerRunPropsDemo() { - const {state: {data}, run, abort} = useAsyncState.auto(demoProducer); - const {state: postsState} = useAsyncState.lazy("users"); - return ( -
    -

    run effects demo

    -

    State value is:
    {JSON.stringify(data ?? [], null, 4)}

    - -

    posts state value - is:
    {JSON.stringify(postsState ?? {}, null, 4)}
    -

    - - -
    - ); -} diff --git a/packages/example/src/past/LanesDemo.js b/packages/example/src/past/LanesDemo.js deleted file mode 100644 index 0a59fc03..00000000 --- a/packages/example/src/past/LanesDemo.js +++ /dev/null @@ -1,184 +0,0 @@ -import React from "react"; -import { - createSource, - useAsyncState, - AsyncStateProvider, - useRunLane, -} from "react-async-states"; - -function getUserDetails({onAbort, payload: {id}}) { - const controller = new AbortController(); - - onAbort(() => { - controller.abort() - }); - - return fetch( - `https://jsonplaceholder.typicode.com/users/${id}`, - {signal: controller.signal} - ).then(r => r.json()); -} - -const userDetailsSource = createSource( - "user-details", - getUserDetails, - { - cacheConfig: { - enabled: true, - getDeadline: () => 2000, - hash: (_, payload) => payload.id, - load: () => JSON.parse(localStorage.getItem("haha")), - persist: c => localStorage.setItem("haha", JSON.stringify(c)), - } - } -); - -export function LanesDemo() { - const ref = React.useRef(); - const [state, setState] = React.useState([]); - - return ( - - - -
    - -
    - {state.map((userId, i) => )} - - -
    -
    -
    -
    -
    - -
    - ); -} - -function UserDetails({userId}) { - const {state, run} = useAsyncState({ - lazy: false, - lane: userId, - payload: {id: userId}, - source: userDetailsSource, - }) - - return ( -
    -
    - User {userId} details -- status is {state.status} - - -
    -          {JSON.stringify(state, null, 4)}
    -        
    -
    -
    - ); -} - -function UserDetailsRoot() { - const {state} = useAsyncState({ - source: userDetailsSource, - }) - - return ( -
    -
    - User details root state -
    -          {JSON.stringify(state, null, 4)}
    -        
    -
    -
    - ); -} - - -function runProducer(props) { - const {args: [lane]} = props; - - props.run('user-details', {lane}) -} - -async function runpProducer(props) { - const {args: [lane]} = props; - - const result = await props.runp('user-details', {lane}) - return 1; -} - -function PropsRunsDemo() { - const ref = React.useRef(); - - const runLane = useRunLane(); - // const {run} = useAsyncState(runProducer) - // const {run: runp} = useAsyncState(runpProducer) - - - return ( -
    - - - -
    - ); -} - -function countersProducer(props) { - let intervalId = setInterval(() => props.emit(old => old.data + 1), 1000); - props.onAbort(() => clearInterval(intervalId)); - return props.lastSuccess.data; -} - -const countersSource = createSource( - "counters", - countersProducer, - {initialValue: 0}, -); - -export default function LanesIntervalDemo() { - return ( -
    - - - -
    - ); -} - -function CounterSub({counterKey = "default"}) { - const {state: {data}, run, abort} = useAsyncState({ - lane: counterKey, - source: countersSource, - }); - return ( -
    - - - - counter-{counterKey}-{data} - -
    - ); -} diff --git a/packages/example/src/past/Navigation.js b/packages/example/src/past/Navigation.js deleted file mode 100644 index 54a6af6a..00000000 --- a/packages/example/src/past/Navigation.js +++ /dev/null @@ -1,72 +0,0 @@ -import React from "react"; -import { Link } from "react-router-dom"; -import { useAsyncState, useSelector } from "react-async-states"; - -function Resume() { - const {state} = useAsyncState({ - key: "login-form", - selector: state => { - return Object.entries(state.data ?? {}).map(([key, value]) => `${key}=${value}`).join('&'); - } - }) - - return {state}; -} - -const exampleSelector = ({["login-form"]: lf, ["user_input"]: ui}) => { - return [Object.entries(lf?.data ?? {}).map(([key, value]) => `${key}=${value}`).join('&'), ui?.data]; -}; - -function keysSelector() { - return ["login-form", "user_input"]; -} - -function ResumeS() { - const [state, ui] = useSelector(keysSelector, exampleSelector); - - // console.log('________', state, ui) - return {state} - {ui}; -} - -export default function Navigation() { - return ( -
      -
    • - -
    • -
    • - Basique usage -
    • -
    • - Routing -
    • -
    • - Reducers -
    • -
    • - Lanes -
    • -
    • - Standalone -
    • -
    • - Selectors -
    • -
    • - Redux -
    • -
    • - Next -
    • -
    • - Demo -
    • -
    • - Emit -
    • -
    • - Broker -
    • -
    - ); -} diff --git a/packages/example/src/past/NextDemo.js b/packages/example/src/past/NextDemo.js deleted file mode 100644 index 5bb5338b..00000000 --- a/packages/example/src/past/NextDemo.js +++ /dev/null @@ -1,183 +0,0 @@ -import React from "react"; -import { - createSource, - StateBoundary, - useAsyncState -} from "react-async-states"; - -function fetchUser(id) { - return fetch(`https://jsonplaceholder.typicode.com/users`) - .then(s => { - if (Math.random() < 0.5) { - throw new Error('RANDOM ERROR'); - } - if (s.status !== 200) { - throw "user not found"; - } - return s; - }) - .then(s => s.json()); -} - -const user1Source = createSource("user1", () => fetchUser(12)); -const user2Source = createSource("user2", () => fetchUser(2)); -const userPayloadSource = createSource("userPayload", props => fetchUser(props.payload.userId)); - -function timeout(delay) { - return new Promise(res => { - setTimeout(res, delay) - }); -} - -const usersList = createSource("global", () => timeout(400).then(() => fetchUser(11))) - -export default function Demo() { - return ( - - ); -} - -function Log({alias}) { - console.log('async state component child', alias) - return null -} - -function Error({state, run}) { - console.log('state ERROR COMPO', state) - return ( - - ); -} - -function Loading({state: {status}, abort, run}) { - if (status === "aborted") { - return ; - } - return ; -} - -function UsersList() { - const result = useAsyncState(usersList); - const {state, run} = result; - - console.log('LIST', result.state) - return
    - -
    {JSON.stringify(state.data, null, 4)}
    -
    -} - -function NextDemo() { - return <> - - {(state) => ( -
    - success! - {JSON.stringify(state, null, 2)} -
    - )} -
    - ; -} - -let debounceIndex = 0; -let ThrottleIndex = 0; - -function producer(props) { - let timeoutId; - props.onAbort(() => !console.log('clearing timeout') && clearTimeout(timeoutId)); - return new Promise(res => timeoutId = setTimeout(() => !console.log('invoking producer!', props.args[0]) && res(props.args[0]), 200)); -} - -function RunEffectsDemo() { - - const { - run: runDebounced, - state: {status: debouncedRunning, data: debounceIndexState} - } = useAsyncState({ - producer, - initialValue: 0, - runEffect: "delay", - runEffectDurationMs: 1000 - }); - const { - run: runThrottled, - state: {status: throttledRunning, data: throttleIndexState} - } = useAsyncState({ - producer, - initialValue: 0, - runEffect: "throttle", - runEffectDurationMs: 2000 - }); - - - return ( -
    - - -
    - ); -} - - -function TearingDemo() { - - return ( - <> - - - - - - ); -} - -function tearingProducer(props) { - return new Promise((resolve, reject) => { - function listener(e) { - props.emit({x: e.clientX, y: e.clientY}); - } - - document.addEventListener("mousemove", listener); - props.onAbort(() => document.removeEventListener("mousemove", listener)); - - resolve({x: 0, y: 0}); - }); -} - -function TearingExample({title}) { - const {state: {data}} = useAsyncState.auto(tearingProducer); - const {state: {data: data2}} = useAsyncState.auto(tearingProducer); - const {state: {data: data3}} = useAsyncState.auto(tearingProducer); - const {state: {data: data4}} = useAsyncState.auto(tearingProducer); - const different = data?.x !== data2?.x || data?.y !== data2?.y - || data?.x !== data3?.x || data?.y !== data3?.y || - data?.x !== data4?.x || data?.y !== data4?.y; - - return ( -
    - {different &&

    ____SEE HERE____

    } -

    Tearing example: {title}

    -
    -        {JSON.stringify((data ?? {}), null, 4)}
    -      
    -
    -
    - ); -} diff --git a/packages/example/src/past/Provider.js b/packages/example/src/past/Provider.js deleted file mode 100644 index f04ddf34..00000000 --- a/packages/example/src/past/Provider.js +++ /dev/null @@ -1,94 +0,0 @@ -import React from "react"; -import { useLocation } from "react-router-dom"; -import { AsyncStateProvider, createSource } from 'react-async-states'; -import { - getUserProducer, - postsProducer, - timeoutProducer, - usersProducer -} from "./producers"; - -export const demoAsyncStates = { - timeout: {key: "timeout", producer: timeoutProducer(4000)}, - - users: createSource("users", usersProducer, { - runEffect: "throttle", - runEffectDurationMs: 3000, - skipPendingDelayMs: 300, - cacheConfig: { - enabled: false, - hash(args, payload) { - return "users"; - }, - getDeadline: () => 50000, - load() { - return JSON.parse(localStorage.getItem("users-cache")); - }, - persist(st) { - localStorage.setItem("users-cache", JSON.stringify(st)); - } - } - }), - - posts: { - key: "posts", - producer: postsProducer, - config: { - cacheConfig: { - enabled: true, - hash(args, payload) { - return "posts"; - }, - getDeadline: () => 50000, - load() { - return new Promise((res) => { - setTimeout(() => { - res(JSON.parse(localStorage.getItem("posts-cache"))) - }, 5000) - }); - }, - persist(st) { - localStorage.setItem("posts-cache", JSON.stringify(st)); - } - } - } - }, - - getUser: { - key: "get-user", - producer: getUserProducer, - config: { - skipPendingDelayMs: 400, - cacheConfig: { - enabled: false, - hash(args, payload) { - return `user-${payload?.matchParams?.userId}`; - }, - getDeadline: () => 1000 * 60 * 5, - load() { - // console.log('loading users cache!', JSON.parse(localStorage.getItem("users-cache"))); - return JSON.parse(localStorage.getItem("users-cache")); - }, - persist(st) { - // console.log('saving users cache!', st); - localStorage.setItem("users-cache", JSON.stringify(st)); - } - }, - } - }, -} -export const asyncStatesDemo = Object.values(demoAsyncStates); - -export default function DemoProvider({children}) { - const location = useLocation(); - - const payload = React.useMemo(function getPayload() { - return {location}; - }, [location]); - - return ( - - {children} - - ); -} diff --git a/packages/example/src/past/ReducersDemo.js b/packages/example/src/past/ReducersDemo.js deleted file mode 100644 index 83177618..00000000 --- a/packages/example/src/past/ReducersDemo.js +++ /dev/null @@ -1,72 +0,0 @@ -import React from "react"; -import { useAsyncState } from "react-async-states"; -import { demoAsyncStates } from "./Provider"; - -function Wrapper({children, initialValue = true}) { - const [visible, setVisible] = React.useState(initialValue); - return ( - - -
    - {visible && children} -
    - ); -} - -function TimeoutSubscription({ mode }) { - const {state: {status}, key, run} = useAsyncState[mode](demoAsyncStates.timeout.key); - - return ( -
    - {`${status}-${key}`} - -
    - ); -} - -export default function Demo() { - - return ( - <> - - - - - - - -
    -
    -
    -
    -
    -
    -
    -
    -
    - waiting demo -

    - - - - -

    -
    - - ); -} - -function WaitingDemo() { - const {key, state, run, mode} = useAsyncState({key: "waiting_demo", selector: s => s.data}); - - return - {mode+" waiting for state: " + key + " , " + JSON.stringify(state ?? {})} - - ; -} - -function WaitingHoister() { - const {state} = useAsyncState({key: "waiting_demo", hoistToProvider: true, initialValue: "haha", producer: props => props.args[0] ?? 5}); - - return "hoister:" + JSON.stringify(state); -} diff --git a/packages/example/src/past/ReduxDemo.js b/packages/example/src/past/ReduxDemo.js deleted file mode 100644 index 69f8a687..00000000 --- a/packages/example/src/past/ReduxDemo.js +++ /dev/null @@ -1,63 +0,0 @@ -import React from "react"; -import { createSource, useAsyncState } from "react-async-states"; - -function* reduxProducer(props) { - yield props.lastSuccess.data.store.dispatch(...props.args, props); - return props.lastSuccess.data; -} - -const initialRedux = {}; // createReduxStore(reducers, middlewares...); -const reduxSource = createSource("redux", reduxProducer, {initialValue: initialRedux}); - -export default function Demo() { - - return ( - <> - -
    -
    -
    -
    -
    - - - ); -} - -function useBetterSimpleState(config, deps) { - const asyncState = useAsyncState(config, deps); - return [asyncState.state, asyncState.run]; -} - -function DemoDemo() { - const {state: {status}, lastSuccess: {data: lastSuccessData}, run} = useAsyncState({ - key: "some-name", - hoistToProvider: true, - producer: (props) => { // ./producers.js but works as inline - const controller = new AbortController(); - const {signal} = controller; - props.onAbort(() => controller.abort()); - return fetch(`https://jsonplaceholder.typicode.com/users/${props.args[0]}`, {signal}).then(res => res.json()) - }, - }); - - return
    - {status === "pending" && "loading..."} - {status !== "error" &&
    user is:
    {lastSuccessData?.id}
    } - -
    -} - -function DemoDemoSUb() { - const {state: username, lastSuccess, run} = useAsyncState({ - key: "some-name", - selector: s => s.data?.name, - }); - - return ( -
    - name is: {username} - -
    - ); -} diff --git a/packages/example/src/past/ReplaceStateDemo.js b/packages/example/src/past/ReplaceStateDemo.js deleted file mode 100644 index 64150e3a..00000000 --- a/packages/example/src/past/ReplaceStateDemo.js +++ /dev/null @@ -1,42 +0,0 @@ -import React from "react"; -import { useAsyncState } from "react-async-states"; - -function producerA(props) { - const {userId} = props.payload; - console.log('producerA is running', userId, props); - return props.runp(producerB, null, userId).then(t => t.data); -} - -function producerB(props) { - const [id] = props.args; - console.log('producerC is running', id, props); - let emitCount = 0; - props.onAbort( - props.run(function anotherProducer(otherProps) { - let itId = setInterval(() => { - if (emitCount < 5) { - emitCount += 1; - otherProps.onAbort( - otherProps.run("counter", null, old => (old.data ?? 0) + 1) - ); - } - }, 1000); - otherProps.onAbort(() => clearInterval(itId)); - }) - ); - return fetch("https://jsonplaceholder.typicode.com/users/" + id).then(res => res.json()); -} - -export default function Demo() { - const {state, abort, run} = useAsyncState.auto({producer: producerA, payload: {userId: 1}}); - console.log('state#####', state); - return ( -
    - - -
    {JSON.stringify(state, null, 2)}
    -
    - ); -} diff --git a/packages/example/src/past/RoutingDemo.js b/packages/example/src/past/RoutingDemo.js deleted file mode 100644 index 94e8343a..00000000 --- a/packages/example/src/past/RoutingDemo.js +++ /dev/null @@ -1,106 +0,0 @@ -import React from "react"; -import { useNavigate, useParams } from "react-router-dom"; -import { useAsyncState } from "react-async-states"; -import { demoAsyncStates } from "./Provider"; - -export default function Demo() { - const ref = React.useRef(); - const navigate = useNavigate(); - const params = useParams(); - - const { - mode, - uniqueId, - state: {status, data}, - abort - } = useAsyncState({ - fork: true, - subscriptionKey: "hahaha", - lazy: false, - payload: {matchParams: params}, - key: demoAsyncStates.getUser.key, - // this function does not depend on render and may be static - selector(current, lastSuccess, cache) { - if (cache?.[`user-${params.userId}`]) { - return cache[`user-${params.userId}`].state; - } - return current; - }, - // this object does not depend on render and may be static - // cacheConfig: { - // enabled: false, - // getDeadline: state => state.data?.maxAge || 5000, - // load: () => JSON.parse(localStorage.getItem("users-cache-demo")), - // hash: (args, payload) => `user-${payload?.matchParams?.userId}`, - // persist: cache => localStorage.setItem("users-cache-demo", JSON.stringify(cache)) - // }, - // this function does not depend on render and may be static - events: { - // subscribe({getState, run}) { - // const state = getState(); - // if (!state || state.status === "pending") { - // return; - // } - // const onFocus = () => run(); - // window.addEventListener("focus", onFocus); - // return () => window.removeEventListener("focus", onFocus); - // }, - change({state}) { - console.log("state changed!____________", state) - } - } - }, [params]); - - console.log('render', mode, uniqueId) - - function onSubmit(e) { - e.preventDefault(); - navigate(`/users/${ref.current.value}`) - } - - return ( -
    -
    - -
    - <> - {status === "pending" && ( - <> - - Loading... - - )} - - - -
    -          
    - {JSON.stringify(data, null, " ")} -
    -
    -
    -
    - ); -} - -let id = 1; - -function next() { - return ++id; -} - -function SourceForkExample({source}) { - const data = useAsyncState({ - lazy: false, - source, - subscriptionKey: `SourceForkExample-${source?.key}-SELF`, - payload: {userId: id}, - fork: true, - forkConfig: {key: `SourceForkExample-${source?.key}`} - }); - return ; -} diff --git a/packages/example/src/past/SelectorsDemo.js b/packages/example/src/past/SelectorsDemo.js deleted file mode 100644 index c2d06c4c..00000000 --- a/packages/example/src/past/SelectorsDemo.js +++ /dev/null @@ -1,111 +0,0 @@ -import React from "react"; -import { - useAsyncState, - useSelector -} from "react-async-states"; - -function reducer(old, name, value) { - // console.log('running', name, value); - return {...old, [name]: value}; -} -function createReducerProducer(reducerFn) { - if (typeof reducerFn !== "function") { - throw new Error( - `Reducer producer creator expects reducerFn to be a function.` + - ` received ${typeof reducerFn}` - ); - } - return function reducer(props) { - return reducerFn( - props.lastSuccess.data, - ...props.args - ); - } -} -const size = 5; -export default function Demo() { - // console.log('___________APP_____________') - // React.useEffect(() => { - // console.log('---------App effect----------') - // return () => console.log('----------App cleanup------------') - // }) - useAsyncState({ - lazy: true, - key: "login-form", - hoistToProvider: true, - initialValue: {hello: "world!"}, - producer: createReducerProducer(reducer), - }); - - return ( -
    -

    This is a controlled dynamic form of size: {size}

    - -
    - {/*
    */} - {/*

    Function selector

    */} - {/* */} - {/*
    */} -
    - ); -} - -function keysSelector(allKeys) { - return allKeys.filter(key => key.match(new RegExp('timeout|login-form', 'g'))); -} - -function selectorFunctionDemo(states) { - // console.log('function selector, from', states); - return states; -} - -function FunctionSelectorDemo() { - const t = useSelector(keysSelector, selectorFunctionDemo); - - return
    {JSON.stringify(t, null, "    ")}
    ; -} - - -function DynamicForm({initialSize}) { - const name = React.useRef(); - - const [fields, setFields] = React.useState(() => [...Array(initialSize).keys()].map(t => ({name: `name_${t}`}))); - // console.log('___________________dynamic form____________________') - return ( -
    -
    - {fields.map(field => )} -
    -
    - - -
    - ) -} - -function Input({name}) { - const {mode, state, run, uniqueId} = useAsyncState - .lazy({ - key: "login-form", - selector: s => s.data[name] - }, [name]); - - React.useEffect(() => run(name, "init_" + name), []) - - const data = state; // .data[name]; - - // console.log('____________INPUT_____ss_______', name, data, uniqueId, mode) - return ( run(name, value)} - />); -} - -const RealInput = React.memo(Input, () => true); diff --git a/packages/example/src/past/StandaloneDemo.js b/packages/example/src/past/StandaloneDemo.js deleted file mode 100644 index e9dfc900..00000000 --- a/packages/example/src/past/StandaloneDemo.js +++ /dev/null @@ -1,50 +0,0 @@ -import React from "react"; -import { useProducer, useAsyncState } from "react-async-states"; -import { usersProducer } from "./producers"; - -export default function Demo() { - return ( -
    -

    Anonymous example

    -
    -
    - ); -} - -function SourceExample() { - const {key, state: {status, data}, run, abort} = useProducer(usersProducer); - - return ( -
    - key: {key}
    - status: {status}
    -
    -
    - data: {JSON.stringify(data, null, " ")}
    -
    - -
    - ); -} - -let producer = function(props) { - console.log('running', props.payload, ...props.args); - return props.args[0]; -}; - -function NewDemo() { - const [userId, setUserId] = React.useState("0"); - const {state, run, abort, replay} = useAsyncState({producer, payload: {userId}}, [userId]); - - - return ( -
    - setUserId(e.target.value)} value={userId} /> - - - - {state.status === "pending" && } - status is: {state.status} -
    - ); -} diff --git a/packages/example/src/past/Subscription.js b/packages/example/src/past/Subscription.js deleted file mode 100644 index f38ca4a5..00000000 --- a/packages/example/src/past/Subscription.js +++ /dev/null @@ -1,144 +0,0 @@ -import React from "react"; -import { isEqual } from "lodash"; -import { useAsyncState, useSelector, AsyncStateProvider } from 'react-async-states'; -import { asyncStatesDemo } from "./Provider"; - - -function timeout(delay, ...resolveValues) { - return new Promise(resolve => setTimeout(() => resolve(...resolveValues), delay)); -} - -function curriedTimeout(delay) { - return function curryImpl(...args) { - return timeout(delay, ...args); - } -} - -export function Subscription({asyncStateConfig}) { - - const {state, run, abort} = useAsyncState(asyncStateConfig, []); - - return ( - -
    - {state.status === "pending" && - } -
    -        {state.status}
    -      
    - {asyncStateConfig?.fork && "THIS IS A FORK"} -
    - ); -} - -function usersSelector(usersState, postsState) { - if (!usersState || !postsState || usersState.status === "pending" || postsState.status === "pending") { - return undefined; - } - let user = usersState?.data?.find?.(t => t.id = 1); - let posts = postsState?.data?.find?.(t => t.userId = 1); - if (user && posts) { - return {...user, posts} - } - return undefined; -} - -function SelectorDemo() { - const selectedValue = useSelector(["users", "posts"], usersSelector, isEqual); - - return
    SELECTOR - VALUE:
    {JSON.stringify(selectedValue ?? {}, null, "  ")}
    -} - -export default function Wrapper() { - return ( - - {/*
    */} - {/**/} - {/**/} - {/**/} - {/*
    */} - {/*
    */} - - {/**/} -
    - - ); -} - - -const undefinedProducer = { - initialValue: "", - hoistToProvider: true, - key: "undefined_producer", -}; - -function ReplaceStateOriginal() { - const { - key, - version, - setState, - state: {data} - } = useAsyncState(undefinedProducer, []); - - return ( - <> -

    {version}-{data}

    - setState(e.target.value)}/> - - ); -} - -function ReplaceStateListener() { - const {state: {status, data}} = useAsyncState(undefinedProducer.key, []); - - return ( - <> -

    {status}-{data}

    - - ); -} - - -const reducerProducer = { - key: "reducer_producer", - hoistToProvider: false, - producer(props) { - const {args: [userInput]} = props; - if (userInput > 10) { - return "OK good!"; - } - return "KO !!" - }, - lazy: false -}; - -function ReducerDemo() { - const inputRef = React.useRef(); - const {state: {status, data}, run} = useAsyncState(reducerProducer, []); - - return ( -
    - {status}-{data} - - -
    - ); -} diff --git a/packages/example/src/past/bug.js b/packages/example/src/past/bug.js deleted file mode 100644 index 1033be77..00000000 --- a/packages/example/src/past/bug.js +++ /dev/null @@ -1,110 +0,0 @@ -import React from "react"; -import { useAsyncState, AsyncStateProvider } from "react-async-states"; - -function timeout(delay, resolveValue, setTimeoutId) { - return new Promise(function resolver(resolve) { - setTimeoutId( - setTimeout(() => { - resolve(resolveValue); - }, delay) - ); - }); -} - -function* doSomething(props) { - const searchValue = props.args[0]; - const delay = !searchValue ? 0 : 3000 / searchValue.length; - let timeoutId = null; - props.onAbort(() => clearTimeout(timeoutId)); - - const returnValue = yield timeout(delay, searchValue, (id) => { - timeoutId = id; - }); - yield props.payload.onSuccess(); - - return returnValue; -} - -function randomInt(min = 0, max = 255) { - return Math.floor(Math.random() * (max - min + 1) + min); -} - -function randomColor() { - return `rgb(${randomInt()}, ${randomInt()},${randomInt()})`; -} - -function AppWrapped() { - const { - state: { status, data, props }, - abort, - run - } = useAsyncState.hoist({ - producer: doSomething, - key: "do-something", - payload: { - onSuccess() { - document.body.style.backgroundColor = randomColor(); - } - } - }); - const { - state, - replaceState - } = useAsyncState({ key: "do-something" }); - - if (!state) { - return "waiting!"; - } - - const { data: value } = state; - - return ( -
    - replaceState(e.target.value)} - placeholder="type something---" - /> -
    - run(e.target.value)} - placeholder="type something" - /> -
    -

    Search value: {JSON.stringify(props?.args?.[0])}

    -
    -

    status: {status}

    - {status === "pending" && ( - - )} - {status === "aborted" && ( - - )} -

    Data: {data}

    -
    - ); -} - -const empty_array = []; -export default function App() { - return ( - - - - - ); -} - -function SomethingElse() { - const { lastSuccess } = useAsyncState("do-something"); - - return ( -
    -
    -
    -
    {JSON.stringify(lastSuccess, null, "  ")}
    -
    - ); -} diff --git a/packages/example/src/past/index.js b/packages/example/src/past/index.js deleted file mode 100644 index 5cf19674..00000000 --- a/packages/example/src/past/index.js +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom' - -import './index.css' -import App from './App'; - -// ReactDOM.createRoot(document.getElementById('root')).render(); -ReactDOM.render(, document.getElementById('root')); diff --git a/packages/example/src/past/producers.js b/packages/example/src/past/producers.js deleted file mode 100644 index 2c325493..00000000 --- a/packages/example/src/past/producers.js +++ /dev/null @@ -1,57 +0,0 @@ -export function timeoutProducer(delay = 2000) { - return function delayed(props) { - let timeoutId; - props.onAbort(function cancelTimeout() { - clearTimeout(timeoutId); - }); - - return new Promise(function delayed(resolve) { - timeoutId = setTimeout(function timeouted() { - console.log(`timeout of delay '${delay}' has collapsed!`) - return resolve(); - }, delay); - }); - } -} - -// function returns state value -// props - -export function* usersProducer(props) { - const controller = new AbortController(); - const {signal} = controller; - let timeoutId; - props.onAbort(function abortSignal() { - clearTimeout(timeoutId); - controller.abort(); - }); - - return yield new Promise(res => timeoutId = setTimeout(res, 0)) - .then(() => fetch('https://jsonplaceholder.typicode.com/users', {signal}) - .then(res => res.json())); -} - -export function postsProducer(props) { - const controller = new AbortController(); - const {signal} = controller; - props.onAbort(function abortSignal() { - controller.abort(); - }); - - return fetch('https://jsonplaceholder.typicode.com/posts', {signal}) - .then(res => res.json()); -} - -export function getUserProducer(props) { - const controller = new AbortController(); - const {signal} = controller; - props.onAbort(function abortSignal() { - controller.abort(); - }); - - return fetch(`https://jsonplaceholder.typicode.com/users/${props.payload?.matchParams?.userId}`, {signal}) - .then(res => res.json()); -} - -export function reducerDemo() { -} diff --git a/packages/example/src/past/v2/App.js b/packages/example/src/past/v2/App.js deleted file mode 100644 index 330b898e..00000000 --- a/packages/example/src/past/v2/App.js +++ /dev/null @@ -1,28 +0,0 @@ -import React from "react"; -import { BrowserRouter as Router, Link, Route, Routes } from "react-router-dom"; -import DemoProvider from "./core/AsyncStateProvider"; -import UsersPage, { UserDetailsPage } from "./domain/users"; - -export default function App() { - return ( - - -
    -
      -
    • - Users list -
    • -
    • - User details -
    • -
    -
    - - } /> - } /> - -
    -
    -
    - ); -} diff --git a/packages/example/src/past/v2/Bug.js b/packages/example/src/past/v2/Bug.js deleted file mode 100644 index b153bbab..00000000 --- a/packages/example/src/past/v2/Bug.js +++ /dev/null @@ -1,89 +0,0 @@ -import { - AsyncStateProvider, - createSource, - useAsyncState -} from "react-async-states"; -import React from "react"; - -function load() { - if (typeof window !== "undefined" && typeof window.localStorage !== "undefined") { - console.log('loading', localStorage?.getItem("remix-cache-users")); - return localStorage.getItem("remix-cache-users"); - } -} - -function persist(cache) { - console.log('persisting!!', cache); - if (typeof window !== "undefined" && typeof window.localStorage !== "undefined") { - localStorage?.setItem("remix-cache-users", JSON.stringify(cache)) - } -} - -const timeout = createSource( - 'timeout', - producer, - { - cacheConfig: { - load, - persist, - enabled: true, - hash: () => !console.log('hashing') && "users", - getDeadline: () => 5000, - } - }); - - -function usersProducer(props) { - const controller = new AbortController(); - const {signal} = controller; - props.onAbort(function abortSignal() { - controller.abort(); - }); - return fetch('https://jsonplaceholder.typicode.com/users', {signal}) - .then(res => res.json()) -} - - -function producer(props) { - return new Promise(res => { - let id = setTimeout(() => res("12"), 2000); - props.onAbort(() => clearInterval(id)); - }); -} - -export default function Index() { - return ( - - ); -} - -function Test() { - const {run, mode, state, source} = useAsyncState.auto({ - key: "users", - skipPendingDelayMs: 500, - hoistToProvider: true, - hoistToProviderConfig: {}, - producer(props) { - return fetch(`https://jsonplaceholder.typicode.com/users`) - .then(s => { - if (s.status !== 200) { - throw "user not found"; - } - return s; - }) - .then(s => s.json()); - }, - }); - - console.log(mode, state?.status, source?.uniqueId); - return ( -
    - -
    -
    -          {JSON.stringify(state, null, 4)}
    -        
    -
    -
    - ); -} diff --git a/packages/example/src/past/v2/Bug2.js b/packages/example/src/past/v2/Bug2.js deleted file mode 100644 index 4235261e..00000000 --- a/packages/example/src/past/v2/Bug2.js +++ /dev/null @@ -1,202 +0,0 @@ -import React from "react"; -import { - AsyncStateProvider, - useAsyncState, - useSelector, -} from "react-async-states"; - -function Wrapper({children, initialValue = false}) { - const [mounted, setMounted] = React.useState(initialValue); - - - return ( -
    - - - {mounted && children} -
    - ); -} - -let meter = 0; - -function newOne(key) { - return { - key, - config: { - initialValue: key.length, - } - }; -} - -export default function App() { - const inputRef = React.useRef(); - const [asyncStates, setAsyncStates] = React.useState({}); - - function onClick() { - if (inputRef.current?.value) { - setAsyncStates(old => ({ - ...old, - [inputRef.current.value]: newOne(inputRef.current.value) - })) - } - } - - return ( - <> -
    - - -
    - - - - - - {Object.keys(asyncStates).map((t, i) => )} -
    - {/**/} - {/**/} -
    -
    - {/**/} -
    -
    - - - - {/**/} - -
    -
    - - ); -} - -function Father() { - const {mode, state, uniqueId, run} = useAsyncState({ - key: "counter", - initialValue: 0, - hoistToProvider: true - }); - return ; -} - -function Sibling() { - const {run, mode, state, uniqueId} = useAsyncState("counter"); - return ( - - ); -} - -function HoistSomething() { - useAsyncState.hoist({ - key: "atyuu", - initialValue: 15, - }) - return "I did hoist something"; -} - -function DynamicSubscribe() { - const inputRef = React.useRef(); - const [asyncStates, setAsyncStates] = React.useState([]); - - function onClick() { - if (inputRef.current?.value) { - setAsyncStates(old => ([...old, inputRef.current?.value])) - } - } - - return ( -
    - - -
    -
    -
    - {asyncStates.map((t, i) => )} -
    -
    - ); -} - -function SimpleSub({subKey}) { - const {mode, state, run} = useAsyncState({ - key: subKey, - selector: t => ({...t}) - }, [subKey]); - - function onClick() { - run(old => old.data + 1) - } - - return ( -

    - -

    - ) -} - -function selectAll(all) { - return all; -} - -function EveryThingInsideProvider() { - const everything = useSelector(() => "counter"); - - - return ( -
      - {Object.entries(everything).map(([key, state], i) => ( -
    • -
      {key} - {state?.data}
      -
    • - ))} -
    - ) -} - -function SubscribeToWithInput() { - const [key, setKey] = React.useState(''); - const result = useAsyncState(key, [key]) - console.log('result', result.mode, result.uniqueId, result.state); - - return ( -
    -
    -
    - setKey(e.target.value)}/> -
    -
    {JSON.stringify(result, null, 4)}
    -
    -
    - -
    - ); -} - -function id(allIds) { - return allIds.filter(t => t.startsWith("a")); -} - - -function SelectorV2Example() { - - return ( -
    -
    -        {JSON.stringify(useSelector(id), null, 4)}
    -      
    -
    - ); -} diff --git a/packages/example/src/past/v2/Bug3.js b/packages/example/src/past/v2/Bug3.js deleted file mode 100644 index 45a16e55..00000000 --- a/packages/example/src/past/v2/Bug3.js +++ /dev/null @@ -1,125 +0,0 @@ -import axios from "axios"; -import { Routes, Route, BrowserRouter as Router } from "react-router-dom"; -import AsyncStateBoundary from "./suspense/abstraction"; -import React from "react"; -import { - createSource, - useAsyncState, -} from "react-async-states"; -import SuspenseComponentTest from "./suspense"; -import SuspenseComponent2Test from "./suspense/index2"; -import SuspenseComponentNestedTest from "./suspense/index-nested"; - -const API = axios.create({ - baseURL: "https://jsonplaceholder.typicode.com" -}); - - -async function fetchUser(props) { - const controller = new AbortController(); - props.onAbort(() => { - controller.abort() - }); - - const [id] = props.args; - - const userId = id ?? 1; - - // let timeoutId; - // await new Promise((res) => {timeoutId = setTimeout(res, 500)}) - // props.onAbort(() => clearTimeout(timeoutId)) - - const promise = API.get("/users/" + userId, { - signal: controller.signal - }); - // debugger; - const usersResponse = await promise; - return usersResponse.data; -} - -const source = createSource("source", fetchUser, {resetStateOnDispose: false}); -source.run() - -const source2 = createSource("source2", fetchUser, {resetStateOnDispose: false}); -source2.run(2); - -const sourceNested = createSource("sourceNested", fetchUser, {resetStateOnDispose: false}); -sourceNested.run(3); - -function DebouncedSpinner() { - const [mounted, setMounted] = React.useState(true); - - React.useEffect(() => { - const id = setTimeout(() => setMounted(true), 400); - return () => clearTimeout(id); - }, []) - - - if (mounted) { - return "Loading..."; - } - return null; -} - -export default function App() { - return ( - - - } config={source}> - - - }/> - } config={source2}> - - - }> - } config={sourceNested}> - - - }/> - - - - ); -} - - -function Subscription() { - const [userId, setUserId] = React.useState(""); - const {read, state, mode, uniqueId} = useAsyncState( - { - source, - lazy: false, - condition: !!userId, - // runEffect: "debounce", - // runEffectDurationMs: 400, - payload: { - userId - } - }, - [userId] - ); - console.log('render!!', mode, uniqueId) - const {status, data, props} = read(); - - return ( -
    - setUserId(e.target.value)}/> -

    Status is: {status}

    - {status === "success" && ( -
    -
    {JSON.stringify(data, null, 4)}
    -
    - )} - {status === "error" && ( -
    - error while retrieving user with id: {props?.payload.userId} -
    {data.toString()}
    -
    - )} -
    - ); -} diff --git a/packages/example/src/past/v2/core/AsyncStateProvider.js b/packages/example/src/past/v2/core/AsyncStateProvider.js deleted file mode 100644 index c0da72ba..00000000 --- a/packages/example/src/past/v2/core/AsyncStateProvider.js +++ /dev/null @@ -1,22 +0,0 @@ -import React from "react"; -import { useLocation } from "react-router-dom"; -import { AsyncStateProvider } from 'react-async-states'; -import { DOMAIN_USER_PRODUCERS } from "../domain/users/producers"; -import { parseSearch } from "../shared/utils"; - -const staticProducers = Object.freeze({...DOMAIN_USER_PRODUCERS}); - -export default function DemoProvider({children}) { - const location = useLocation(); - const payload = React.useMemo(function getPayload() { - return { - queryString: parseSearch(location.search) - }; - }, [location]); - - return ( - - {children} - - ); -} diff --git a/packages/example/src/past/v2/domain/posts/api.js b/packages/example/src/past/v2/domain/posts/api.js deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/example/src/past/v2/domain/posts/index.js b/packages/example/src/past/v2/domain/posts/index.js deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/example/src/past/v2/domain/posts/promises.js b/packages/example/src/past/v2/domain/posts/promises.js deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/example/src/past/v2/domain/posts/selectors.js b/packages/example/src/past/v2/domain/posts/selectors.js deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/example/src/past/v2/domain/users/api.js b/packages/example/src/past/v2/domain/users/api.js deleted file mode 100644 index dda80a6d..00000000 --- a/packages/example/src/past/v2/domain/users/api.js +++ /dev/null @@ -1,13 +0,0 @@ -import { API_JPH, readData } from "../../shared/utils"; - -export function fetchUserData(userId, params) { - return API_JPH.get(`/users/${userId}`, params).then(readData); -} - -export function fetchUsersList(params) { - return API_JPH.get("/users", params).then(readData); -} - -export function fetchUserPosts(userId, params) { - return API_JPH.get(`/users/${userId}/posts`, params).then(readData); -} diff --git a/packages/example/src/past/v2/domain/users/index.js b/packages/example/src/past/v2/domain/users/index.js deleted file mode 100644 index 92aa3c37..00000000 --- a/packages/example/src/past/v2/domain/users/index.js +++ /dev/null @@ -1,186 +0,0 @@ -import React from "react"; -import { useNavigate, useLocation, useParams } from "react-router-dom"; -import { useAsyncState } from "react-async-states"; -import { DOMAIN_USER_PRODUCERS } from "./producers"; -import { parseSearch, readFormValues } from "../../shared/utils"; - -export default function UsersPage() { - const navigate = useNavigate(); - const search = useLocation().search; - const queryString = parseSearch(search); - const {state: {status, data}, run, abort} = useAsyncState.auto(DOMAIN_USER_PRODUCERS.list.key, [search]); - - function onSubmit(e) { - e.preventDefault(); - - const values = readFormValues(e.target); - navigate("?" + Object.entries(values) - .map(([key, value]) => `${key}=${value}`) - .join("&") - ); - } - - return ( -
    -
    -
    - - - - -
    -
    -

    Users List

    {status === "pending" && ...} - {status !== "pending" && } - {status === "success" && ( -
    - {!data.length && "No results!"} -
      - {data.map(user =>
    • {user.id}-{user.name}-{user.email}
    • )} -
    -
    - )} - {status === "error" &&
    - -
    } -
    - ); -} - -export function UserDetailsPage() { - return ( -
    - -
    - ); -} - -function UserDetailsPageImpl() { - - const navigate = useNavigate(); - const matchParams = useParams(); - - const {state, abort, run} = useAsyncState.auto({ - source: DOMAIN_USER_PRODUCERS.details, - payload: { - userId: matchParams.userId - } - }, [matchParams.userId]); - - function onSubmit(e) { - e.preventDefault(); - - const values = readFormValues(e.target); - navigate(`/users/${values.id}`); - } - - return ( -
    -
    -
    - - -
    -
    -

    Users details

    {state?.status === "pending" && ...} - {state?.status !== "pending" && } - {state?.status === "success" && ( -
    - {!state.data && "No results!"} -
    -            {JSON.stringify(state.data, null, "  ")}
    -          
    -
    - )} - {state?.status === "error" && (
    - -
    -            {JSON.stringify(state?.data, null, "  ")}
    -          
    -
    )} -
    - ); -} - -function UserDetailsPageImpl2() { - const {state: {status, data}, abort, run, mergePayload} = useAsyncState.fork(DOMAIN_USER_PRODUCERS.details); - - function onSubmit(e) { - e.preventDefault(); - - const {id: userId} = readFormValues(e.target); - mergePayload({userId}) - run(); - } - - return ( -
    -
    -
    - - -
    -
    -

    Users details

    {status === "pending" && ...} - {status !== "pending" && } - {status === "success" && ( -
    - {!data && "No results!"} -
    -            {JSON.stringify(data, null, "  ")}
    -          
    -
    - )} - {status === "error" && (
    - -
    -            Error: {typeof data === "string" ? data : JSON.stringify(data, null, 4)}
    -          
    -
    )} -
    - ); -} - -// string, object(), source, object(source), producer function (generator, async await, function returnning anything, sync or astync) - -// const { -// key, -// source, -// -// state, // selector return -// run, -// lastSuccess, -// payload, -// -// abort, -// replaceState, -// mergePayload, -// -// } = useAsyncState({ -// source: null, -// key: "my-key", -// initialValue: 0, // value or function -// -// payload: {}, -// hoistToProvider: true, -// hoistToProviderConfig: {override: false}, -// fork: true, -// forkConfig: {keepState: true, key: "new-key"}, -// -// selector: (s, lastSu) => [], -// areEqual: (prev, next) => true, -// -// producer (props) {} -// }, []); -// -// const props = { -// payload, // combined, __provider__.select/run, principal, queryString, pathname, onSuccess -// -// aborted: false, -// onAbort: cb => cb, -// abort() {}, -// -// args: [], -// lastSuccess: {status, data, props}, -// } diff --git a/packages/example/src/past/v2/domain/users/producers.js b/packages/example/src/past/v2/domain/users/producers.js deleted file mode 100644 index d3b82fae..00000000 --- a/packages/example/src/past/v2/domain/users/producers.js +++ /dev/null @@ -1,47 +0,0 @@ -import { fetchUserData, fetchUserPosts, fetchUsersList } from "./api"; -import { bindAbortAndCancelToken, omitSearchParams } from "../../shared/utils"; -import { createSource } from "react-async-states"; - -export function* getCurrentUser(props) { - const cancelToken = bindAbortAndCancelToken(props); - - return yield fetchUserData(props.payload.userId, {cancelToken}); -} - -export function getUserDetails(props) { - if (!props.payload.userId) { - throw "userId is required"; - } - const cancelToken = bindAbortAndCancelToken(props); - - return fetchUserData(props.payload.userId, {cancelToken}); -} - -export function* getUsersList(props) { - const cancelToken = bindAbortAndCancelToken(props); - - return yield fetchUsersList({params: omitSearchParams(props.payload.queryString), cancelToken}); -} - -export function* getUserPosts(props) { - const cancelToken = bindAbortAndCancelToken(props); - - return yield fetchUserPosts(props.payload.userId, {cancelToken}); -} - - -export const DOMAIN_USER_PRODUCERS = Object.freeze({ - list: { - key: "users-list", - producer: getUsersList - }, - current: { - key: "current-user", - producer: getCurrentUser - }, - posts: { - key: "user-posts", - producer: getUserPosts - }, - details: createSource("user-details", getUserDetails), -}); diff --git a/packages/example/src/past/v2/routing/index.js b/packages/example/src/past/v2/routing/index.js deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/example/src/past/v2/shared/utils.js b/packages/example/src/past/v2/shared/utils.js deleted file mode 100644 index 9bc2d4ec..00000000 --- a/packages/example/src/past/v2/shared/utils.js +++ /dev/null @@ -1,64 +0,0 @@ -import axios from "axios"; - -export function promiseOf(resolvedValue) { - return new Promise(function resolver(resolve) { - resolve(resolvedValue); - }) -} - -export function bindAbortAndCancelToken(props) { - const source = axios.CancelToken.source(); - - props.onAbort(function abortCb() { - source.cancel(); - }) - - return source.token; -} - -export const API_JPH = axios.create({ - baseURL: "https://jsonplaceholder.typicode.com" -}); - -export function readJson(response) { - return response.json(); -} - - -export function readData(response) { - return response.data; -} - -export function parseSearch(search) { - if (!search) { - return {}; - } - return Object.fromEntries(new URLSearchParams(search.substring(1))); -} - -export function omitSearchParams(obj) { - if (!obj) { - return obj; - } - const output = {}; - Object.entries(obj) - .forEach(([key, value]) => { - if (value || value === 0) { - output[key] = value; - } - }) - return output; -} - -export function readFormValues(form) { - const formElements = form.elements; - - return [...formElements] - .filter(t => t.value) - .reduce((result, current) => { - if (current.value) { - result[current.name] = current.value; - } - return result; - }, {}); -} diff --git a/packages/example/src/past/v2/suspense/Component.js b/packages/example/src/past/v2/suspense/Component.js deleted file mode 100644 index bd308674..00000000 --- a/packages/example/src/past/v2/suspense/Component.js +++ /dev/null @@ -1,22 +0,0 @@ -import React from "react"; -import { Outlet } from "react-router-dom"; -import { useCurrentStateBoundary } from "./abstraction"; - -export default function Component({name}) { - const result = useCurrentStateBoundary(); - - console.log('--component--result', result); - return ( -
    - Im a component!! -
    -
    -          {JSON.stringify({name, result}, null, 4)}
    -        
    -
    - - OUTLET: - -
    - ) -} diff --git a/packages/example/src/past/v2/suspense/Component2.js b/packages/example/src/past/v2/suspense/Component2.js deleted file mode 100644 index bd308674..00000000 --- a/packages/example/src/past/v2/suspense/Component2.js +++ /dev/null @@ -1,22 +0,0 @@ -import React from "react"; -import { Outlet } from "react-router-dom"; -import { useCurrentStateBoundary } from "./abstraction"; - -export default function Component({name}) { - const result = useCurrentStateBoundary(); - - console.log('--component--result', result); - return ( -
    - Im a component!! -
    -
    -          {JSON.stringify({name, result}, null, 4)}
    -        
    -
    - - OUTLET: - -
    - ) -} diff --git a/packages/example/src/past/v2/suspense/ComponentNested.js b/packages/example/src/past/v2/suspense/ComponentNested.js deleted file mode 100644 index bd308674..00000000 --- a/packages/example/src/past/v2/suspense/ComponentNested.js +++ /dev/null @@ -1,22 +0,0 @@ -import React from "react"; -import { Outlet } from "react-router-dom"; -import { useCurrentStateBoundary } from "./abstraction"; - -export default function Component({name}) { - const result = useCurrentStateBoundary(); - - console.log('--component--result', result); - return ( -
    - Im a component!! -
    -
    -          {JSON.stringify({name, result}, null, 4)}
    -        
    -
    - - OUTLET: - -
    - ) -} diff --git a/packages/example/src/past/v2/suspense/abstraction.js b/packages/example/src/past/v2/suspense/abstraction.js deleted file mode 100644 index eab59594..00000000 --- a/packages/example/src/past/v2/suspense/abstraction.js +++ /dev/null @@ -1,25 +0,0 @@ -import React from "react"; -import {useAsyncState} from "react-async-states"; - -const Context = React.createContext(null); - -export function useCurrentStateBoundary() { - return React.useContext(Context); -} - -export default function AsyncStateBoundary({ config, deps, fallback, children }) { - const result = useAsyncState(config, deps); - return ( - - - - {children} - - - ); -} - -function Suspender({reader}) { - reader(); - return null; -} diff --git a/packages/example/src/past/v2/suspense/index-nested.js b/packages/example/src/past/v2/suspense/index-nested.js deleted file mode 100644 index bc335884..00000000 --- a/packages/example/src/past/v2/suspense/index-nested.js +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; - -const LazyComponent = React.lazy(() => import('./ComponentNested')); - -export default function SuspenseComponentTest(props) { - return ( - - - - ); -} diff --git a/packages/example/src/past/v2/suspense/index.js b/packages/example/src/past/v2/suspense/index.js deleted file mode 100644 index bf88f5f0..00000000 --- a/packages/example/src/past/v2/suspense/index.js +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; - -const LazyComponent = React.lazy(() => import('./Component')); - -export default function SuspenseComponentTest(props) { - return ( - - - - ); -} diff --git a/packages/example/src/past/v2/suspense/index2.js b/packages/example/src/past/v2/suspense/index2.js deleted file mode 100644 index 29fe24ee..00000000 --- a/packages/example/src/past/v2/suspense/index2.js +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; - -const LazyComponent = React.lazy(() => import('./Component2')); - -export default function SuspenseComponentTest(props) { - return ( - - - - ); -} From 8a54b5d1cf30f980f586f8a775dd63feabfc16d8 Mon Sep 17 00:00:00 2001 From: Mohamed EL AYADI Date: Sat, 26 Nov 2022 18:02:54 +0100 Subject: [PATCH 06/13] some devtools fixes --- .../DevtoolsView/CurrentJournalDisplay.tsx | 21 +++-- .../src/DevtoolsView/CurrentStateDisplay.tsx | 76 +++++++++++-------- .../src/DevtoolsView/sources.ts | 1 - packages/devtools-extension/src/index.css | 4 + 4 files changed, 65 insertions(+), 37 deletions(-) diff --git a/packages/devtools-extension/src/DevtoolsView/CurrentJournalDisplay.tsx b/packages/devtools-extension/src/DevtoolsView/CurrentJournalDisplay.tsx index 28c6fecc..bd3bf66f 100644 --- a/packages/devtools-extension/src/DevtoolsView/CurrentJournalDisplay.tsx +++ b/packages/devtools-extension/src/DevtoolsView/CurrentJournalDisplay.tsx @@ -13,23 +13,30 @@ const CurrentJournalDisplay = React.memo(function Journal({lane}: { lane: string display: 'flex', flexDirection: 'row', height: '100%', - padding: 0 + padding: 0, + borderRadius: 8, }}>
    -
    -
    +
    +
    -
    @@ -262,32 +265,43 @@ function StateView({lane}) { return No state information; } return ( -
    - -
    - +
    +
    +
    + +
    +
    + +
    + +
    ); } @@ -523,6 +537,8 @@ function EditState({lane}) { { - console.log('received', message) if (message.source !== "async-states-agent") { return; } diff --git a/packages/devtools-extension/src/index.css b/packages/devtools-extension/src/index.css index 184d3dcf..15d6660c 100644 --- a/packages/devtools-extension/src/index.css +++ b/packages/devtools-extension/src/index.css @@ -4,12 +4,16 @@ body{ :root { --bg-color: #1D2129; + --bg-2-color: #1a1c21; --text-color: white; } .main-bg { background-color: var(--bg-color); } +.main-bg-2 { + background-color: var(--bg-2-color); +} .main-color { color: var(--text-color); From e13be60b481c9bf3252195c0453bea7b10975b08 Mon Sep 17 00:00:00 2001 From: Mohamed EL AYADI Date: Sat, 26 Nov 2022 18:15:07 +0100 Subject: [PATCH 07/13] fix --- packages/devtools-extension/src/DevtoolsView/sources.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/devtools-extension/src/DevtoolsView/sources.ts b/packages/devtools-extension/src/DevtoolsView/sources.ts index a51dfe96..b2760121 100644 --- a/packages/devtools-extension/src/DevtoolsView/sources.ts +++ b/packages/devtools-extension/src/DevtoolsView/sources.ts @@ -102,8 +102,8 @@ function applyPartialUpdate(message) { case DevtoolsJournalEvent.run: { journalSource.getLaneSource(`${message.uniqueId}`).setState(old => { return { - ...old.data, - journal: [...old.data.journal, message.payload], + ...(old.data ?? {}), + journal: [...(old.data?.journal ?? []), message.payload], } }); return; @@ -112,11 +112,11 @@ function applyPartialUpdate(message) { updatesMeter.setState(old => old.data + 1); journalSource.getLaneSource(`${message.uniqueId}`).setState(old => { return { - ...old.data, + ...(old.data ?? {}), state: message.payload.eventPayload.newState, oldState: message.payload.eventPayload.oldState, lastSuccess: message.payload.eventPayload.lastSuccess, - journal: [...old.data.journal, message.payload], + journal: [...(old.data?.journal ?? []), message.payload], } }); return; From 7121c70be419915da8e04c100ad8784e58275e49 Mon Sep 17 00:00:00 2001 From: Mohamed EL AYADI Date: Sun, 27 Nov 2022 15:17:00 +0100 Subject: [PATCH 08/13] new subscribers shape and key --- .../async-state/AsyncState.run.abort.test.ts | 6 +- .../async-state/AsyncState.setState.test.ts | 2 +- .../AsyncState.subscription.test.ts | 6 +- .../useAsyncState/lanes/lanes.test.tsx | 20 ++-- .../outside-provider/source.test.tsx | 7 +- .../src/async-state/AsyncState.ts | 34 ++++--- .../src/devtools/Devtools.ts | 99 +++++++++++++++---- .../src/react/helpers/useCallerName.ts | 73 -------------- .../src/react/useAsyncStateBase.ts | 91 +++++++++-------- .../src/react/useSelector.ts | 21 ++-- 10 files changed, 181 insertions(+), 178 deletions(-) diff --git a/packages/react-async-states/src/__tests__/async-state/AsyncState.run.abort.test.ts b/packages/react-async-states/src/__tests__/async-state/AsyncState.run.abort.test.ts index e93a01f3..881507d9 100644 --- a/packages/react-async-states/src/__tests__/async-state/AsyncState.run.abort.test.ts +++ b/packages/react-async-states/src/__tests__/async-state/AsyncState.run.abort.test.ts @@ -19,7 +19,7 @@ describe('AsyncState - run - abort', () => { // when let myAsyncState = new AsyncState(key, producer, myConfig); - myAsyncState.subscribe(subscription); + myAsyncState.subscribe({cb: subscription}); // then // should have initial status expect(myAsyncState.state).toEqual({ @@ -111,7 +111,7 @@ describe('AsyncState - run - abort', () => { // when let myAsyncState = new AsyncState(key, producer, myConfig); - myAsyncState.subscribe(subscription); + myAsyncState.subscribe({cb: subscription}); // then const abort = myAsyncState.run(standaloneProducerEffectsCreator); @@ -162,7 +162,7 @@ describe('AsyncState - run - abort', () => { // when let myAsyncState = new AsyncState(key, producer, myConfig); - myAsyncState.subscribe(subscription); + myAsyncState.subscribe({cb: subscription}); // then myAsyncState.run(standaloneProducerEffectsCreator); diff --git a/packages/react-async-states/src/__tests__/async-state/AsyncState.setState.test.ts b/packages/react-async-states/src/__tests__/async-state/AsyncState.setState.test.ts index 3d1afa90..c546a85b 100644 --- a/packages/react-async-states/src/__tests__/async-state/AsyncState.setState.test.ts +++ b/packages/react-async-states/src/__tests__/async-state/AsyncState.setState.test.ts @@ -13,7 +13,7 @@ describe('AsyncState - setState', () => { let myConfig = {initialValue: null}; let myAsyncState = new AsyncState(key, producer, myConfig); let subscription = jest.fn(); - myAsyncState.subscribe(subscription); + myAsyncState.subscribe({cb: subscription}); beforeEach(() => { subscription.mockClear(); diff --git a/packages/react-async-states/src/__tests__/async-state/AsyncState.subscription.test.ts b/packages/react-async-states/src/__tests__/async-state/AsyncState.subscription.test.ts index 6e43fe05..33fbc61b 100644 --- a/packages/react-async-states/src/__tests__/async-state/AsyncState.subscription.test.ts +++ b/packages/react-async-states/src/__tests__/async-state/AsyncState.subscription.test.ts @@ -22,7 +22,7 @@ describe('AsyncState - subscriptions', () => { // then expect(myAsyncState.subsIndex).toBe(0); - let unsubscribe = myAsyncState.subscribe(subscriptionFn); + let unsubscribe = myAsyncState.subscribe({cb: subscriptionFn}); expect(typeof unsubscribe).toBe("function"); myAsyncState.run(standaloneProducerEffectsCreator); @@ -84,7 +84,7 @@ describe('AsyncState - subscriptions', () => { // when let myAsyncState = new AsyncState(key, producer, myConfig); - let unsubscribe = myAsyncState.subscribe(subscriptionFn); + let unsubscribe = myAsyncState.subscribe({cb: subscriptionFn}); // then @@ -128,7 +128,7 @@ describe('AsyncState - subscriptions', () => { // when let myAsyncState = new AsyncState(key, producer, myConfig); - let unsubscribe = myAsyncState.subscribe(subscriptionFn); + let unsubscribe = myAsyncState.subscribe({cb: subscriptionFn}); unsubscribe(); // then diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/lanes/lanes.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/lanes/lanes.test.tsx index 17153c03..ca17346d 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/lanes/lanes.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/lanes/lanes.test.tsx @@ -43,8 +43,11 @@ describe('subscribe to lane and operate on it', () => { function CounterSub({counterKey = "default", alias = "default"}) { const {state: {data}, run} = useAsyncState.lazy({ lane: counterKey, + subscriptionKey: alias, source: countersSource, }); + let formattedData = `counter-${counterKey}-${alias}-${data}`; + return (
    ); @@ -88,7 +91,6 @@ describe('subscribe to lane and operate on it', () => { const runDefaultCounter = screen.getByTestId("counter-sub-default-default-run"); const runCounter1 = screen.getByTestId("counter-sub-counter-1-1-run"); - const runCounter2 = screen.getByTestId("counter-sub-counter-2-2-run"); // then act(() => { @@ -174,13 +176,13 @@ describe('subscribe to lane and operate on it', () => { expect(screen.getByTestId("counter-sub-counter-2-extra-default-data").innerHTML) .toEqual("counter-counter-2-extra-default-0"); act(() => { - createSource( - "temporary-will-run-counter-2", - async function (props) { - props.run(countersSource, {lane: "counter-2-extra"}) - props.runp(countersSource, {lane: "counter-2"}) - } - ).run(); + createSource( + "temporary-will-run-counter-2", + async function (props) { + props.run(countersSource, {lane: "counter-2-extra"}) + props.runp(countersSource, {lane: "counter-2"}) + } + ).run(); }); await act(async () => { diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/outside-provider/source.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/outside-provider/source.test.tsx index 7aabb906..96374e37 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/outside-provider/source.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/outside-provider/source.test.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import {fireEvent, render, screen} from "@testing-library/react"; +import {fireEvent, render, screen, act} from "@testing-library/react"; import {UseAsyncState} from "../../../../../types.internal"; import {useAsyncState} from "../../../../../react/useAsyncState"; import AsyncStateComponent from "../../../utils/AsyncStateComponent"; @@ -61,7 +61,10 @@ describe('should subscribe to a module level source object', () => { expect(screen.getByTestId("count-a").innerHTML).toEqual("0"); expect(screen.getByTestId("count-b").innerHTML).toEqual("0"); - fireEvent.click(incrementBtn); + + act(() => { + fireEvent.click(incrementBtn); + }); expect(screen.getByTestId("count-a").innerHTML).toEqual("1"); diff --git a/packages/react-async-states/src/async-state/AsyncState.ts b/packages/react-async-states/src/async-state/AsyncState.ts index bee48516..2eb8c432 100644 --- a/packages/react-async-states/src/async-state/AsyncState.ts +++ b/packages/react-async-states/src/async-state/AsyncState.ts @@ -199,8 +199,7 @@ class AsyncState implements StateInterface { } subscribe( - cb, - subKey?: string | undefined + props: AsyncStateSubscribeProps ): AbortFn { if (!this.subscriptions) { this.subscriptions = {}; @@ -208,10 +207,11 @@ class AsyncState implements StateInterface { let that = this; this.subsIndex += 1; - let subscriptionKey: string | undefined = subKey; - if (subKey === undefined) { - subscriptionKey = `subscription-$${this.subsIndex}`; + let subscriptionKey: string | undefined = props.key; + + if (subscriptionKey === undefined) { + subscriptionKey = `$${this.subsIndex}`; } function cleanup() { @@ -225,14 +225,10 @@ class AsyncState implements StateInterface { } } - this.subscriptions[subscriptionKey!] = { - cleanup, - callback: cb, - key: subscriptionKey, - }; + this.subscriptions[subscriptionKey] = {props, cleanup}; this.locks += 1; - if (__DEV__) devtools.emitSubscription(this, subscriptionKey!); + if (__DEV__) devtools.emitSubscription(this, subscriptionKey); return cleanup; } @@ -804,7 +800,7 @@ function notifySubscribers(instance: StateInterface) { return; } Object.values(instance.subscriptions).forEach(subscription => { - subscription.callback(instance.state); + subscription.props.cb(instance.state); }); } @@ -957,7 +953,7 @@ export function runWhileSubscribingToNextResolve( args ): Promise> { return new Promise(resolve => { - let unsubscribe = instance.subscribe(subscription); + let unsubscribe = instance.subscribe({cb: subscription}); props.onAbort(unsubscribe); let abort = instance.run(standaloneProducerEffectsCreator, ...args); @@ -1239,7 +1235,7 @@ export interface BaseSource { ): void; // subscriptions - subscribe(cb: Function, subscriptionKey?: string): AbortFn, + subscribe(AsyncStateSubscribeProps: AsyncStateSubscribeProps): AbortFn, // producer replay(): AbortFn, @@ -1258,6 +1254,13 @@ export interface BaseSource { getConfig(): ProducerConfig, } +export type AsyncStateSubscribeProps = { + key?: string, + flags?: number, + origin?: number, + cb(s: State): void, +} + export interface StateInterface extends BaseSource { // identity version: number, @@ -1447,9 +1450,8 @@ export type RunTask = { } export type StateSubscription = { - key: string, // subscription key cleanup: () => void, - callback: (newState: State) => void, + props: AsyncStateSubscribeProps }; export type OnCacheLoadProps = { diff --git a/packages/react-async-states/src/devtools/Devtools.ts b/packages/react-async-states/src/devtools/Devtools.ts index 5b87d7af..18a559d3 100644 --- a/packages/react-async-states/src/devtools/Devtools.ts +++ b/packages/react-async-states/src/devtools/Devtools.ts @@ -1,5 +1,10 @@ import {ProducerSavedProps, State, StateInterface} from "../async-state"; import {DevtoolsEvent, DevtoolsJournalEvent, DevtoolsRequest} from "./index"; +import {humanizeDevFlags} from "../react/utils"; +import { + AsyncStateSubscribeProps, + StateSubscription +} from "../async-state/AsyncState"; let journalEventsId = 0; const source = "async-states-agent"; @@ -32,9 +37,11 @@ interface DevtoolsInterface { emitUnsubscription(instance: StateInterface, subscriptionKey: string), - emitRunSync(instance: StateInterface, props: ProducerSavedProps): void, + emitRunSync( + instance: StateInterface, props: ProducerSavedProps): void, - emitRunPromise(instance: StateInterface, props: ProducerSavedProps): void, + emitRunPromise( + instance: StateInterface, props: ProducerSavedProps): void, emitRunGenerator( instance: StateInterface, props: ProducerSavedProps): void, @@ -43,7 +50,8 @@ interface DevtoolsInterface { instance: StateInterface, props: ProducerSavedProps): void, emitRunConsumedFromCache( - instance: StateInterface, payload: Record | undefined | null, + instance: StateInterface, + payload: Record | undefined | null, args: any[] ): void, } @@ -126,6 +134,9 @@ function createDevtools(): DevtoolsInterface { } function emitKeys() { + if (!connected) { + return; + } emit({ source, payload: keys, @@ -192,6 +203,9 @@ function createDevtools(): DevtoolsInterface { return; } retainStateInstance(asyncState); + if (!connected) { + return; + } emit({ source, uniqueId: asyncState.uniqueId, @@ -204,15 +218,15 @@ function createDevtools(): DevtoolsInterface { uniqueId: asyncState.uniqueId, lastSuccess: asyncState.lastSuccess, producerType: asyncState.producerType, - subscriptions: asyncState.subscriptions ? Object.keys(asyncState.subscriptions) : [], + subscriptions: (asyncState.subscriptions ? Object.values(asyncState.subscriptions) : []).map(mapSubscriptionToDevtools), lanes: asyncState.lanes ? Object.keys(asyncState.lanes).map(key => ({ uniqueId: asyncState.lanes![key].uniqueId, key })) : [], - parent: { + parent: asyncState.parent ? { key: asyncState.parent?.key, uniqueId: asyncState.parent?.uniqueId - }, + }: null, }, type: DevtoolsEvent.setAsyncState }); @@ -234,6 +248,9 @@ function createDevtools(): DevtoolsInterface { } function emitPartialSync(uniqueId, evt) { + if (!connected) { + return; + } emit({ source, payload: evt, @@ -256,18 +273,6 @@ function createDevtools(): DevtoolsInterface { }, }); emitStateInterface(asyncState); - // listenToDevtoolsMessages(asyncState); - } - - function emitInsideProvider(asyncState: StateInterface, insideProvider = true) { - if (asyncState.config.hideFromDevtools) { - return; - } - retainStateInstance(asyncState); - emitJournalEvent(asyncState, { - payload: insideProvider, - type: DevtoolsJournalEvent.insideProvider, - }); } function emitRunSync(asyncState: StateInterface, props) { @@ -279,7 +284,11 @@ function createDevtools(): DevtoolsInterface { payload: {props, type: "sync"}, type: DevtoolsJournalEvent.run }; + emitJournalEvent(asyncState, evt); + if (!connected) { + return; + } emitPartialSync(asyncState.uniqueId, { key: asyncState.key, eventId: journalEventsId, @@ -291,7 +300,8 @@ function createDevtools(): DevtoolsInterface { }); } - function emitRunConsumedFromCache(asyncState: StateInterface, payload, execArgs) { + function emitRunConsumedFromCache( + asyncState: StateInterface, payload, execArgs) { if (asyncState.config.hideFromDevtools) { return; } @@ -305,6 +315,9 @@ function createDevtools(): DevtoolsInterface { type: DevtoolsJournalEvent.run }; emitJournalEvent(asyncState, evt); + if (!connected) { + return; + } emitPartialSync(asyncState.uniqueId, { key: asyncState.key, eventId: journalEventsId, @@ -326,6 +339,9 @@ function createDevtools(): DevtoolsInterface { type: DevtoolsJournalEvent.run }; emitJournalEvent(asyncState, evt); + if (!connected) { + return; + } emitPartialSync(asyncState.uniqueId, { key: asyncState.key, eventId: journalEventsId, @@ -347,6 +363,9 @@ function createDevtools(): DevtoolsInterface { type: DevtoolsJournalEvent.run }; emitJournalEvent(asyncState, evt); + if (!connected) { + return; + } emitPartialSync(asyncState.uniqueId, { key: asyncState.key, eventId: journalEventsId, @@ -368,6 +387,9 @@ function createDevtools(): DevtoolsInterface { type: DevtoolsJournalEvent.run }; emitJournalEvent(asyncState, evt); + if (!connected) { + return; + } emitPartialSync(asyncState.uniqueId, { key: asyncState.key, eventId: journalEventsId, @@ -398,11 +420,20 @@ function createDevtools(): DevtoolsInterface { return; } retainStateInstance(asyncState); + let subscription = asyncState.subscriptions![subKey]; let evt = { - payload: subKey, - type: DevtoolsJournalEvent.subscription + type: DevtoolsJournalEvent.subscription, + payload: { + key: subscription.props.key, + origin: subscription.props.origin, + flags: subscription.props.flags, + devFlags: humanizeDevFlags(subscription.props.flags || 0), + } }; emitJournalEvent(asyncState, evt); + if (!connected) { + return; + } emitPartialSync(asyncState.uniqueId, { key: asyncState.key, eventId: journalEventsId, @@ -510,6 +541,32 @@ function createDevtools(): DevtoolsInterface { } } +function mapSubscriptionToDevtools(sub: StateSubscription) { + return { + key: sub.props.key, + flags: sub.props.flags, + origin: getSubscriptionOrigin(sub.props.origin), + devFlags: humanizeDevFlags(sub.props.flags || 0), + } +} + +function getSubscriptionOrigin(origin?: number) { + switch (origin) { + case 1: + return "useAsyncState"; + case 2: + return "useSource"; + case 3: + return "useProducer"; + case 4: + return "useSelector"; + case undefined: + return "undefined"; + default: + return "unknown"; + } +} + let DEVTOOLS = createDevtools(); export default DEVTOOLS; diff --git a/packages/react-async-states/src/react/helpers/useCallerName.ts b/packages/react-async-states/src/react/helpers/useCallerName.ts index d15f25aa..421f31ce 100644 --- a/packages/react-async-states/src/react/helpers/useCallerName.ts +++ b/packages/react-async-states/src/react/helpers/useCallerName.ts @@ -1,76 +1,3 @@ -import * as React from "react"; -import AsyncState, {StateInterface} from "../../async-state"; -import {__DEV__} from "../../shared"; - -const emptyArray = []; - -function newObj() { - return Object.create(Object.prototype); -} - -type WarnInDevSelf = { - subId?: number, - result?: string, - subKey?: string, - instance?: StateInterface, -} - -export default function useInDevSubscriptionKey( - subKey: string | undefined, - asyncState: StateInterface | null, - from: string, // 1: useAsyncState, 2: useSourceLane, 3: useProducer, 4: useSelector -): string | undefined { - if (__DEV__) { - let callerName = useCallerName(5); - let self = React.useRef>(); - - if (!self.current) { - self.current = {}; - } - - const didKeyChange = self.current.subKey !== subKey; - const didInstanceChange = self.current.instance !== asyncState; - if (didKeyChange || didInstanceChange) { - if (asyncState && !subKey) { - let nextId = self.current.subId; - - if (didInstanceChange) { - nextId = ++((asyncState as AsyncState).subsIndex); - } - - self.current = { - subId: nextId, - instance: asyncState, - result: `${callerName}-$${from}-$${nextId}`, - }; - } else { - self.current = { - result: subKey, - }; - } - } - - return self.current.result; - } -} - -export function useCallerName(level = 4): string | undefined { - if (!__DEV__) { - return; - } - - // using a lightweight mutable memo there that s assigned only one time - const self = React - .useMemo<{ callerName: string | undefined }>(newObj, emptyArray); - - // assign only if not already assigned, even undefined counts! - if (!Object.prototype.hasOwnProperty.call(self, "callerName")) { - self.callerName = computeCallerName(level); - } - - return self.callerName; -} - export function computeCallerName(level = 3): undefined | string { const stack = new Error().stack?.toString(); if (!stack) { diff --git a/packages/react-async-states/src/react/useAsyncStateBase.ts b/packages/react-async-states/src/react/useAsyncStateBase.ts index 32442f24..41f62240 100644 --- a/packages/react-async-states/src/react/useAsyncStateBase.ts +++ b/packages/react-async-states/src/react/useAsyncStateBase.ts @@ -47,7 +47,9 @@ import { } from "./StateHookFlags"; import {nextKey} from "../async-state/key-gen"; import {__DEV__, shallowClone} from "../shared"; -import useInDevSubscriptionKey from "./helpers/useCallerName"; +import { + computeCallerName, +} from "./helpers/useCallerName"; import {supportsConcurrentMode} from "./helpers/supports-concurrent-mode"; import {humanizeDevFlags} from "./utils"; @@ -63,16 +65,9 @@ export const useAsyncStateBase = function useAsyncStateImpl>( const [guard, setGuard] = React.useState(0); const contextValue = React.useContext(AsyncStateContext); - React.useMemo(() => hook.update(mixedConfig, contextValue, overrides), + React.useMemo(() => hook.update(1, mixedConfig, contextValue, overrides), [contextValue, guard, ...deps]); - let subscriptionKey = hook.flags & CONFIG_OBJECT - ? (mixedConfig as BaseConfig).subscriptionKey : undefined; - - if (__DEV__) { - subscriptionKey = useInDevSubscriptionKey(subscriptionKey, hook.instance, "1"); - } - const [selectedValue, setSelectedValue] = React .useState>>(calculateStateValue.bind(null, hook)); @@ -91,8 +86,8 @@ export const useAsyncStateBase = function useAsyncStateImpl>( } React.useEffect( - hook.subscribe.bind(null, setGuard, updateSelectedValue, subscriptionKey), - [contextValue, hook.flags, hook.instance, subscriptionKey] + hook.subscribe.bind(null, setGuard, updateSelectedValue), + [contextValue, hook.flags, hook.instance] ); React.useEffect(autoRunAsyncState, deps); @@ -140,17 +135,12 @@ export function useSourceLane( source: Source, lane?: string, ): UseAsyncState> { - let subscriptionKey; const hook: StateHook> = useCurrentHook(); const contextValue = React.useContext(AsyncStateContext); - React.useMemo(() => hook.update({source, lane}, contextValue), + React.useMemo(() => hook.update(2, source, contextValue, {lane}), [contextValue, lane]); - if (__DEV__) { - subscriptionKey = useInDevSubscriptionKey(subscriptionKey, hook.instance, "2"); - } - const [selectedValue, setSelectedValue] = React .useState>>>(calculateStateValue.bind(null, hook)); @@ -169,8 +159,8 @@ export function useSourceLane( } React.useEffect( - hook.subscribe.bind(null, noop, updateSelectedValue, subscriptionKey), - [contextValue, hook.flags, hook.instance, subscriptionKey] + hook.subscribe.bind(null, noop, updateSelectedValue), + [contextValue, hook.flags, hook.instance] ); return selectedValue; @@ -196,15 +186,10 @@ export function useSourceLane( export function useProducer( producer: Producer, ): UseAsyncState> { - let subscriptionKey; const hook: StateHook> = useCurrentHook(); const contextValue = React.useContext(AsyncStateContext); - React.useMemo(() => hook.update(producer, contextValue), [contextValue]); - - if (__DEV__) { - subscriptionKey = useInDevSubscriptionKey(subscriptionKey, hook.instance, "3"); - } + React.useMemo(() => hook.update(3, producer, contextValue), [contextValue]); const [selectedValue, setSelectedValue] = React .useState>>>(calculateStateValue.bind(null, hook)); @@ -228,8 +213,8 @@ export function useProducer( } React.useEffect( - hook.subscribe.bind(null, noop, updateSelectedValue, subscriptionKey), - [contextValue, hook.flags, hook.instance, subscriptionKey] + hook.subscribe.bind(null, noop, updateSelectedValue), + [contextValue, hook.flags, hook.instance] ); return selectedValue; @@ -308,7 +293,9 @@ function readStateFromInstance>( class StateHookImpl implements StateHook { current: E; flags: number; + name: string | undefined; config: MixedConfig; + origin: number | undefined; version: number | undefined; base: BaseUseAsyncState; context: StateContextValue | null; @@ -317,7 +304,6 @@ class StateHookImpl implements StateHook { subscribe: ( setGuard: React.Dispatch>, onChange: () => void, - subscriptionKey?: string, ) => AbortFn constructor() { @@ -326,12 +312,13 @@ class StateHookImpl implements StateHook { } update( + origin: number, newConfig: MixedConfig, contextValue: StateContextValue | null, overrides?: PartialUseAsyncStateConfiguration ) { let nextFlags = getFlagsFromConfig(newConfig, contextValue, overrides); - let instance = resolveInstance(nextFlags, newConfig, contextValue, this); + let instance = resolveInstance(nextFlags, newConfig, contextValue, this, overrides); if (!instance && !(nextFlags & WAIT)) { throw new Error("Mode isn't wait and instance isn't defined! this is a bug"); @@ -345,16 +332,32 @@ class StateHookImpl implements StateHook { instance.mergePayload(contextValue?.getPayload()); } + this.origin = origin; this.flags = nextFlags; this.config = newConfig; this.instance = instance; this.context = contextValue; this.base = makeBaseReturn(this); + this.name = calculateSubscriptionKey(this); this.subscribe = createSubscribeAndWatchFunction(this); } } +function calculateSubscriptionKey(hook: StateHook): string | undefined { + if (hook.flags & CONFIG_OBJECT && (hook.config as BaseConfig).subscriptionKey) { + return (hook.config as BaseConfig).subscriptionKey; + } + if (hook.flags & WAIT) { + return; + } + if (__DEV__) { + let callerName = computeCallerName(5); + let index = ++((hook.instance! as AsyncState).subsIndex); + return `${callerName}-${index}`; + } +} + //region useAsyncState value construction // @ts-ignore function noop(): undefined { @@ -464,7 +467,8 @@ export function resolveInstance( flags: number, config: MixedConfig, contextValue: StateContextValue | null, - previousHook: StateHook + previousHook: StateHook, + overrides?: PartialUseAsyncStateConfiguration ): StateInterface | null { if (flags & WAIT) { @@ -478,7 +482,8 @@ export function resolveInstance( instance = instance.fork(); } if (flags & LANE) { - instance = instance.getLane((config as BaseConfig).lane); + let laneKey = (config as BaseConfig).lane || overrides?.lane; + instance = instance.getLane(laneKey); } return instance; } @@ -489,7 +494,8 @@ export function resolveInstance( instance = instance.fork(givenConfig.forkConfig); } if (flags & LANE) { - return instance.getLane(givenConfig.lane!) + let laneKey = (config as BaseConfig).lane || overrides?.lane; + return instance.getLane(laneKey) } return instance; } @@ -548,19 +554,21 @@ export function resolveInstance( export interface StateHook { current: E, flags: number, + name: string | undefined; config: MixedConfig, + origin: number | undefined; version: number | undefined, base: BaseUseAsyncState, context: StateContextValue | null, subscribe: ( setGuard: React.Dispatch>, onChange: () => void, - subscriptionKey?: string, ) => AbortFn, instance: StateInterface | null, update( + origin: number, newConfig: MixedConfig, contextValue: StateContextValue | null, overrides?: PartialUseAsyncStateConfiguration @@ -708,10 +716,8 @@ function createSubscribeAndWatchFunction( return function subscribeAndWatch( setGuard: React.Dispatch>, onChange: () => void, - subscriptionKey?: string, ) { - let contextValue = hook.context!; let {flags, instance, config} = hook; @@ -725,9 +731,12 @@ function createSubscribeAndWatchFunction( } }); } + + let contextValue = hook.context; + // if we are hoisting or forking, spread the instance for watchers if (flags & INSIDE_PROVIDER && flags & (HOIST | FORK)) { - const hoistedInstance = contextValue.hoist( + const hoistedInstance = contextValue!.hoist( instance!.key, instance!, (config as BaseConfig).hoistToProviderConfig @@ -768,7 +777,7 @@ function createSubscribeAndWatchFunction( } function onStateChange() { - let newSelectedState = readStateFromInstance(instance!, flags, config); + let newSelectedState = readStateFromInstance(instance, flags, config); if (flags & EQUALITY_CHECK) { let areEqual = (config as PartialUseAsyncStateConfiguration) @@ -787,7 +796,12 @@ function createSubscribeAndWatchFunction( } // subscription - cleanups.push(instance!.subscribe(onStateChange, subscriptionKey)); + cleanups.push(instance!.subscribe({ + key: hook.name, + flags: hook.flags, + cb: onStateChange, + origin: hook.origin, + })); if (instance!.version !== hook.version) { onChange(); } @@ -808,7 +822,6 @@ function createSubscribeAndWatchFunction( } return function cleanup() { - cleanups.forEach(cb => { if (cb) { cb(); diff --git a/packages/react-async-states/src/react/useSelector.ts b/packages/react-async-states/src/react/useSelector.ts index 4c564da4..b52998a9 100644 --- a/packages/react-async-states/src/react/useSelector.ts +++ b/packages/react-async-states/src/react/useSelector.ts @@ -8,7 +8,7 @@ import { UseSelectorFunctionKeys, } from "../types.internal"; import {isSource} from "../async-state/utils"; -import AsyncState, { +import { ManagerWatchCallbackValue, Source, StateInterface, @@ -18,7 +18,7 @@ import AsyncState, { SimpleSelector } from "../async-state"; import {readSource} from "../async-state/AsyncState"; -import {useCallerName} from "./helpers/useCallerName"; +import {computeCallerName} from "./helpers/useCallerName"; import {__DEV__, shallowEqual} from "../shared"; type SelectorSelf = { @@ -27,7 +27,6 @@ type SelectorSelf = { currentInstances: Record | undefined>, } -// todo: enhance the typing of useSelector export function useSelector( keys: BaseSelectorKey, selector?: SimpleSelector, @@ -49,13 +48,8 @@ export function useSelector( selector?: SimpleSelector | ArraySelector | FunctionSelector = identity, areEqual?: EqualityFn = shallowEqual, ): T { - let caller; const contextValue = React.useContext(AsyncStateContext); - if (__DEV__) { - caller = useCallerName(3); - } - ensureParamsAreOk(contextValue, keys); // on every render, recheck the keys, because they are most likely to be inlined @@ -114,10 +108,15 @@ export function useSelector( .map(as => { let subscriptionKey: string | undefined = undefined; if (__DEV__) { - let nextMeter = (as as AsyncState).subsIndex; - subscriptionKey = `${caller}-$4-$${nextMeter}`;// 4: useSelector + let caller = computeCallerName(4); + subscriptionKey = `${caller}`;// 4: useSelector } - return (as as StateInterface)!.subscribe(onUpdate, subscriptionKey); + return (as as StateInterface)!.subscribe({ + origin: 4, + cb: onUpdate, + flags: undefined, + key: subscriptionKey, + }); }); return () => { From 43a69ecf900441793bdfe0582e23abadeb06f9a3 Mon Sep 17 00:00:00 2001 From: Mohamed EL AYADI Date: Sun, 27 Nov 2022 15:47:58 +0100 Subject: [PATCH 09/13] display new subscriptions in devtools --- .../devtools-extension/src/DevModeApp.tsx | 7 ++++--- .../src/DevtoolsView/sources.ts | 6 ++++-- .../src/react/useAsyncStateBase.ts | 21 +++++++++++-------- .../src/react/useSelector.ts | 4 ++-- 4 files changed, 22 insertions(+), 16 deletions(-) diff --git a/packages/devtools-extension/src/DevModeApp.tsx b/packages/devtools-extension/src/DevModeApp.tsx index ebd25f52..e3a11193 100644 --- a/packages/devtools-extension/src/DevModeApp.tsx +++ b/packages/devtools-extension/src/DevModeApp.tsx @@ -1,12 +1,13 @@ import * as React from "react"; -import {createSource, useSource} from "react-async-states"; +import {createSource, useSource, useSourceLane, useProducer, useSelector} from "react-async-states"; +import {State} from "react-async-states/src"; let meter = 0; export default function DevModeApp() { const source = React.useMemo(() => createSource("devmodeapp", null, {initialValue: 0}), []); - const {state} = useSource(source); + const state: State = useSelector(source); return + onClick={() => source!.run(old => old.data + 1)}>{state.data} } diff --git a/packages/devtools-extension/src/DevtoolsView/sources.ts b/packages/devtools-extension/src/DevtoolsView/sources.ts index b2760121..819eda73 100644 --- a/packages/devtools-extension/src/DevtoolsView/sources.ts +++ b/packages/devtools-extension/src/DevtoolsView/sources.ts @@ -16,7 +16,7 @@ type Journal = { key: string, journal: any[], state: State, - subscriptions: string[] + subscriptions: any[] }; // stores data related to any async state export const journalSource = createSource("journal", null, {hideFromDevtools: true}); @@ -135,9 +135,11 @@ function applyPartialUpdate(message) { case DevtoolsJournalEvent.unsubscription: { journalSource.getLaneSource(`${message.uniqueId}`).setState(old => { let prevData = old.data ?? {}; + + console.log('haha', prevData.subscriptions, message.payload.eventPayload) return { ...prevData, - subscriptions: (prevData.subscriptions ?? [])?.filter(t => t !== message.payload.eventPayload), + subscriptions: (prevData.subscriptions ?? [])?.filter(t => t.key !== message.payload.eventPayload), journal: [...(prevData.journal ?? []), message.payload], } }); diff --git a/packages/react-async-states/src/react/useAsyncStateBase.ts b/packages/react-async-states/src/react/useAsyncStateBase.ts index 41f62240..ae21aca7 100644 --- a/packages/react-async-states/src/react/useAsyncStateBase.ts +++ b/packages/react-async-states/src/react/useAsyncStateBase.ts @@ -65,7 +65,7 @@ export const useAsyncStateBase = function useAsyncStateImpl>( const [guard, setGuard] = React.useState(0); const contextValue = React.useContext(AsyncStateContext); - React.useMemo(() => hook.update(1, mixedConfig, contextValue, overrides), + React.useMemo(() => hook.update(1, mixedConfig, contextValue, overrides, 8), [contextValue, guard, ...deps]); const [selectedValue, setSelectedValue] = React @@ -128,17 +128,18 @@ export const useAsyncStateBase = function useAsyncStateImpl>( export function useSource( source: Source ): UseAsyncState> { - return useSourceLane(source); + return useSourceLane(source, undefined, __DEV__ ? 9 : undefined); } export function useSourceLane( source: Source, lane?: string, + level: number = 8, // used in dev mode only ): UseAsyncState> { const hook: StateHook> = useCurrentHook(); const contextValue = React.useContext(AsyncStateContext); - React.useMemo(() => hook.update(2, source, contextValue, {lane}), + React.useMemo(() => hook.update(2, source, contextValue, {lane}, level), [contextValue, lane]); const [selectedValue, setSelectedValue] = React @@ -189,7 +190,7 @@ export function useProducer( const hook: StateHook> = useCurrentHook(); const contextValue = React.useContext(AsyncStateContext); - React.useMemo(() => hook.update(3, producer, contextValue), [contextValue]); + React.useMemo(() => hook.update(3, producer, contextValue, undefined, 8), [contextValue]); const [selectedValue, setSelectedValue] = React .useState>>>(calculateStateValue.bind(null, hook)); @@ -315,7 +316,8 @@ class StateHookImpl implements StateHook { origin: number, newConfig: MixedConfig, contextValue: StateContextValue | null, - overrides?: PartialUseAsyncStateConfiguration + overrides?: PartialUseAsyncStateConfiguration, + level?: number ) { let nextFlags = getFlagsFromConfig(newConfig, contextValue, overrides); let instance = resolveInstance(nextFlags, newConfig, contextValue, this, overrides); @@ -338,13 +340,13 @@ class StateHookImpl implements StateHook { this.instance = instance; this.context = contextValue; this.base = makeBaseReturn(this); - this.name = calculateSubscriptionKey(this); + this.name = calculateSubscriptionKey(this, level); this.subscribe = createSubscribeAndWatchFunction(this); } } -function calculateSubscriptionKey(hook: StateHook): string | undefined { +function calculateSubscriptionKey(hook: StateHook, level = 9): string | undefined { if (hook.flags & CONFIG_OBJECT && (hook.config as BaseConfig).subscriptionKey) { return (hook.config as BaseConfig).subscriptionKey; } @@ -352,7 +354,7 @@ function calculateSubscriptionKey(hook: StateHook): string | undefin return; } if (__DEV__) { - let callerName = computeCallerName(5); + let callerName = computeCallerName(level); let index = ++((hook.instance! as AsyncState).subsIndex); return `${callerName}-${index}`; } @@ -571,7 +573,8 @@ export interface StateHook { origin: number, newConfig: MixedConfig, contextValue: StateContextValue | null, - overrides?: PartialUseAsyncStateConfiguration + overrides?: PartialUseAsyncStateConfiguration, + level?: number ), } diff --git a/packages/react-async-states/src/react/useSelector.ts b/packages/react-async-states/src/react/useSelector.ts index b52998a9..7a594d49 100644 --- a/packages/react-async-states/src/react/useSelector.ts +++ b/packages/react-async-states/src/react/useSelector.ts @@ -108,8 +108,8 @@ export function useSelector( .map(as => { let subscriptionKey: string | undefined = undefined; if (__DEV__) { - let caller = computeCallerName(4); - subscriptionKey = `${caller}`;// 4: useSelector + let caller = computeCallerName(8); + subscriptionKey = `${caller}-$4`;// 4: useSelector } return (as as StateInterface)!.subscribe({ origin: 4, From cc117f95b6cc187bc16b7be1dbe84fe21ad70ef8 Mon Sep 17 00:00:00 2001 From: Mohamed EL AYADI Date: Sun, 27 Nov 2022 16:00:38 +0100 Subject: [PATCH 10/13] remove supports in concurrent mode and small refactor --- .../other/supports-concurrent-mode.no.test.ts | 11 ---------- .../supports-concurrent-mode.yes.test.ts | 13 ------------ .../react/helpers/supports-concurrent-mode.ts | 6 ------ .../src/react/useAsyncStateBase.ts | 21 ++++++++++--------- 4 files changed, 11 insertions(+), 40 deletions(-) delete mode 100644 packages/react-async-states/src/__tests__/other/supports-concurrent-mode.no.test.ts delete mode 100644 packages/react-async-states/src/__tests__/other/supports-concurrent-mode.yes.test.ts delete mode 100644 packages/react-async-states/src/react/helpers/supports-concurrent-mode.ts diff --git a/packages/react-async-states/src/__tests__/other/supports-concurrent-mode.no.test.ts b/packages/react-async-states/src/__tests__/other/supports-concurrent-mode.no.test.ts deleted file mode 100644 index 7821f137..00000000 --- a/packages/react-async-states/src/__tests__/other/supports-concurrent-mode.no.test.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {supportsConcurrentMode} from "../../react/helpers/supports-concurrent-mode"; - -jest.mock("react", () => ({ - ...jest.requireActual("react"), - useSyncExternalStore: undefined, -})); -describe('supportsConcurrentMode', () => { - it('should say no', () => { - expect(supportsConcurrentMode()).toEqual(false); - }); -}); diff --git a/packages/react-async-states/src/__tests__/other/supports-concurrent-mode.yes.test.ts b/packages/react-async-states/src/__tests__/other/supports-concurrent-mode.yes.test.ts deleted file mode 100644 index 36ce3ac5..00000000 --- a/packages/react-async-states/src/__tests__/other/supports-concurrent-mode.yes.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {supportsConcurrentMode} from "../../react/helpers/supports-concurrent-mode"; - -jest.mock("react", () => ({ - ...jest.requireActual("react"), - useSyncExternalStore: () => { - }, -})); -describe('supportsConcurrentMode', () => { - it('should say yes', () => { - expect(supportsConcurrentMode()).toEqual(true); - jest.unmock("react"); - }); -}); diff --git a/packages/react-async-states/src/react/helpers/supports-concurrent-mode.ts b/packages/react-async-states/src/react/helpers/supports-concurrent-mode.ts deleted file mode 100644 index 48c6d990..00000000 --- a/packages/react-async-states/src/react/helpers/supports-concurrent-mode.ts +++ /dev/null @@ -1,6 +0,0 @@ -import * as React from "react"; - -export function supportsConcurrentMode(): boolean { - // @ts-ignore - return typeof React.useSyncExternalStore === "function"; -} diff --git a/packages/react-async-states/src/react/useAsyncStateBase.ts b/packages/react-async-states/src/react/useAsyncStateBase.ts index ae21aca7..cef6c62e 100644 --- a/packages/react-async-states/src/react/useAsyncStateBase.ts +++ b/packages/react-async-states/src/react/useAsyncStateBase.ts @@ -50,7 +50,6 @@ import {__DEV__, shallowClone} from "../shared"; import { computeCallerName, } from "./helpers/useCallerName"; -import {supportsConcurrentMode} from "./helpers/supports-concurrent-mode"; import {humanizeDevFlags} from "./utils"; const emptyArray = []; @@ -99,6 +98,7 @@ export const useAsyncStateBase = function useAsyncStateImpl>( setSelectedValue(calculateStateValue(hook)); hook.version = hook.instance?.version; } + function autoRunAsyncState(): CleanupFn { // auto run only if condition is met, and it is not lazy if (!(hook.flags & AUTO_RUN)) { @@ -228,7 +228,6 @@ export function useProducer( } - function invokeSubscribeEvents( events: UseAsyncStateEventSubscribe | undefined, run: (...args: any[]) => AbortFn, @@ -346,7 +345,8 @@ class StateHookImpl implements StateHook { } -function calculateSubscriptionKey(hook: StateHook, level = 9): string | undefined { +function calculateSubscriptionKey( + hook: StateHook, level = 9): string | undefined { if (hook.flags & CONFIG_OBJECT && (hook.config as BaseConfig).subscriptionKey) { return (hook.config as BaseConfig).subscriptionKey; } @@ -365,6 +365,7 @@ function calculateSubscriptionKey(hook: StateHook, level = 9): strin function noop(): undefined { // that's a noop fn } + function makeBaseReturn(hook: StateHook) { if (!hook.instance) { let output = { @@ -701,13 +702,11 @@ function createReadInConcurrentMode( if (!instance) { return stateValue; } - if (supportsConcurrentMode()) { - if ( - AsyncStateStatus.pending === instance.state?.status && - instance.suspender - ) { - throw instance.suspender; - } + if ( + AsyncStateStatus.pending === instance.state?.status && + instance.suspender + ) { + throw instance.suspender; } return stateValue; } @@ -797,6 +796,7 @@ function createSubscribeAndWatchFunction( invokeChangeEvents(instance!.state, (config as BaseConfig).events); } } + // subscription cleanups.push(instance!.subscribe({ @@ -833,6 +833,7 @@ function createSubscribeAndWatchFunction( } } } + function calculateStateValue( hook: StateHook, ): Readonly> { From ae4d6c111ac3ca43c117fcc13ee19912727ab91e Mon Sep 17 00:00:00 2001 From: Mohamed EL AYADI Date: Sun, 27 Nov 2022 21:50:43 +0100 Subject: [PATCH 11/13] rename hoistToProvider to hoist, rename AsyncStateStatus to Status, rename ProducerRunEffects to producerEffects, and export state hook to its own file --- README.MD | 10 +- .../src/DevtoolsView/CurrentStateDisplay.tsx | 40 +- packages/docs/docs/api/0-the-whole-api.md | 4 +- packages/docs/docs/api/1-producer-function.md | 4 +- packages/docs/docs/api/4-use-async-state.md | 42 +- .../docs/docs/faq/how-the-library-works.md | 14 +- packages/docs/docs/tutorial/state-sharing.md | 2 +- packages/react-async-states/README.MD | 22 +- .../async-state/AsyncState.fork.test.ts | 10 +- .../async-state/AsyncState.run.abort.test.ts | 34 +- .../async-state/AsyncState.run.test.ts | 20 +- .../async-state/AsyncState.setState.test.ts | 4 +- .../AsyncState.subscription.test.ts | 24 +- .../Provider/provider.test.tsx | 2 +- .../StateBoundary/index.test.tsx | 10 +- .../react-async-state/cache/index.test.ts | 10 +- .../useAsyncState/auto-run/index.test.tsx | 6 +- .../useAsyncState/props/effects.emit.test.tsx | 4 +- .../useAsyncState/props/effects.runp.test.tsx | 10 +- .../useAsyncState/run/generator.test.tsx | 12 +- .../useAsyncState/run/index.test.tsx | 18 +- .../subscription/events/index.test.tsx | 8 +- .../outside-provider/index.test.tsx | 10 +- .../post-subscribe/index.test.tsx | 6 +- .../src/__tests__/v2/get-flags.test.ts | 145 ++-- .../src/__tests__/v2/resolve-instance.test.ts | 5 +- .../src/async-state/AsyncState.ts | 68 +- .../src/async-state/AsyncStateManager.ts | 20 +- .../src/async-state/index.ts | 6 +- packages/react-async-states/src/index.ts | 6 +- .../src/react/StateBoundary.tsx | 12 +- .../react-async-states/src/react/StateHook.ts | 646 +++++++++++++++++ .../src/react/useAsyncState.ts | 4 +- .../src/react/useAsyncStateBase.ts | 678 +----------------- .../react-async-states/src/react/utils.ts | 8 + .../react-async-states/src/types.internal.ts | 40 +- 36 files changed, 981 insertions(+), 983 deletions(-) create mode 100644 packages/react-async-states/src/react/StateHook.ts diff --git a/README.MD b/README.MD index e6d45030..00889f37 100644 --- a/README.MD +++ b/README.MD @@ -121,7 +121,7 @@ runc({ #### Dynamic creation and sharing of states at runtime Under the `AsyncStateProvider`, you can create and share state instances -and access them by their `key` via the `hoistToProvider` option. +and access them by their `key` via the `hoist` option. You can even start listening to a state before it gets hoisted to the provider, and get notified once it gets added. @@ -140,12 +140,12 @@ variables. It just works in the core of the library. Of course, this requires you to be in an environment where `setTimeout` exists. ```tsx -import {useAsyncState, ProducerRunEffects} from "react-async-states"; +import {useAsyncState, RunEffect} from "react-async-states"; const {run} = useAsyncState({ producer: userSearchByUsername, // debounce runs - runEffect: ProducerRunEffects.debounce, + runEffect: RunEffect.debounce, runEffectDurationMs: 300, // skip pending status if it answers less than 200ms skipPendingDelayMs: 200, @@ -163,14 +163,14 @@ and `payload`. Let's add cache support to the previous example: ```tsx -import {useAsyncState, ProducerRunEffects} from "react-async-states"; +import {useAsyncState, RunEffect} from "react-async-states"; // note that the whole configuration object does not depend on render // and can be moved to module level static object. const {run} = useAsyncState({ producer: userSearchByUsername, // debounce runs - runEffect: ProducerRunEffects.debounce, + runEffect: RunEffect.debounce, runEffectDurationMs: 300, // skip pending status if it answers less than 200ms skipPendingDelayMs: 200, diff --git a/packages/devtools-extension/src/DevtoolsView/CurrentStateDisplay.tsx b/packages/devtools-extension/src/DevtoolsView/CurrentStateDisplay.tsx index d40b9ecf..24b10612 100644 --- a/packages/devtools-extension/src/DevtoolsView/CurrentStateDisplay.tsx +++ b/packages/devtools-extension/src/DevtoolsView/CurrentStateDisplay.tsx @@ -1,6 +1,6 @@ import React from "react"; import ReactJson from "react-json-view"; -import {AsyncStateStatus, useSource, useSourceLane} from "react-async-states"; +import {Status, useSource, useSourceLane} from "react-async-states"; import {DevtoolsJournalEvent} from "react-async-states/dist/devtools"; import { currentJournal, @@ -84,34 +84,34 @@ type SiderDisplayProps = { lanes?: string; }; -function getBackgroundColorFromStatus(status: AsyncStateStatus | undefined) { +function getBackgroundColorFromStatus(status: Status | undefined) { switch (status) { - case AsyncStateStatus.error: + case Status.error: return "#EB6774"; - case AsyncStateStatus.initial: + case Status.initial: return "#DEDEDE"; - case AsyncStateStatus.aborted: + case Status.aborted: return "#787878"; - case AsyncStateStatus.pending: + case Status.pending: return "#5B95DB"; - case AsyncStateStatus.success: + case Status.success: return "#17A449"; default: return undefined; } } -function getColorFromStatus(status: AsyncStateStatus | undefined) { +function getColorFromStatus(status: Status | undefined) { switch (status) { - case AsyncStateStatus.error: + case Status.error: return "white"; - case AsyncStateStatus.initial: + case Status.initial: return "black"; - case AsyncStateStatus.aborted: + case Status.aborted: return "white"; - case AsyncStateStatus.pending: + case Status.pending: return "white"; - case AsyncStateStatus.success: + case Status.success: return "white"; default: return undefined; @@ -155,7 +155,7 @@ export const SideKey = React.memo(function SiderKey({ currentJournal.setState(null); currentState.setState(`${uniqueId}`); }} - disabled={status === AsyncStateStatus.pending} + disabled={status === Status.pending} >
    (""); - const [status, setStatus] = React.useState(AsyncStateStatus.success); + const [status, setStatus] = React.useState(Status.success); return ( <> {state.data} diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/outside-provider/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/outside-provider/index.test.tsx index a273ecf9..92087625 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/outside-provider/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/outside-provider/index.test.tsx @@ -4,7 +4,7 @@ import { UseAsyncState, } from "../../../../../types.internal"; import {useAsyncState} from "../../../../../react/useAsyncState"; -import {AsyncStateStatus} from "../../../../../async-state"; +import {Status} from "../../../../../async-state"; describe('should do basic subscription to an async state', () => { it('should subscribe and get initial value -- sync ' + @@ -112,7 +112,7 @@ describe('should do basic subscription to an async state', () => { run(data - 1); } - const isPending = status === AsyncStateStatus.pending; + const isPending = status === Status.pending; return (
    @@ -142,7 +142,7 @@ describe('should do basic subscription to an async state', () => { fireEvent.click(incrementBtn); }); // pending state is now skipped! - expect(screen.getByTestId("status").innerHTML).toEqual(AsyncStateStatus.initial); + expect(screen.getByTestId("status").innerHTML).toEqual(Status.initial); expect(screen.getByTestId("result").innerHTML).toEqual("0"); expect(screen.getByTestId("pending").innerHTML).toEqual(""); @@ -151,7 +151,7 @@ describe('should do basic subscription to an async state', () => { }); // pending state is now !! - expect(screen.getByTestId("status").innerHTML).toEqual(AsyncStateStatus.pending); + expect(screen.getByTestId("status").innerHTML).toEqual(Status.pending); expect(screen.getByTestId("result").innerHTML).toEqual(""); expect(screen.getByTestId("pending").innerHTML).toEqual(pendingText); @@ -159,7 +159,7 @@ describe('should do basic subscription to an async state', () => { await jest.advanceTimersByTime(10); }); - expect(screen.getByTestId("status").innerHTML).toEqual(AsyncStateStatus.success); + expect(screen.getByTestId("status").innerHTML).toEqual(Status.success); expect(screen.getByTestId("result").innerHTML).toEqual("1"); expect(screen.getByTestId("pending").innerHTML).toEqual(""); }); diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/post-subscribe/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/post-subscribe/index.test.tsx index a81bd639..5e5c5049 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/post-subscribe/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/post-subscribe/index.test.tsx @@ -2,7 +2,7 @@ import * as React from "react"; import {act, fireEvent, render, screen} from "@testing-library/react"; import AsyncStateComponent from "../../../utils/AsyncStateComponent"; import {UseAsyncState} from "../../../../../types.internal"; -import {AsyncStateStatus, createSource} from "../../../../../async-state"; +import {Status, createSource} from "../../../../../async-state"; import {mockDateNow, TESTS_TS} from "../../../utils/setup"; // @ts-ignore @@ -81,7 +81,7 @@ describe('should post subscribe', () => { ) expect(mocked).toHaveBeenCalledTimes(2); // 1 strict mode expect(mocked).toHaveBeenCalledWith({ - status: AsyncStateStatus.initial, + status: Status.initial, timestamp: TESTS_TS, props: null, data: 0 @@ -103,7 +103,7 @@ describe('should post subscribe', () => { await jest.advanceTimersByTime(9); }); - expect(screen.getByTestId("status").innerHTML).toEqual(AsyncStateStatus.pending); + expect(screen.getByTestId("status").innerHTML).toEqual(Status.pending); onAbort.mockClear(); act(() => { diff --git a/packages/react-async-states/src/__tests__/v2/get-flags.test.ts b/packages/react-async-states/src/__tests__/v2/get-flags.test.ts index cf875ea7..214998b8 100644 --- a/packages/react-async-states/src/__tests__/v2/get-flags.test.ts +++ b/packages/react-async-states/src/__tests__/v2/get-flags.test.ts @@ -1,116 +1,125 @@ -import {getFlagsFromConfig} from "../../react/useAsyncStateBase"; import { - AUTO_RUN, CONFIG_FUNCTION, CONFIG_OBJECT, CONFIG_SOURCE, - CONFIG_STRING, FORK, HOIST, INSIDE_PROVIDER, LANE, SOURCE, - STANDALONE, WAIT + AUTO_RUN, + CONFIG_FUNCTION, + CONFIG_OBJECT, + CONFIG_SOURCE, + CONFIG_STRING, + FORK, + HOIST, + INSIDE_PROVIDER, + LANE, + SOURCE, + STANDALONE, + WAIT } from "../../react/StateHookFlags"; import {AsyncStateManager, createSource} from "../../async-state"; +import {resolveFlags} from "../../react/StateHook"; -describe('getFlagsFromConfig', () => { +describe('resolveFlags', () => { describe('get flags from config outside provider', () => { it('should correctly infer configuration from key: -- string --', () => { - expect(getFlagsFromConfig("key", null)) + expect(resolveFlags("key", null)) .toEqual(CONFIG_STRING | STANDALONE); - expect(getFlagsFromConfig("key", null, { + expect(resolveFlags("key", null, { lazy: false, - hoistToProvider: true + hoist: true })) .toEqual(CONFIG_STRING | AUTO_RUN | HOIST); - expect(getFlagsFromConfig("key", null, {fork: true})) + expect(resolveFlags("key", null, {fork: true})) .toEqual(CONFIG_STRING | STANDALONE | FORK); - expect(getFlagsFromConfig("key", null, {lane: "lane"})) + expect(resolveFlags("key", null, {lane: "lane"})) .toEqual(CONFIG_STRING | STANDALONE | LANE); }); it('should correctly infer configuration from key: -- object with key --', () => { let key = "key" - expect(getFlagsFromConfig({key}, null)) + expect(resolveFlags({key}, null)) .toEqual(CONFIG_OBJECT | STANDALONE); - expect(getFlagsFromConfig({key, lazy: false, hoistToProvider: true}, null)) + expect(resolveFlags({key, lazy: false, hoist: true}, null)) .toEqual(CONFIG_OBJECT | AUTO_RUN | HOIST); - expect(getFlagsFromConfig({key}, null, {fork: true})) + expect(resolveFlags({key}, null, {fork: true})) .toEqual(CONFIG_OBJECT | STANDALONE | FORK); - expect(getFlagsFromConfig({key, lane: "lane"}, null)) + expect(resolveFlags({key, lane: "lane"}, null)) .toEqual(CONFIG_OBJECT | STANDALONE | LANE); - expect(getFlagsFromConfig({key, producer: () => 5}, null, {lazy: false})) + expect(resolveFlags({key, producer: () => 5}, null, {lazy: false})) .toEqual(CONFIG_OBJECT | STANDALONE | AUTO_RUN); }); it('should correctly infer configuration from source: -- source --', () => { let source = createSource("tmp"); - expect(getFlagsFromConfig(source, null)) + expect(resolveFlags(source, null)) .toEqual(CONFIG_SOURCE | SOURCE); - expect(getFlagsFromConfig(source, null, {lazy: false})) + expect(resolveFlags(source, null, {lazy: false})) .toEqual(CONFIG_SOURCE | SOURCE | AUTO_RUN); - expect(getFlagsFromConfig(source, null, {fork: true})) + expect(resolveFlags(source, null, {fork: true})) .toEqual(CONFIG_SOURCE | SOURCE | FORK); - expect(getFlagsFromConfig(source, null, {lane: "lane"})) + expect(resolveFlags(source, null, {lane: "lane"})) .toEqual(CONFIG_SOURCE | SOURCE | LANE); - expect(getFlagsFromConfig(source, null, {producer: () => 5, lazy: false})) + expect(resolveFlags(source, null, {producer: () => 5, lazy: false})) .toEqual(CONFIG_SOURCE | SOURCE | AUTO_RUN); }); it('should correctly infer configuration from source: -- object with source --', () => { let source = createSource("tmp"); - expect(getFlagsFromConfig({source}, null)) + expect(resolveFlags({source}, null)) .toEqual(CONFIG_OBJECT | SOURCE); - expect(getFlagsFromConfig({source}, null, {lazy: false})) + expect(resolveFlags({source}, null, {lazy: false})) .toEqual(CONFIG_OBJECT | SOURCE | AUTO_RUN); - expect(getFlagsFromConfig({source}, null, {fork: true})) + expect(resolveFlags({source}, null, {fork: true})) .toEqual(CONFIG_OBJECT | SOURCE | FORK); - expect(getFlagsFromConfig({source}, null, {lane: "lane"})) + expect(resolveFlags({source}, null, {lane: "lane"})) .toEqual(CONFIG_OBJECT | SOURCE | LANE); - expect(getFlagsFromConfig({source, producer: () => 5, lazy: false}, null)) + expect(resolveFlags({source, producer: () => 5, lazy: false}, null)) .toEqual(CONFIG_OBJECT | SOURCE | AUTO_RUN); }); it('should correctly infer configuration from producer: -- producer --', () => { let producer = () => 5; - expect(getFlagsFromConfig(producer, null)) + expect(resolveFlags(producer, null)) .toEqual(CONFIG_FUNCTION | STANDALONE); - expect(getFlagsFromConfig(producer, null, {lazy: false})) + expect(resolveFlags(producer, null, {lazy: false})) .toEqual(CONFIG_FUNCTION | STANDALONE | AUTO_RUN); - expect(getFlagsFromConfig(producer, null, {fork: true})) + expect(resolveFlags(producer, null, {fork: true})) .toEqual(CONFIG_FUNCTION | STANDALONE | FORK); - expect(getFlagsFromConfig(producer, null, {lane: "lane"})) + expect(resolveFlags(producer, null, {lane: "lane"})) .toEqual(CONFIG_FUNCTION | STANDALONE | LANE); }); it('should correctly infer configuration from producer: -- object with producer --', () => { let producer = () => 5; - expect(getFlagsFromConfig({producer}, null)) + expect(resolveFlags({producer}, null)) .toEqual(CONFIG_OBJECT | STANDALONE); - expect(getFlagsFromConfig({producer}, null, {lazy: false})) + expect(resolveFlags({producer}, null, {lazy: false})) .toEqual(CONFIG_OBJECT | STANDALONE | AUTO_RUN); - expect(getFlagsFromConfig({producer}, null, {fork: true})) + expect(resolveFlags({producer}, null, {fork: true})) .toEqual(CONFIG_OBJECT | STANDALONE | FORK); - expect(getFlagsFromConfig({producer}, null, {lane: "lane"})) + expect(resolveFlags({producer}, null, {lane: "lane"})) .toEqual(CONFIG_OBJECT | STANDALONE | LANE); }); it('should correctly infer configuration from object: -- remaining cases --', () => { - expect(getFlagsFromConfig({ + expect(resolveFlags({ key: "test", payload: {}, lazy: false, @@ -125,127 +134,127 @@ describe('getFlagsFromConfig', () => { it('should correctly infer configuration from key: -- string --', () => { let manager = AsyncStateManager({key: {key: "key"}}); - expect(getFlagsFromConfig("key", manager)) + expect(resolveFlags("key", manager)) .toEqual(CONFIG_STRING | INSIDE_PROVIDER); - expect(getFlagsFromConfig("not-existing", manager)) + expect(resolveFlags("not-existing", manager)) .toEqual(CONFIG_STRING | INSIDE_PROVIDER | WAIT); - expect(getFlagsFromConfig("key", manager, { + expect(resolveFlags("key", manager, { lazy: false, - hoistToProvider: true + hoist: true })) .toEqual(CONFIG_STRING | INSIDE_PROVIDER | HOIST | AUTO_RUN); - expect(getFlagsFromConfig("key", manager, {fork: true})) + expect(resolveFlags("key", manager, {fork: true})) .toEqual(CONFIG_STRING | INSIDE_PROVIDER | FORK); - expect(getFlagsFromConfig("key", manager, {lane: "lane"})) + expect(resolveFlags("key", manager, {lane: "lane"})) .toEqual(CONFIG_STRING | INSIDE_PROVIDER | LANE); }); it('should correctly infer configuration from key: -- object with key --', () => { let key = "key"; let manager = AsyncStateManager({key: {key}}); - expect(getFlagsFromConfig({key}, manager)) + expect(resolveFlags({key}, manager)) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER); - expect(getFlagsFromConfig({key: "not-existing", lazy: false}, manager)) + expect(resolveFlags({key: "not-existing", lazy: false}, manager)) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | WAIT | AUTO_RUN); - expect(getFlagsFromConfig({key, lazy: false, hoistToProvider: true}, manager)) + expect(resolveFlags({key, lazy: false, hoist: true}, manager)) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | AUTO_RUN | HOIST); - expect(getFlagsFromConfig({key}, manager, {fork: true})) + expect(resolveFlags({key}, manager, {fork: true})) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | FORK); - expect(getFlagsFromConfig({key, lane: "lane"}, manager)) + expect(resolveFlags({key, lane: "lane"}, manager)) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | LANE); - expect(getFlagsFromConfig({key, producer: () => 5}, manager, {lazy: false})) + expect(resolveFlags({key, producer: () => 5}, manager, {lazy: false})) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | AUTO_RUN); }); it('should correctly infer configuration from source: -- source --', () => { let source = createSource("tmp"); let manager = AsyncStateManager({key: source}); - expect(getFlagsFromConfig(source, manager)) + expect(resolveFlags(source, manager)) .toEqual(CONFIG_SOURCE | INSIDE_PROVIDER | SOURCE); - expect(getFlagsFromConfig(source, manager, {lazy: false})) + expect(resolveFlags(source, manager, {lazy: false})) .toEqual(CONFIG_SOURCE | INSIDE_PROVIDER | SOURCE | AUTO_RUN); - expect(getFlagsFromConfig(source, manager, {fork: true})) + expect(resolveFlags(source, manager, {fork: true})) .toEqual(CONFIG_SOURCE | INSIDE_PROVIDER | SOURCE | FORK); - expect(getFlagsFromConfig(source, manager, {lane: "lane"})) + expect(resolveFlags(source, manager, {lane: "lane"})) .toEqual(CONFIG_SOURCE | INSIDE_PROVIDER | SOURCE | LANE); - expect(getFlagsFromConfig(source, manager, {producer: () => 5, lazy: false})) + expect(resolveFlags(source, manager, {producer: () => 5, lazy: false})) .toEqual(CONFIG_SOURCE | INSIDE_PROVIDER | SOURCE | AUTO_RUN); }); it('should correctly infer configuration from source: -- object with source --', () => { let source = createSource("tmp"); let manager = AsyncStateManager({key: source}); - expect(getFlagsFromConfig({source}, manager)) + expect(resolveFlags({source}, manager)) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | SOURCE); - expect(getFlagsFromConfig({source}, manager, {lazy: false})) + expect(resolveFlags({source}, manager, {lazy: false})) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | SOURCE | AUTO_RUN); - expect(getFlagsFromConfig({source}, manager, {fork: true})) + expect(resolveFlags({source}, manager, {fork: true})) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | SOURCE | FORK); - expect(getFlagsFromConfig({source}, manager, {lane: "lane"})) + expect(resolveFlags({source}, manager, {lane: "lane"})) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | SOURCE | LANE); - expect(getFlagsFromConfig({source, producer: () => 5, lazy: false}, manager)) + expect(resolveFlags({source, producer: () => 5, lazy: false}, manager)) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | SOURCE | AUTO_RUN); }); it('should correctly infer configuration from producer: -- producer --', () => { let producer = () => 5; let manager = AsyncStateManager({key: {key: "key", producer}}); - expect(getFlagsFromConfig(producer, manager)) + expect(resolveFlags(producer, manager)) .toEqual(CONFIG_FUNCTION | INSIDE_PROVIDER | STANDALONE); - expect(getFlagsFromConfig(producer, manager, {lazy: false})) + expect(resolveFlags(producer, manager, {lazy: false})) .toEqual(CONFIG_FUNCTION | INSIDE_PROVIDER | STANDALONE | AUTO_RUN); - expect(getFlagsFromConfig(producer, manager, {fork: true})) + expect(resolveFlags(producer, manager, {fork: true})) .toEqual(CONFIG_FUNCTION | INSIDE_PROVIDER | STANDALONE | FORK); - expect(getFlagsFromConfig(producer, manager, {lane: "lane"})) + expect(resolveFlags(producer, manager, {lane: "lane"})) .toEqual(CONFIG_FUNCTION | INSIDE_PROVIDER | STANDALONE | LANE); }); it('should correctly infer configuration from producer: -- object with producer --', () => { let producer = () => 5; let manager = AsyncStateManager({key: {key: "key", producer}}); - expect(getFlagsFromConfig({producer}, manager)) + expect(resolveFlags({producer}, manager)) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | STANDALONE); - expect(getFlagsFromConfig({producer}, manager, {lazy: false})) + expect(resolveFlags({producer}, manager, {lazy: false})) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | STANDALONE | AUTO_RUN); - expect(getFlagsFromConfig({producer}, manager, {fork: true})) + expect(resolveFlags({producer}, manager, {fork: true})) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | STANDALONE | FORK); - expect(getFlagsFromConfig({producer}, manager, {lane: "lane"})) + expect(resolveFlags({producer}, manager, {lane: "lane"})) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | STANDALONE | LANE); // listen to the existing! - expect(getFlagsFromConfig({key: "key", producer}, manager, {hoistToProvider: true})) + expect(resolveFlags({key: "key", producer}, manager, {hoist: true})) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | HOIST); - expect(getFlagsFromConfig({key: "key2", producer}, manager, {hoistToProvider: true})) + expect(resolveFlags({key: "key2", producer}, manager, {hoist: true})) .toEqual(CONFIG_OBJECT | INSIDE_PROVIDER | HOIST); }); it('should correctly infer configuration from object: -- remaining cases --', () => { let manager = AsyncStateManager({key: {key: "key"}}); - expect(getFlagsFromConfig({ + expect(resolveFlags({ key: "test", payload: {}, lazy: false, @@ -253,7 +262,7 @@ describe('getFlagsFromConfig', () => { }, manager)) .toEqual(CONFIG_OBJECT | AUTO_RUN | INSIDE_PROVIDER | WAIT); - expect(getFlagsFromConfig({ + expect(resolveFlags({ key: "key", payload: {}, lazy: false, diff --git a/packages/react-async-states/src/__tests__/v2/resolve-instance.test.ts b/packages/react-async-states/src/__tests__/v2/resolve-instance.test.ts index 43dfe1c4..fadf2b94 100644 --- a/packages/react-async-states/src/__tests__/v2/resolve-instance.test.ts +++ b/packages/react-async-states/src/__tests__/v2/resolve-instance.test.ts @@ -1,4 +1,4 @@ -import {createStateHook, resolveInstance, StateHook} from "../../react/useAsyncStateBase"; +import {createStateHook} from "../../react/useAsyncStateBase"; import { CONFIG_OBJECT, CONFIG_SOURCE, CONFIG_STRING, FORK, HOIST, @@ -7,6 +7,7 @@ import { WAIT } from "../../react/StateHookFlags"; import AsyncState, {AsyncStateManager} from "../../async-state"; +import {resolveInstance, StateHook} from "../../react/StateHook"; describe('resolveInstance', () => { it('should resolve instance in WAIT mode', () => { @@ -59,7 +60,7 @@ describe('resolveInstance', () => { expect( resolveInstance( CONFIG_OBJECT | INSIDE_PROVIDER | HOIST, - {key: "key", hoistToProviderConfig: {override: true}}, + {key: "key", hoistConfig: {override: true}}, manager, null) ).not.toBe(instance); diff --git a/packages/react-async-states/src/async-state/AsyncState.ts b/packages/react-async-states/src/async-state/AsyncState.ts index 2eb8c432..10d9b832 100644 --- a/packages/react-async-states/src/async-state/AsyncState.ts +++ b/packages/react-async-states/src/async-state/AsyncState.ts @@ -154,7 +154,7 @@ class AsyncState implements StateInterface { notify: boolean = true ): void { - if (newState.status === AsyncStateStatus.pending && this.config.skipPendingStatus) { + if (newState.status === Status.pending && this.config.skipPendingStatus) { return; } @@ -166,7 +166,7 @@ class AsyncState implements StateInterface { this.pendingUpdate = null; } - if (newState.status === AsyncStateStatus.pending) { + if (newState.status === Status.pending) { if ( areRunEffectsSupported() && this.config.skipPendingDelayMs @@ -182,14 +182,14 @@ class AsyncState implements StateInterface { this.version += 1; if (__DEV__) devtools.emitUpdate(this); - if (this.state.status === AsyncStateStatus.success) { + if (this.state.status === Status.success) { this.lastSuccess = this.state; if (isCacheEnabled(this)) { saveCacheAfterSuccessfulUpdate(this); } } - if (this.state.status !== AsyncStateStatus.pending) { + if (this.state.status !== Status.pending) { this.suspender = undefined; } @@ -234,13 +234,13 @@ class AsyncState implements StateInterface { setState( newValue: T | StateFunctionUpdater, - status = AsyncStateStatus.success, + status = Status.success, ): void { if (!StateBuilder[status]) { throw new Error(`Couldn't replace state to unknown status ${status}.`); } this.willUpdate = true; - if (this.state?.status === AsyncStateStatus.pending) { + if (this.state?.status === Status.pending) { this.abort(); this.currentAbort = undefined; } @@ -382,10 +382,10 @@ class AsyncState implements StateInterface { const now = Date.now(); switch (this.config.runEffect) { - case ProducerRunEffects.delay: - case ProducerRunEffects.debounce: - case ProducerRunEffects.takeLast: - case ProducerRunEffects.takeLatest: { + case RunEffect.delay: + case RunEffect.debounce: + case RunEffect.takeLast: + case RunEffect.takeLatest: { if (this.pendingTimeout) { const deadline = this.pendingTimeout.startDate + effectDurationMs; if (now < deadline) { @@ -394,9 +394,9 @@ class AsyncState implements StateInterface { } return scheduleDelayedRun(now); } - case ProducerRunEffects.throttle: - case ProducerRunEffects.takeFirst: - case ProducerRunEffects.takeLeading: { + case RunEffect.throttle: + case RunEffect.takeFirst: + case RunEffect.takeLeading: { if (this.pendingTimeout) { const deadline = this.pendingTimeout.startDate + effectDurationMs; if (now <= deadline) { @@ -427,7 +427,7 @@ class AsyncState implements StateInterface { ): AbortFn { this.willUpdate = true; - if (this.state.status === AsyncStateStatus.pending || this.pendingUpdate) { + if (this.state.status === Status.pending || this.pendingUpdate) { if (this.pendingUpdate) { clearTimeout(this.pendingUpdate.timeoutId); // this.pendingUpdate.callback(); skip the callback! @@ -615,9 +615,9 @@ function constructPropsObject( function emit( updater: T | StateFunctionUpdater, - status?: AsyncStateStatus + status?: Status ): void { - if (runIndicators.cleared && instance.state.status === AsyncStateStatus.aborted) { + if (runIndicators.cleared && instance.state.status === Status.aborted) { console.error("You are emitting while your producer is passing to aborted state." + "This has no effect and not supported by the library. The next " + "state value on aborted state is the reason of the abort."); @@ -876,7 +876,7 @@ function isCacheEnabled(instance: StateInterface): boolean { function state( - status: AsyncStateStatus, + status: Status, data: T | any, props: ProducerSavedProps | null ): State { @@ -884,20 +884,20 @@ function state( } export const StateBuilder = Object.freeze({ - initial: (initialValue) => state(AsyncStateStatus.initial, initialValue, null), + initial: (initialValue) => state(Status.initial, initialValue, null), error: ( data, props - ) => state(AsyncStateStatus.error, data, props), + ) => state(Status.error, data, props), success: ( data, props - ) => state(AsyncStateStatus.success, data, props), - pending: props => state(AsyncStateStatus.pending, null, props), + ) => state(Status.success, data, props), + pending: props => state(Status.pending, null, props), aborted: ( reason, props - ) => state(AsyncStateStatus.aborted, reason, props), + ) => state(Status.aborted, reason, props), }) as StateBuilderInterface; //endregion @@ -960,8 +960,8 @@ export function runWhileSubscribingToNextResolve( props.onAbort(abort); function subscription(newState: State) { - if (newState.status === AsyncStateStatus.success - || newState.status === AsyncStateStatus.error) { + if (newState.status === Status.success + || newState.status === Status.error) { if (typeof unsubscribe === "function") { unsubscribe(); } @@ -1010,15 +1010,15 @@ export function wrapProducerFunction(instance: StateInterface): ProducerFu instance.setState(props.args[0], props.args[1]); if (callbacks) { switch (instance.state.status) { - case AsyncStateStatus.success: { + case Status.success: { callbacks.onSuccess?.(instance.state); break; } - case AsyncStateStatus.aborted: { + case Status.aborted: { callbacks.onAborted?.(instance.state); break; } - case AsyncStateStatus.error: { + case Status.error: { callbacks.onError?.(instance.state); break; } @@ -1231,7 +1231,7 @@ export interface BaseSource { setState( updater: StateFunctionUpdater | T, - status?: AsyncStateStatus, + status?: Status, ): void; // subscriptions @@ -1333,7 +1333,7 @@ export interface RUNCProps extends ProducerCallbacks { args?: any[], } -export enum AsyncStateStatus { +export enum Status { error = "error", pending = "pending", success = "success", @@ -1341,7 +1341,7 @@ export enum AsyncStateStatus { initial = "initial", } -export enum ProducerRunEffects { +export enum RunEffect { delay = "delay", debounce = "debounce", takeLast = "takeLast", @@ -1355,7 +1355,7 @@ export enum ProducerRunEffects { export type State = { data: T, timestamp: number, - status: AsyncStateStatus, + status: Status, props?: ProducerSavedProps | null, }; @@ -1416,7 +1416,7 @@ export type ProducerConfig = { initialValue?: T | ((cache: Record>) => T), cacheConfig?: CacheConfig, runEffectDurationMs?: number, - runEffect?: ProducerRunEffects, + runEffect?: RunEffect, skipPendingDelayMs?: number, resetStateOnDispose?: boolean, @@ -1428,7 +1428,7 @@ export type StateFunctionUpdater = (updater: State) => T; export type StateUpdater = ( updater: T | StateFunctionUpdater, - status?: AsyncStateStatus + status?: Status ) => void; export interface Source extends BaseSource { @@ -1457,7 +1457,7 @@ export type StateSubscription = { export type OnCacheLoadProps = { cache: Record>, setState( - newValue: T | StateFunctionUpdater, status?: AsyncStateStatus): void + newValue: T | StateFunctionUpdater, status?: Status): void } export type CacheConfig = { diff --git a/packages/react-async-states/src/async-state/AsyncStateManager.ts b/packages/react-async-states/src/async-state/AsyncStateManager.ts index 77be41c5..4174a6e2 100644 --- a/packages/react-async-states/src/async-state/AsyncStateManager.ts +++ b/packages/react-async-states/src/async-state/AsyncStateManager.ts @@ -41,7 +41,7 @@ export function AsyncStateManager( let watchers: ManagerWatchers = Object.create(null); // @ts-ignore - // ts is yelling at producerEffectsCreator property which will be assigned + // ts is yelling at createEffects property which will be assigned // in the next statement. const output: AsyncStateManagerInterface = { entries: asyncStateEntries, @@ -54,7 +54,7 @@ export function AsyncStateManager( watchAll, getAllKeys, notifyWatchers, - setInitialStates, + setStates: setInitialStates, getPayload(): Record { return payload; }, @@ -62,7 +62,7 @@ export function AsyncStateManager( Object.assign(payload, partialPayload); } }; - output.producerEffectsCreator = createProducerEffectsCreator(output); + output.createEffects = createProducerEffectsCreator(output); return output; @@ -116,7 +116,7 @@ export function AsyncStateManager( asyncState: StateInterface, ...args: any[] ): AbortFn { - return asyncState.run(output.producerEffectsCreator, ...args); + return asyncState.run(output.createEffects, ...args); } function dispose( @@ -239,7 +239,7 @@ export function AsyncStateManager( function hoist( key: string, instance: StateInterface, - hoistConfig?: HoistToProviderConfig + hoistConfig?: hoistConfig ): StateInterface { const existing = get(key); @@ -343,7 +343,7 @@ function managerProducerRunFunction( if (config?.lane) { instance = instance.getLane(config.lane); } - return instance.run(manager.producerEffectsCreator, ...args); + return instance.run(manager.createEffects, ...args); } return standaloneProducerRunEffectFunction(input, config, ...args); } @@ -389,7 +389,7 @@ function managerProducerSelectFunction( //endregion //region TYPES -export type HoistToProviderConfig = { +export type hoistConfig = { override: boolean, } @@ -422,7 +422,7 @@ export type AsyncStateManagerInterface = { get(key: string): StateInterface, hoist( key: string, instance: StateInterface, - hoistConfig?: HoistToProviderConfig + hoistConfig?: hoistConfig ): StateInterface, dispose(asyncState: StateInterface): boolean, watch( @@ -435,12 +435,12 @@ export type AsyncStateManagerInterface = { ): void, getAllKeys(): string[], watchAll(cb: ManagerWatchCallback), - setInitialStates(initialStates?: InitialStates): AsyncStateEntry[], + setStates(initialStates?: InitialStates): AsyncStateEntry[], getPayload(): Record, mergePayload(partialPayload?: Record): void, - producerEffectsCreator(props: ProducerProps): ProducerEffects, + createEffects(props: ProducerProps): ProducerEffects, } export type InitialStatesObject = { [id: string]: ExtendedInitialAsyncState }; diff --git a/packages/react-async-states/src/async-state/index.ts b/packages/react-async-states/src/async-state/index.ts index 9fe24f91..fe49a9ba 100644 --- a/packages/react-async-states/src/async-state/index.ts +++ b/packages/react-async-states/src/async-state/index.ts @@ -6,8 +6,8 @@ export { createSource, StateBuilder, ProducerType, - AsyncStateStatus, - ProducerRunEffects, + Status, + RunEffect, } from "./AsyncState"; export type { @@ -44,7 +44,7 @@ export type { InitialAsyncState, AsyncStateSelector, InitialStatesObject, - HoistToProviderConfig, + hoistConfig, ExtendedInitialAsyncState, AsyncStateManagerInterface, diff --git a/packages/react-async-states/src/index.ts b/packages/react-async-states/src/index.ts index c50039b1..a9e1c7f1 100644 --- a/packages/react-async-states/src/index.ts +++ b/packages/react-async-states/src/index.ts @@ -12,9 +12,9 @@ export {useSource, useSourceLane, useProducer} from "./react/useAsyncStateBase"; export { createSource, + Status, + RunEffect, ProducerType, - AsyncStateStatus, - ProducerRunEffects, AsyncStateManager, } from "./async-state"; @@ -45,7 +45,7 @@ export type { InitialAsyncState, AsyncStateSelector, InitialStatesObject, - HoistToProviderConfig, + hoistConfig, ExtendedInitialAsyncState, AsyncStateManagerInterface, diff --git a/packages/react-async-states/src/react/StateBoundary.tsx b/packages/react-async-states/src/react/StateBoundary.tsx index a8c91e15..c0370fcd 100644 --- a/packages/react-async-states/src/react/StateBoundary.tsx +++ b/packages/react-async-states/src/react/StateBoundary.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import {AsyncStateStatus, State} from "../async-state"; +import {Status, State} from "../async-state"; import { MixedConfig, RenderStrategy, StateBoundaryProps, @@ -95,17 +95,17 @@ export function FetchThenRenderBoundary(props: StateBoundaryProps) { const result = useAsyncState(props.config, props.dependencies); switch (result.source?.getState().status) { - case AsyncStateStatus.pending: - case AsyncStateStatus.aborted: - case AsyncStateStatus.initial: { + case Status.pending: + case Status.aborted: + case Status.initial: { return ; } - case AsyncStateStatus.error: - case AsyncStateStatus.success: { + case Status.error: + case Status.success: { const children = inferBoundaryChildren(result, props); return ( diff --git a/packages/react-async-states/src/react/StateHook.ts b/packages/react-async-states/src/react/StateHook.ts new file mode 100644 index 00000000..e9cb97c7 --- /dev/null +++ b/packages/react-async-states/src/react/StateHook.ts @@ -0,0 +1,646 @@ +import * as React from "react"; +import { + BaseConfig, + BaseUseAsyncState, + CleanupFn, + MixedConfig, + PartialUseAsyncStateConfiguration, + StateContextValue, + SubscribeEventProps, + UseAsyncState, + UseAsyncStateEventFn, + UseAsyncStateEvents, + UseAsyncStateEventSubscribe +} from "../types.internal"; +import AsyncState, { + AbortFn, + Status, + Producer, + Source, + State, + StateInterface +} from "../async-state"; +import { + AUTO_RUN, + CHANGE_EVENTS, + CONFIG_FUNCTION, + CONFIG_OBJECT, + CONFIG_SOURCE, + CONFIG_STRING, + EQUALITY_CHECK, + FORK, + HOIST, + INSIDE_PROVIDER, + LANE, + NO_MODE, + SELECTOR, + SOURCE, + STANDALONE, + SUBSCRIBE_EVENTS, + WAIT +} from "./StateHookFlags"; +import {__DEV__, shallowClone} from "../shared"; +import {humanizeDevFlags} from "./utils"; +import { + readSource, + standaloneProducerEffectsCreator +} from "../async-state/AsyncState"; +import {isSource} from "../async-state/utils"; +import {nextKey} from "../async-state/key-gen"; +import {computeCallerName} from "./helpers/useCallerName"; + +export interface StateHook { + current: E, + flags: number, + name: string | undefined; + config: MixedConfig, + origin: number | undefined; + version: number | undefined, + base: BaseUseAsyncState, + context: StateContextValue | null, + subscribe: ( + setGuard: React.Dispatch>, + onChange: () => void, + ) => AbortFn, + + instance: StateInterface | null, + + update( + origin: number, + newConfig: MixedConfig, + contextValue: StateContextValue | null, + overrides?: PartialUseAsyncStateConfiguration, + level?: number + ), +} + +export class StateHookImpl implements StateHook { + current: E; + flags: number; + name: string | undefined; + config: MixedConfig; + origin: number | undefined; + version: number | undefined; + base: BaseUseAsyncState; + context: StateContextValue | null; + instance: StateInterface | null; + + subscribe: ( + setGuard: React.Dispatch>, + onChange: () => void, + ) => AbortFn + + constructor() { + this.flags = NO_MODE; + this.context = null; + } + + update( + origin: number, + newConfig: MixedConfig, + contextValue: StateContextValue | null, + overrides?: PartialUseAsyncStateConfiguration, + level?: number + ) { + let nextFlags = resolveFlags(newConfig, contextValue, overrides); + let instance = resolveInstance(nextFlags, newConfig, contextValue, this, overrides); + + if (!instance && !(nextFlags & WAIT)) { + throw new Error("Mode isn't wait and instance isn't defined! this is a bug"); + } + + if (instance && (nextFlags & CONFIG_OBJECT && (newConfig as BaseConfig).payload)) { + instance.mergePayload((newConfig as BaseConfig).payload); + } + if (instance && (nextFlags & INSIDE_PROVIDER) && contextValue?.getPayload()) { + instance.mergePayload(contextValue.getPayload()); + } + + this.origin = origin; + this.flags = nextFlags; + this.config = newConfig; + this.instance = instance; + this.context = contextValue; + this.base = makeBaseReturn(this); + this.name = calculateSubscriptionKey(this, level); + this.subscribe = createSubscribeAndWatchFunction(this); + } +} + +export function resolveFlags( + mixedConfig: MixedConfig, + contextValue: StateContextValue | null, + overrides?: PartialUseAsyncStateConfiguration, +): number { + + let flags = NO_MODE; + if (contextValue !== null) { + flags |= INSIDE_PROVIDER; + } + + switch (typeof mixedConfig) { + case "function": { + return flags | CONFIG_FUNCTION | STANDALONE | getConfigFlags(overrides); + } + + case "string": { + flags |= CONFIG_STRING | getConfigFlags(overrides); + if (!(flags & HOIST) && !(flags & INSIDE_PROVIDER)) { + return flags | STANDALONE; + } + if (!(flags & HOIST) && !contextValue!.get(mixedConfig)) { + return flags | WAIT; + } + return flags; + } + + case "object": { + // attempt source first + let baseConfig = mixedConfig as BaseConfig; + if (isSource(baseConfig)) { + return flags | CONFIG_SOURCE | SOURCE | getConfigFlags(overrides); + } else if (isSource(baseConfig.source)) { + return flags | CONFIG_OBJECT | SOURCE | getConfigFlags(baseConfig) | getConfigFlags(overrides); + } else { + flags |= CONFIG_OBJECT | getConfigFlags(baseConfig) | getConfigFlags(overrides); + if (!(flags & HOIST) && !(flags & INSIDE_PROVIDER) || !baseConfig.key) { + return flags | STANDALONE; + } + if (!(flags & HOIST) && baseConfig.key && !contextValue!.get(baseConfig.key)) { + return flags | WAIT; + } + return flags; + } + } + default: { + return flags | STANDALONE | getConfigFlags(overrides); + } + } +} + +function getConfigFlags( + config?: PartialUseAsyncStateConfiguration +): number { + if (!config) { + return NO_MODE; + } + + let flags = NO_MODE; + + if (config.hoist) { + flags |= HOIST; + } + if (config.fork) { + flags |= FORK; + } + if (config.lane) { + flags |= LANE; + } + if (config.selector) { + flags |= SELECTOR; + } + if (config.areEqual) { + flags |= EQUALITY_CHECK; + } + if (config.events) { + if (config.events.change) { + flags |= CHANGE_EVENTS; + } + if (config.events.subscribe) { + flags |= SUBSCRIBE_EVENTS; + } + } + // default behavior is lazy=true; so only change if specified explicitly + if (config.lazy === false && config.condition !== false) { + flags |= AUTO_RUN; + } + return flags; +} + + +export function resolveInstance( + flags: number, + config: MixedConfig, + contextValue: StateContextValue | null, + previousHook: StateHook, + overrides?: PartialUseAsyncStateConfiguration +): StateInterface | null { + + if (flags & WAIT) { + return null; + } + + if (flags & SOURCE) { + return resolveSourceInstance(flags, config, overrides); + } + + if (flags & STANDALONE) { + return resolveStandaloneInstance(previousHook, flags, config); + } + + if (flags & INSIDE_PROVIDER) { + return resolveProviderInstance(flags, contextValue, config); + } + + return null; +} + + +function resolveSourceInstance( + flags: number, + config: MixedConfig, + overrides?: PartialUseAsyncStateConfiguration +) { + if (flags & CONFIG_SOURCE) { + let instance = readSource(config as Source); + if (flags & FORK) { + instance = instance.fork(); + } + if (flags & LANE) { // config is a source, so ofc doesn't contain lane prop + let laneKey = overrides?.lane; + instance = instance.getLane(laneKey); + } + return instance; + } + + let givenConfig = config as BaseConfig; + let instance = readSource(givenConfig.source!); + if (flags & FORK) { + instance = instance.fork(givenConfig.forkConfig); + } + if (flags & LANE) { + let laneKey = (config as BaseConfig).lane || overrides?.lane; + return instance.getLane(laneKey) + } + return instance; +} + +function resolveStandaloneInstance( + hook: StateHook, + flags: number, + config: MixedConfig +) { + + let canReuse = hook && !!hook.instance && !!(hook.flags & STANDALONE); + if (canReuse) { + patchInstance(hook.instance!, flags, config); + return hook.instance; + } + + let key = readKeyFromConfig(flags, config, null); + let producer = readProducerFromConfig(flags, config); + let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; + + return new AsyncState(key, producer, producerConfig); +} + +function resolveProviderInstance( + flags: number, + contextValue: StateContextValue | null, + config: MixedConfig +) { + let key: string = flags & CONFIG_STRING + ? (config as string) : (config as BaseConfig).key!; + + if ( + flags & HOIST && + flags & CONFIG_OBJECT && + (config as BaseConfig).hoistConfig?.override) { + // do not check on existing because it is guaranteed to exist + // or else we would have a WAIT flag and quit earlier! + let key = readKeyFromConfig(flags, config, null); + let producer = readProducerFromConfig(flags, config); + let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; + + return new AsyncState(key, producer, producerConfig); + } + + let instance = contextValue!.get(key); + if (instance) { + if (flags & FORK) { + instance = instance.fork((config as BaseConfig).forkConfig); + } + if (flags & LANE) { + return instance.getLane((config as BaseConfig).lane!) + } + return instance; + } else { + let key = readKeyFromConfig(flags, config, null); + let producer = readProducerFromConfig(flags, config); + let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; + + return new AsyncState(key, producer, producerConfig); + } +} + +function patchInstance( + instance: StateInterface, + flags: number, + config: MixedConfig +) { + let key = readKeyFromConfig(flags, config, instance); + let producer = readProducerFromConfig(flags, config); + let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; + + instance.key = key; + instance.replaceProducer(producer); + instance.patchConfig(producerConfig); +} + +function readKeyFromConfig( + flags: number, + config: MixedConfig, + prevInstance: StateInterface | null +): string { + if (flags & CONFIG_STRING) { + return config as string; + } + + if (flags & CONFIG_OBJECT && (config as BaseConfig).key) { + return (config as BaseConfig).key!; + } + + if (!prevInstance) { + return nextKey(); + } + + return prevInstance.key; +} + + +function readProducerFromConfig( + flags: number, + config: MixedConfig, +): Producer | undefined { + if (flags & CONFIG_FUNCTION) { + return config as Producer; + } + + if (flags & CONFIG_OBJECT) { + return (config as BaseConfig).producer; + } + + return undefined; +} + + +export function makeBaseReturn(hook: StateHook) { + if (!hook.instance) { + let {flags, config} = hook; + let key = flags & CONFIG_STRING ? config : (config as BaseConfig).key; + let output = Object.assign({key, flags}) as BaseUseAsyncState; + if (__DEV__) { + output.devFlags = humanizeDevFlags(hook.flags); + } + return output; + } + + let {instance} = hook; + const effectsCreator = hook.context?.createEffects ?? standaloneProducerEffectsCreator; + + let output = Object.assign({}, + instance._source, + { + flags: hook.flags, + source: instance._source, + run: instance.run.bind(instance, effectsCreator), + runp: instance.runp.bind(instance, effectsCreator), + runc: instance.runc.bind(instance, effectsCreator) + } + ) as BaseUseAsyncState; + + if (__DEV__) { + output.devFlags = humanizeDevFlags(hook.flags); + } + return output; +} + + +function calculateSubscriptionKey( + hook: StateHook, level = 9): string | undefined { + if (hook.flags & CONFIG_OBJECT && (hook.config as BaseConfig).subscriptionKey) { + return (hook.config as BaseConfig).subscriptionKey; + } + if (hook.flags & WAIT) { + return; + } + if (__DEV__) { + let callerName = computeCallerName(level); + let index = ++((hook.instance! as AsyncState).subsIndex); + return `${callerName}-${index}`; + } +} + + +export function calculateStateValue( + hook: StateHook, +): Readonly> { + let instance = hook.instance; + + const newState = shallowClone(hook.base); + const newValue = readStateFromInstance(instance, hook.flags, hook.config); + if (instance) { + newState.read = createReadInConcurrentMode.bind(null, instance, newValue); + newState.version = instance?.version; + } + newState.state = newValue; + newState.lastSuccess = instance?.lastSuccess; + return newState; +} + +function createReadInConcurrentMode( + instance: StateInterface, + stateValue: E +) { + if ( + Status.pending === instance.state.status && + instance.suspender + ) { + throw instance.suspender; + } + return stateValue; +} + +function createSubscribeAndWatchFunction( + hook: StateHook, +): ((...args) => AbortFn) { + return function subscribeAndWatch( + setGuard: React.Dispatch>, + onChange: () => void, + ) { + let {flags, instance, config} = hook; + + if (flags & WAIT) { + let key: string = flags & CONFIG_STRING + ? (config as string) : (config as BaseConfig).key!; + + return hook.context!.watch(key, (maybeInstance) => { + if (maybeInstance !== instance) { + setGuard(old => old + 1); + } + }); + } + + let contextValue = hook.context; + + // if we are hoisting or forking, spread the instance for watchers + if (flags & INSIDE_PROVIDER && flags & (HOIST | FORK)) { + const hoistedInstance = contextValue!.hoist( + instance!.key, + instance!, + (config as BaseConfig).hoistConfig + ); + if (hoistedInstance !== instance) { + setGuard(old => old + 1); + return; + } + } + + let didClean = false; + let cleanups: AbortFn[] = [() => didClean = true]; + + function watch(mayBeNewAsyncState) { + if (didClean) { + return; + } + if (mayBeNewAsyncState !== instance) { + setGuard(old => old + 1); + } + } + + if ( + flags & INSIDE_PROVIDER && + !(flags & SOURCE) && + !(flags & STANDALONE) + ) { + cleanups.push(contextValue!.watch(instance!.key, watch)); + } + + // if inside provider and not source request context disposal of instance + if ( + flags & INSIDE_PROVIDER && + !(flags & SOURCE) && + (flags & (HOIST | FORK | STANDALONE)) + ) { + cleanups.push(() => contextValue!.dispose(instance!)); + } + + function onStateChange() { + let newSelectedState = readStateFromInstance(instance, flags, config); + + if (flags & EQUALITY_CHECK) { + let areEqual = (config as PartialUseAsyncStateConfiguration) + .areEqual!(newSelectedState, hook.current); + + if (!areEqual) { + onChange(); + } + } else { + onChange(); + } + + if (flags & CHANGE_EVENTS) { + invokeChangeEvents(instance!.state, (config as BaseConfig).events); + } + } + + // subscription + + cleanups.push(instance!.subscribe({ + key: hook.name, + flags: hook.flags, + cb: onStateChange, + origin: hook.origin, + })); + if (instance!.version !== hook.version) { + onChange(); + } + + if (flags & SUBSCRIBE_EVENTS) { + const effectsCreator = flags & INSIDE_PROVIDER ? + contextValue!.createEffects : standaloneProducerEffectsCreator; + + let unsubscribeFns = invokeSubscribeEvents( + (config as BaseConfig).events!.subscribe!, + instance!.run.bind(instance!, effectsCreator), + instance!, + ); + + if (unsubscribeFns) { + cleanups = cleanups.concat(unsubscribeFns); + } + } + + return function cleanup() { + cleanups.forEach(cb => { + if (cb) { + cb(); + } + }); + } + } +} + +function invokeSubscribeEvents( + events: UseAsyncStateEventSubscribe | undefined, + run: (...args: any[]) => AbortFn, + instance?: StateInterface, +): CleanupFn[] | null { + if (!events || !instance) { + return null; + } + + let eventProps: SubscribeEventProps = { + run, + getState: () => instance.state, + invalidateCache: instance.invalidateCache, + }; + + let handlers: ((props: SubscribeEventProps) => CleanupFn)[] + = Array.isArray(events) ? events : [events]; + + return handlers.map(handler => handler(eventProps)); +} + +function invokeChangeEvents( + nextState: State, + events: UseAsyncStateEvents | undefined +) { + if (!events?.change) { + return; + } + + const changeHandlers: UseAsyncStateEventFn[] + = Array.isArray(events.change) ? events.change : [events.change]; + + const eventProps = {state: nextState}; + + changeHandlers.forEach(event => { + if (typeof event === "object") { + const {handler, status} = event; + if (!status || nextState.status === status) { + handler(eventProps); + } + } else { + event(eventProps); + } + }); +} + +// come here only in standalone mode + + +function readStateFromInstance>( + asyncState: StateInterface | null, + flags: number, + config: MixedConfig +): E { + if (!asyncState) { + return undefined as E; + } + const selector = flags & SELECTOR + ? (config as PartialUseAsyncStateConfiguration).selector! + : + ((obj): K => obj); + return selector(asyncState.state, asyncState.lastSuccess, asyncState.cache); +} diff --git a/packages/react-async-states/src/react/useAsyncState.ts b/packages/react-async-states/src/react/useAsyncState.ts index 40a5ea5f..a055d460 100644 --- a/packages/react-async-states/src/react/useAsyncState.ts +++ b/packages/react-async-states/src/react/useAsyncState.ts @@ -86,7 +86,7 @@ function useForkAutoAsyncState>( } // hoist -const hoistConfigOverrides = Object.freeze({hoistToProvider: true}); +const hoistConfigOverrides = Object.freeze({hoist: true}); function useHoistAsyncState>( subscriptionConfig: MixedConfig, @@ -101,7 +101,7 @@ function useHoistAsyncState>( // hoistAuto const hoistAutoConfigOverrides = Object.freeze({ - hoistToProvider: true, + hoist: true, lazy: false }); diff --git a/packages/react-async-states/src/react/useAsyncStateBase.ts b/packages/react-async-states/src/react/useAsyncStateBase.ts index cef6c62e..5b33bd12 100644 --- a/packages/react-async-states/src/react/useAsyncStateBase.ts +++ b/packages/react-async-states/src/react/useAsyncStateBase.ts @@ -1,58 +1,27 @@ import * as React from "react"; -import AsyncState, { - AbortFn, - AsyncStateStatus, - Producer, - Source, - State, - StateInterface -} from "../async-state"; +import {Producer, Source, State} from "../async-state"; import { BaseConfig, - BaseUseAsyncState, CleanupFn, MixedConfig, PartialUseAsyncStateConfiguration, StateContextValue, - SubscribeEventProps, UseAsyncState, - UseAsyncStateEventFn, - UseAsyncStateEvents, - UseAsyncStateEventSubscribe, } from "../types.internal"; import {AsyncStateContext} from "./context"; -import {isSource} from "../async-state/utils"; -import { - readSource, - standaloneProducerEffectsCreator -} from "../async-state/AsyncState"; -import { - AUTO_RUN, - CHANGE_EVENTS, - CONFIG_FUNCTION, - CONFIG_OBJECT, - CONFIG_SOURCE, - CONFIG_STRING, - EQUALITY_CHECK, - FORK, - HOIST, - INSIDE_PROVIDER, - LANE, - NO_MODE, - SELECTOR, - SOURCE, - STANDALONE, - SUBSCRIBE_EVENTS, - WAIT -} from "./StateHookFlags"; -import {nextKey} from "../async-state/key-gen"; -import {__DEV__, shallowClone} from "../shared"; -import { - computeCallerName, -} from "./helpers/useCallerName"; -import {humanizeDevFlags} from "./utils"; +import {AUTO_RUN} from "./StateHookFlags"; +import {__DEV__} from "../shared"; +import {emptyArray, noop} from "./utils"; +import {calculateStateValue, StateHook, StateHookImpl} from "./StateHook"; + +export function useCurrentHook(): StateHook { + return React.useMemo>(createStateHook, emptyArray); +} + +export function createStateHook(): StateHook { + return new StateHookImpl(); +} -const emptyArray = []; export const useAsyncStateBase = function useAsyncStateImpl>( mixedConfig: MixedConfig, @@ -227,624 +196,3 @@ export function useProducer( } } - -function invokeSubscribeEvents( - events: UseAsyncStateEventSubscribe | undefined, - run: (...args: any[]) => AbortFn, - instance?: StateInterface, -): CleanupFn[] | null { - if (!events || !instance) { - return null; - } - - let eventProps: SubscribeEventProps = { - run, - getState: () => instance.state, - invalidateCache: instance.invalidateCache, - }; - - let handlers: ((props: SubscribeEventProps) => CleanupFn)[] - = Array.isArray(events) ? events : [events]; - - return handlers.map(handler => handler(eventProps)); -} - - -function invokeChangeEvents( - nextState: State, - events: UseAsyncStateEvents | undefined -) { - if (!events?.change) { - return; - } - - const changeHandlers: UseAsyncStateEventFn[] - = Array.isArray(events.change) ? events.change : [events.change]; - - const eventProps = {state: nextState}; - - changeHandlers.forEach(event => { - if (typeof event === "object") { - const {handler, status} = event; - if (!status || nextState.status === status) { - handler(eventProps); - } - } else { - event(eventProps); - } - }); -} - -function readStateFromInstance>( - asyncState: StateInterface | null, - flags: number, - config: MixedConfig -): E { - if (!asyncState) { - return undefined as E; - } - const selector = flags & SELECTOR - ? (config as PartialUseAsyncStateConfiguration).selector! - : - ((obj): K => obj); - return selector(asyncState.state, asyncState.lastSuccess, asyncState.cache); -} - -class StateHookImpl implements StateHook { - current: E; - flags: number; - name: string | undefined; - config: MixedConfig; - origin: number | undefined; - version: number | undefined; - base: BaseUseAsyncState; - context: StateContextValue | null; - instance: StateInterface | null; - - subscribe: ( - setGuard: React.Dispatch>, - onChange: () => void, - ) => AbortFn - - constructor() { - this.flags = NO_MODE; - this.context = null; - } - - update( - origin: number, - newConfig: MixedConfig, - contextValue: StateContextValue | null, - overrides?: PartialUseAsyncStateConfiguration, - level?: number - ) { - let nextFlags = getFlagsFromConfig(newConfig, contextValue, overrides); - let instance = resolveInstance(nextFlags, newConfig, contextValue, this, overrides); - - if (!instance && !(nextFlags & WAIT)) { - throw new Error("Mode isn't wait and instance isn't defined! this is a bug"); - } - - - if (instance && (nextFlags & CONFIG_OBJECT && (newConfig as BaseConfig).payload)) { - instance.mergePayload((newConfig as BaseConfig).payload); - } - if (instance && (nextFlags & INSIDE_PROVIDER)) { - instance.mergePayload(contextValue?.getPayload()); - } - - this.origin = origin; - this.flags = nextFlags; - this.config = newConfig; - this.instance = instance; - this.context = contextValue; - this.base = makeBaseReturn(this); - this.name = calculateSubscriptionKey(this, level); - this.subscribe = createSubscribeAndWatchFunction(this); - } - -} - -function calculateSubscriptionKey( - hook: StateHook, level = 9): string | undefined { - if (hook.flags & CONFIG_OBJECT && (hook.config as BaseConfig).subscriptionKey) { - return (hook.config as BaseConfig).subscriptionKey; - } - if (hook.flags & WAIT) { - return; - } - if (__DEV__) { - let callerName = computeCallerName(level); - let index = ++((hook.instance! as AsyncState).subsIndex); - return `${callerName}-${index}`; - } -} - -//region useAsyncState value construction -// @ts-ignore -function noop(): undefined { - // that's a noop fn -} - -function makeBaseReturn(hook: StateHook) { - if (!hook.instance) { - let output = { - run: noop, - runc: noop, - abort: noop, - replay: noop, - setState: noop, - flags: hook.flags, - mergePayload: noop, - uniqueId: undefined, - key: "configurationKey", - invalidateCache: noop, - // @ts-ignore - runp: noop as ((...args: any[]) => Promise>), - // @ts-ignore - } as BaseUseAsyncState; - if (__DEV__) { - // @ts-ignore - output.devFlags = humanizeDevFlags(hook.flags); - } - return output; - } - - let instance = hook.instance; - const effectsCreator = hook.context?.producerEffectsCreator ?? standaloneProducerEffectsCreator; - - let output = { - flags: hook.flags, - key: instance.key, - abort: instance.abort, - replay: instance.replay, - source: instance._source, - version: instance.version, - setState: instance.setState, - uniqueId: instance.uniqueId, - mergePayload: instance.mergePayload, - invalidateCache: instance.invalidateCache, - - run: instance.run.bind(instance, effectsCreator), - runp: instance.runp.bind(instance, effectsCreator), - runc: instance.runc.bind(instance, effectsCreator), - }; - if (__DEV__) { - // @ts-ignore - output.devFlags = humanizeDevFlags(hook.flags); - } - return output; -} - -// come here only in standalone mode -function patchInstance( - instance: StateInterface, - flags: number, - config: MixedConfig -) { - let key = readKeyFromConfig(flags, config, instance); - let producer = readProducerFromConfig(flags, config); - let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; - - instance.key = key; - instance.replaceProducer(producer); - instance.patchConfig(producerConfig); -} - -function readProducerFromConfig( - flags: number, - config: MixedConfig, -): Producer | undefined { - if (flags & CONFIG_FUNCTION) { - return config as Producer; - } - - if (flags & CONFIG_OBJECT) { - return (config as BaseConfig).producer; - } - - return undefined; -} - -function readKeyFromConfig( - flags: number, - config: MixedConfig, - prevInstance: StateInterface | null -): string { - if (flags & CONFIG_STRING) { - return config as string; - } - - if (flags & CONFIG_OBJECT && (config as BaseConfig).key) { - return (config as BaseConfig).key!; - } - - if (!prevInstance) { - return nextKey(); - } - - return prevInstance.key; -} - -export function resolveInstance( - flags: number, - config: MixedConfig, - contextValue: StateContextValue | null, - previousHook: StateHook, - overrides?: PartialUseAsyncStateConfiguration -): StateInterface | null { - - if (flags & WAIT) { - return null; - } - - if (flags & SOURCE) { - if (flags & CONFIG_SOURCE) { - let instance = readSource(config as Source); - if (flags & FORK) { - instance = instance.fork(); - } - if (flags & LANE) { - let laneKey = (config as BaseConfig).lane || overrides?.lane; - instance = instance.getLane(laneKey); - } - return instance; - } - - let givenConfig = config as BaseConfig; - let instance = readSource(givenConfig.source!); - if (flags & FORK) { - instance = instance.fork(givenConfig.forkConfig); - } - if (flags & LANE) { - let laneKey = (config as BaseConfig).lane || overrides?.lane; - return instance.getLane(laneKey) - } - return instance; - } - - if (flags & STANDALONE) { - let canReuse = !!previousHook?.instance && !!(previousHook.flags & STANDALONE); - if (canReuse) { - patchInstance(previousHook.instance!, flags, config); - return previousHook.instance; - } - - let key = readKeyFromConfig(flags, config, null); - let producer = readProducerFromConfig(flags, config); - let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; - - return new AsyncState(key, producer, producerConfig); - } - - if (flags & INSIDE_PROVIDER) { - let key: string = flags & CONFIG_STRING - ? (config as string) : (config as BaseConfig).key!; - - if ( - flags & HOIST && - (config as BaseConfig).hoistToProviderConfig?.override) { - // do not check on existing because it is guaranteed to exist - // or else we would have a WAIT flag and quit earlier! - let key = readKeyFromConfig(flags, config, null); - let producer = readProducerFromConfig(flags, config); - let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; - - return new AsyncState(key, producer, producerConfig); - } - - let instance = contextValue!.get(key); - if (instance) { - if (flags & FORK) { - instance = instance.fork((config as BaseConfig).forkConfig); - } - if (flags & LANE) { - return instance.getLane((config as BaseConfig).lane!) - } - return instance; - } else { - let key = readKeyFromConfig(flags, config, null); - let producer = readProducerFromConfig(flags, config); - let producerConfig = flags & CONFIG_OBJECT ? (config as BaseConfig) : undefined; - - return new AsyncState(key, producer, producerConfig); - } - } - - return null; -} - -export interface StateHook { - current: E, - flags: number, - name: string | undefined; - config: MixedConfig, - origin: number | undefined; - version: number | undefined, - base: BaseUseAsyncState, - context: StateContextValue | null, - subscribe: ( - setGuard: React.Dispatch>, - onChange: () => void, - ) => AbortFn, - - instance: StateInterface | null, - - update( - origin: number, - newConfig: MixedConfig, - contextValue: StateContextValue | null, - overrides?: PartialUseAsyncStateConfiguration, - level?: number - ), -} - -export function createStateHook(): StateHook { - return new StateHookImpl(); -} - -function useCurrentHook(): StateHook { - return React.useMemo>(createStateHook, emptyArray); -} - -export function getFlagsFromConfig( - mixedConfig: MixedConfig, - contextValue: StateContextValue | null, - overrides?: PartialUseAsyncStateConfiguration, -): number { - let flags = NO_MODE; - - if (contextValue !== null) { - flags |= INSIDE_PROVIDER; - } - switch (typeof mixedConfig) { - case "function": { - flags |= STANDALONE | CONFIG_FUNCTION; - break; - } - case "string": { - flags |= CONFIG_STRING | getBaseConfigFlags(overrides); - - if (!(flags & HOIST)) { - if (flags & INSIDE_PROVIDER) { - if (!contextValue!.get(mixedConfig)) { - flags |= WAIT; - } - } else { - flags |= STANDALONE; - } - } - break; - } - case "object": { - // attempt source first - if (isSource(mixedConfig)) { - flags |= SOURCE | CONFIG_SOURCE; - } else if (isSource((mixedConfig as BaseConfig).source)) { - flags |= getBaseConfigFlags(mixedConfig) | SOURCE | CONFIG_OBJECT; - } else { - // object and not a source - // bind other possible flags such as fork, hoist.. - flags |= CONFIG_OBJECT | getBaseConfigFlags(mixedConfig) | getBaseConfigFlags(overrides); - if (!(flags & HOIST)) { - if (flags & INSIDE_PROVIDER) { - if ((mixedConfig as BaseConfig).key) { - if (!contextValue!.get((mixedConfig as BaseConfig).key!)) { - flags |= WAIT; - } - } else { - flags |= STANDALONE; - } - } else { - flags |= STANDALONE; - } - } - } - break; - } - default: - break; - } - // bind other possible flags such as fork, hoist.. - if (overrides) { - flags |= getBaseConfigFlags(overrides); - } - - return flags; -} - -function getBaseConfigFlags( - config?: BaseConfig | PartialUseAsyncStateConfiguration -): number { - if (!config) { - return NO_MODE; - } - - let flags = NO_MODE; - - if (config.hoistToProvider) { - flags |= HOIST; - } - if (config.fork) { - flags |= FORK; - } - if (config.lane) { - flags |= LANE; - } - if ((config as PartialUseAsyncStateConfiguration).selector) { - flags |= SELECTOR; - } - if ((config as PartialUseAsyncStateConfiguration).areEqual) { - flags |= EQUALITY_CHECK; - } - if (config.events) { - if (config.events.change) { - flags |= CHANGE_EVENTS; - } - if (config.events.subscribe) { - flags |= SUBSCRIBE_EVENTS; - } - } - - // default behavior is lazy=true; so only change if specified explicitly - if (config.lazy === false && config.condition !== false) { - flags |= AUTO_RUN; - } - - return flags; -} - -function createReadInConcurrentMode( - instance: StateInterface | null, - stateValue: E -) { - return function readInConcurrentMode() { - if (!instance) { - return stateValue; - } - if ( - AsyncStateStatus.pending === instance.state?.status && - instance.suspender - ) { - throw instance.suspender; - } - return stateValue; - } -} - -function createSubscribeAndWatchFunction( - hook: StateHook, -): ((...args) => AbortFn) { - return function subscribeAndWatch( - setGuard: React.Dispatch>, - onChange: () => void, - ) { - - let {flags, instance, config} = hook; - - - if (flags & WAIT) { - let key: string = flags & CONFIG_STRING - ? (config as string) : (config as BaseConfig).key!; - - return hook.context!.watch(key, (maybeInstance) => { - if (maybeInstance !== instance) { - setGuard(old => old + 1); - } - }); - } - - let contextValue = hook.context; - - // if we are hoisting or forking, spread the instance for watchers - if (flags & INSIDE_PROVIDER && flags & (HOIST | FORK)) { - const hoistedInstance = contextValue!.hoist( - instance!.key, - instance!, - (config as BaseConfig).hoistToProviderConfig - ); - if (hoistedInstance !== instance) { - setGuard(old => old + 1); - return; - } - } - - let didClean = false; - let cleanups: AbortFn[] = [() => didClean = true]; - - function watch(mayBeNewAsyncState) { - if (didClean) { - return; - } - if (mayBeNewAsyncState !== instance) { - setGuard(old => old + 1); - } - } - - if ( - flags & INSIDE_PROVIDER && - !(flags & SOURCE) && - !(flags & STANDALONE) - ) { - cleanups.push(contextValue!.watch(instance!.key, watch)); - } - - // if inside provider and not source request context disposal of instance - if ( - flags & INSIDE_PROVIDER && - !(flags & SOURCE) && - (flags & (HOIST | FORK | STANDALONE)) - ) { - cleanups.push(() => contextValue!.dispose(instance!)); - } - - function onStateChange() { - let newSelectedState = readStateFromInstance(instance, flags, config); - - if (flags & EQUALITY_CHECK) { - let areEqual = (config as PartialUseAsyncStateConfiguration) - .areEqual!(newSelectedState, hook.current); - - if (!areEqual) { - onChange(); - } - } else { - onChange(); - } - - if (flags & CHANGE_EVENTS) { - invokeChangeEvents(instance!.state, (config as BaseConfig).events); - } - } - - // subscription - - cleanups.push(instance!.subscribe({ - key: hook.name, - flags: hook.flags, - cb: onStateChange, - origin: hook.origin, - })); - if (instance!.version !== hook.version) { - onChange(); - } - - if (flags & SUBSCRIBE_EVENTS) { - const effectsCreator = flags & INSIDE_PROVIDER ? - contextValue!.producerEffectsCreator : standaloneProducerEffectsCreator; - - let unsubscribeFns = invokeSubscribeEvents( - (config as BaseConfig).events!.subscribe!, - instance!.run.bind(instance!, effectsCreator), - instance!, - ); - - if (unsubscribeFns) { - cleanups = cleanups.concat(unsubscribeFns); - } - } - - return function cleanup() { - cleanups.forEach(cb => { - if (cb) { - cb(); - } - }); - } - } -} - -function calculateStateValue( - hook: StateHook, -): Readonly> { - let instance = hook.instance; - - const newState = shallowClone(hook.base); - const newValue = readStateFromInstance(instance, hook.flags, hook.config); - - newState.read = createReadInConcurrentMode(instance, newValue); - newState.state = newValue; - newState.version = instance?.version; - newState.lastSuccess = instance?.lastSuccess; - return newState; -} diff --git a/packages/react-async-states/src/react/utils.ts b/packages/react-async-states/src/react/utils.ts index f050c79a..8f7fadc0 100644 --- a/packages/react-async-states/src/react/utils.ts +++ b/packages/react-async-states/src/react/utils.ts @@ -11,3 +11,11 @@ export function humanizeDevFlags(flags: number) { }); return out; } + +//region useAsyncState value construction +// @ts-ignore +export function noop(): undefined { + // that's a noop fn +} + +export const emptyArray = []; diff --git a/packages/react-async-states/src/types.internal.ts b/packages/react-async-states/src/types.internal.ts index c603d327..969aa93a 100644 --- a/packages/react-async-states/src/types.internal.ts +++ b/packages/react-async-states/src/types.internal.ts @@ -3,14 +3,14 @@ import {ReactNode} from "react"; import { AbortFn, AsyncStateManagerInterface, - AsyncStateStatus, + Status, CacheConfig, CachedState, ForkConfig, - HoistToProviderConfig, + hoistConfig, Producer, ProducerConfig, - ProducerRunEffects, + RunEffect, Source, State, StateInterface, @@ -28,24 +28,10 @@ export type StateContextValue = AsyncStateManagerInterface; // use async state -export interface BaseUseAsyncState> { - key: string, - +export interface BaseUseAsyncState> extends Source{ flags?: number, - devFlags?: number, source?: Source, - - replay(): AbortFn, - abort(reason?: any): void, - run(...args: any[]): AbortFn, - runp(...args: any[]): Promise>, - - runc(props: RUNCProps): AbortFn, - setState: StateUpdater, - mergePayload(argv: Record): void, - - uniqueId: number | undefined, - invalidateCache(cacheKey?: string): void, + devFlags?: string[], } export interface UseAsyncState> extends BaseUseAsyncState { @@ -53,7 +39,6 @@ export interface UseAsyncState> extends BaseUseAsyncState read(): E, version?: number, lastSuccess?: State, - payload: Record | null, } // interface NewUseAsyncState> extends Source { @@ -90,8 +75,8 @@ export interface BaseConfig extends ProducerConfig{ fork?: boolean, forkConfig?: ForkConfig, - hoistToProvider?: boolean, - hoistToProviderConfig?: HoistToProviderConfig, + hoist?: boolean, + hoistConfig?: hoistConfig, } export interface ConfigWithKeyWithSelector extends ConfigWithKeyWithoutSelector { @@ -142,13 +127,14 @@ export type UseAsyncStateConfiguration> = { runEffectDurationMs?: number, resetStateOnDispose?: boolean, payload?: Record, - runEffect?: ProducerRunEffects, + runEffect?: RunEffect, initialValue?: T | ((cache: Record>) => T), fork?: boolean, forkConfig?: ForkConfig, - hoistToProvider?: boolean, - hoistToProviderConfig?: HoistToProviderConfig, + + hoist?: boolean, + hoistConfig?: hoistConfig, lazy?: boolean, autoRunArgs?: any[], @@ -178,7 +164,7 @@ export type StateBoundaryProps = { render?: StateBoundaryRenderProp, } -export type StateBoundaryRenderProp = Record +export type StateBoundaryRenderProp = Record export type UseAsyncStateEventProps = { state: State, @@ -193,7 +179,7 @@ export type UseAsyncStateEventFn = UseAsyncStateChangeEventHandler; export type UseAsyncStateChangeEvent = { - status: AsyncStateStatus + status: Status handler: UseAsyncStateChangeEventHandler, } From 07de453cda0161825ca0b7cec24d9a3516e1b009 Mon Sep 17 00:00:00 2001 From: Mohamed EL AYADI Date: Sun, 27 Nov 2022 21:57:37 +0100 Subject: [PATCH 12/13] small refactorings --- .../Provider/provider.test.tsx | 2 +- .../lanes/lanes.provider.test.tsx | 2 +- .../useAsyncState/props/effects.run.test.tsx | 2 +- .../useAsyncState/props/effects.runp.test.tsx | 2 +- .../props/effects.select.test.tsx | 2 +- .../subscription/fork/index.test.tsx | 2 +- .../subscription/hoist/index.test.tsx | 2 +- .../subscription/listen/index.test.tsx | 2 +- .../subscription/standalone/index.test.tsx | 2 +- .../useProducer/index.test.tsx | 4 +- .../useSelector/index.test.tsx | 2 +- .../useSource/index.test.tsx | 2 +- .../src/__tests__/v2/resolve-instance.test.ts | 2 +- packages/react-async-states/src/index.ts | 9 +- .../{AsyncStateProvider.tsx => Provider.tsx} | 2 +- .../src/react/StateBoundary.tsx | 2 +- .../src/react/StateHookFlags.ts | 34 +-- .../src/react/useAsyncState.ts | 230 ++++++++++++++++-- .../src/react/useAsyncStateBase.ts | 198 --------------- 19 files changed, 253 insertions(+), 250 deletions(-) rename packages/react-async-states/src/react/{AsyncStateProvider.tsx => Provider.tsx} (98%) delete mode 100644 packages/react-async-states/src/react/useAsyncStateBase.ts diff --git a/packages/react-async-states/src/__tests__/react-async-state/Provider/provider.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/Provider/provider.test.tsx index a9d360bb..738c04ad 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/Provider/provider.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/Provider/provider.test.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import {act, fireEvent, render, screen} from "@testing-library/react"; import {mockDateNow} from "../utils/setup"; -import {AsyncStateProvider} from "../../../react/AsyncStateProvider"; +import {AsyncStateProvider} from "../../../react/Provider"; import {useAsyncState} from "../../../react/useAsyncState"; import {UseAsyncState} from "../../../types.internal"; import {flushPromises} from "../utils/test-utils"; diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/lanes/lanes.provider.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/lanes/lanes.provider.test.tsx index 9d7dd0f2..97de95db 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/lanes/lanes.provider.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/lanes/lanes.provider.test.tsx @@ -2,7 +2,7 @@ import * as React from "react"; import {act, fireEvent, render, screen} from "@testing-library/react"; import {mockDateNow} from "../../utils/setup"; import {useAsyncState} from "../../../../react/useAsyncState"; -import {AsyncStateProvider} from "../../../../react/AsyncStateProvider"; +import {AsyncStateProvider} from "../../../../react/Provider"; import {createSource} from "../../../../async-state"; mockDateNow(); diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/props/effects.run.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/props/effects.run.test.tsx index 588da8d9..abc39971 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/props/effects.run.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/props/effects.run.test.tsx @@ -2,7 +2,7 @@ import * as React from "react"; import {render} from "@testing-library/react"; import AsyncStateComponent from "../../utils/AsyncStateComponent"; import {createSource, Producer, ProducerProps} from "../../../../async-state"; -import {AsyncStateProvider} from "../../../../react/AsyncStateProvider"; +import {AsyncStateProvider} from "../../../../react/Provider"; describe('should run another producer from producer', () => { it('should run producer by source', () => { diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/props/effects.runp.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/props/effects.runp.test.tsx index 08c58f55..f2c4e31b 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/props/effects.runp.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/props/effects.runp.test.tsx @@ -6,7 +6,7 @@ import { ProducerProps } from "../../../../async-state"; import AsyncStateComponent from "../../utils/AsyncStateComponent"; -import {AsyncStateProvider} from "../../../../react/AsyncStateProvider"; +import {AsyncStateProvider} from "../../../../react/Provider"; import {UseAsyncState} from "../../../../types.internal"; import {flushPromises} from "../../utils/test-utils"; import {mockDateNow, TESTS_TS} from "../../utils/setup"; diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/props/effects.select.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/props/effects.select.test.tsx index b0295ea6..b3a741fd 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/props/effects.select.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/props/effects.select.test.tsx @@ -2,7 +2,7 @@ import * as React from "react"; import {render, screen} from "@testing-library/react"; import {useAsyncState} from "../../../../react/useAsyncState"; import {UseAsyncState} from "../../../../types.internal"; -import {AsyncStateProvider} from "../../../../react/AsyncStateProvider"; +import {AsyncStateProvider} from "../../../../react/Provider"; import {createSource, Source, State} from "../../../../async-state"; describe('should select from another async state', () => { diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/fork/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/fork/index.test.tsx index 434ca2fd..c5e4bca4 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/fork/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/fork/index.test.tsx @@ -4,7 +4,7 @@ import { UseAsyncState } from "../../../../../types.internal"; import {useAsyncState} from "../../../../../react/useAsyncState"; -import {AsyncStateProvider} from "../../../../../react/AsyncStateProvider"; +import {AsyncStateProvider} from "../../../../../react/Provider"; import {createSource, ForkConfig} from "../../../../../async-state"; describe('should fork an initially hoisted async state', () => { diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/hoist/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/hoist/index.test.tsx index 4c990a91..f68ce225 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/hoist/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/hoist/index.test.tsx @@ -4,7 +4,7 @@ import { UseAsyncState } from "../../../../../types.internal"; import {useAsyncState} from "../../../../../react/useAsyncState"; -import {AsyncStateProvider} from "../../../../../react/AsyncStateProvider"; +import {AsyncStateProvider} from "../../../../../react/Provider"; import {flushPromises} from "../../../utils/test-utils"; import {mockDateNow, TESTS_TS} from "../../../utils/setup"; diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/listen/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/listen/index.test.tsx index d390cb60..036ad897 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/listen/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/listen/index.test.tsx @@ -4,7 +4,7 @@ import { UseAsyncState } from "../../../../../types.internal"; import {useAsyncState} from "../../../../../react/useAsyncState"; -import {AsyncStateProvider} from "../../../../../react/AsyncStateProvider"; +import {AsyncStateProvider} from "../../../../../react/Provider"; import {mockDateNow, TESTS_TS} from "../../../utils/setup"; import {createSource} from "../../../../../async-state"; diff --git a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/standalone/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/standalone/index.test.tsx index ee386cb6..4b19d86f 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/standalone/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useAsyncState/subscription/standalone/index.test.tsx @@ -4,7 +4,7 @@ import { UseAsyncState } from "../../../../../types.internal"; import {useAsyncState} from "../../../../../react/useAsyncState"; -import {AsyncStateProvider} from "../../../../../react/AsyncStateProvider"; +import {AsyncStateProvider} from "../../../../../react/Provider"; describe('should declare a standalone producer inside a provider', () => { it('should declare a standalone producer inside a provider ', async () => { diff --git a/packages/react-async-states/src/__tests__/react-async-state/useProducer/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useProducer/index.test.tsx index a6a400f3..f50aa13b 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useProducer/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useProducer/index.test.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import {fireEvent, render, screen} from "@testing-library/react"; -import {AsyncStateProvider} from "../../../react/AsyncStateProvider"; -import {useProducer} from "../../../react/useAsyncStateBase"; +import {AsyncStateProvider} from "../../../react/Provider"; +import {useProducer} from "../../../react/useAsyncState"; describe('should useProducer', () => { it('should use a global producer ', async () => { diff --git a/packages/react-async-states/src/__tests__/react-async-state/useSelector/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useSelector/index.test.tsx index 049c3d38..6c6a02b2 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useSelector/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useSelector/index.test.tsx @@ -1,6 +1,6 @@ import * as React from "react"; import {act, fireEvent, render, screen} from "@testing-library/react"; -import {AsyncStateProvider} from "../../../react/AsyncStateProvider"; +import {AsyncStateProvider} from "../../../react/Provider"; import {useSelector} from "../../../react/useSelector"; import {useRun} from "../../../react/useRun"; import {createSource} from "../../../async-state"; diff --git a/packages/react-async-states/src/__tests__/react-async-state/useSource/index.test.tsx b/packages/react-async-states/src/__tests__/react-async-state/useSource/index.test.tsx index 43ad6931..7b82990d 100644 --- a/packages/react-async-states/src/__tests__/react-async-state/useSource/index.test.tsx +++ b/packages/react-async-states/src/__tests__/react-async-state/useSource/index.test.tsx @@ -1,6 +1,6 @@ import * as React from "react"; import {act, render, screen} from "@testing-library/react"; -import {useSource} from "../../../react/useAsyncStateBase"; +import {useSource} from "../../../react/useAsyncState"; import {createSource} from "../../../async-state"; describe('should useSource', () => { diff --git a/packages/react-async-states/src/__tests__/v2/resolve-instance.test.ts b/packages/react-async-states/src/__tests__/v2/resolve-instance.test.ts index fadf2b94..672a2a8e 100644 --- a/packages/react-async-states/src/__tests__/v2/resolve-instance.test.ts +++ b/packages/react-async-states/src/__tests__/v2/resolve-instance.test.ts @@ -1,4 +1,4 @@ -import {createStateHook} from "../../react/useAsyncStateBase"; +import {createStateHook} from "../../react/useAsyncState"; import { CONFIG_OBJECT, CONFIG_SOURCE, CONFIG_STRING, FORK, HOIST, diff --git a/packages/react-async-states/src/index.ts b/packages/react-async-states/src/index.ts index a9e1c7f1..9b7e3ad7 100644 --- a/packages/react-async-states/src/index.ts +++ b/packages/react-async-states/src/index.ts @@ -2,12 +2,11 @@ export {useSelector} from "./react/useSelector"; export {useRun, useRunLane} from "./react/useRun"; -export {useAsyncState} from "./react/useAsyncState"; - -export {AsyncStateProvider} from "./react/AsyncStateProvider"; - -export {useSource, useSourceLane, useProducer} from "./react/useAsyncStateBase"; +export {AsyncStateProvider} from "./react/Provider"; +export { + useAsyncState, useSource, useSourceLane, useProducer +} from "./react/useAsyncState"; export { createSource, diff --git a/packages/react-async-states/src/react/AsyncStateProvider.tsx b/packages/react-async-states/src/react/Provider.tsx similarity index 98% rename from packages/react-async-states/src/react/AsyncStateProvider.tsx rename to packages/react-async-states/src/react/Provider.tsx index 6fdbdc16..6b7725bb 100644 --- a/packages/react-async-states/src/react/AsyncStateProvider.tsx +++ b/packages/react-async-states/src/react/Provider.tsx @@ -85,7 +85,7 @@ export function AsyncStateProvider( function onInitialStatesChange(): { data: AsyncStateEntry[] } { const output = Object.create(null); - output.data = manager.setInitialStates(initialStates); + output.data = manager.setStates(initialStates); return output; } diff --git a/packages/react-async-states/src/react/StateBoundary.tsx b/packages/react-async-states/src/react/StateBoundary.tsx index c0370fcd..8c016082 100644 --- a/packages/react-async-states/src/react/StateBoundary.tsx +++ b/packages/react-async-states/src/react/StateBoundary.tsx @@ -6,6 +6,7 @@ import { UseAsyncState, UseAsyncStateConfiguration, } from "../types.internal"; import {useAsyncState} from "./useAsyncState"; +import {emptyArray} from "./utils"; const StateBoundaryContext = React.createContext(null); @@ -67,7 +68,6 @@ export function FetchAsYouRenderBoundary(props: StateBoundaryProps) ); } -const emptyArray = []; function FetchThenRenderInitialBoundary({ dependencies = emptyArray, result, config }: {dependencies?: any[], result: UseAsyncState, config: MixedConfig}) { diff --git a/packages/react-async-states/src/react/StateHookFlags.ts b/packages/react-async-states/src/react/StateHookFlags.ts index 233f25c4..1f931985 100644 --- a/packages/react-async-states/src/react/StateHookFlags.ts +++ b/packages/react-async-states/src/react/StateHookFlags.ts @@ -1,21 +1,21 @@ -export const NO_MODE = 0b00000_00000_00000_00000; +export const NO_MODE /* */ = 0b00000_00000_00000_00000; -export const CONFIG_STRING = 0b00000_00000_00000_00001; -export const CONFIG_FUNCTION = 0b00000_00000_00000_00010; -export const CONFIG_SOURCE = 0b00000_00000_00000_00100; -export const CONFIG_OBJECT = 0b00000_00000_00000_01000; +export const CONFIG_STRING /* */ = 0b00000_00000_00000_00001; +export const CONFIG_FUNCTION /* */ = 0b00000_00000_00000_00010; +export const CONFIG_SOURCE /* */ = 0b00000_00000_00000_00100; +export const CONFIG_OBJECT /* */ = 0b00000_00000_00000_01000; -export const STANDALONE = 0b00000_00000_00001_00000; -export const SOURCE = 0b00000_00000_00010_00000; -export const FORK = 0b00000_00000_00100_00000; -export const HOIST = 0b00000_00000_01000_00000; +export const STANDALONE /* */ = 0b00000_00000_00001_00000; +export const SOURCE /* */ = 0b00000_00000_00010_00000; +export const FORK /* */ = 0b00000_00000_00100_00000; +export const HOIST /* */ = 0b00000_00000_01000_00000; -export const INSIDE_PROVIDER = 0b00000_00001_00000_00000; -export const AUTO_RUN = 0b00000_00010_00000_00000; -export const WAIT = 0b00000_00100_00000_00000; -export const LANE = 0b00000_01000_00000_00000; +export const INSIDE_PROVIDER /* */ = 0b00000_00001_00000_00000; +export const AUTO_RUN /* */ = 0b00000_00010_00000_00000; +export const WAIT /* */ = 0b00000_00100_00000_00000; +export const LANE /* */ = 0b00000_01000_00000_00000; -export const CHANGE_EVENTS = 0b00001_00000_00000_00000; -export const SUBSCRIBE_EVENTS = 0b00010_00000_00000_00000; -export const SELECTOR = 0b00100_00000_00000_00000; -export const EQUALITY_CHECK = 0b01000_00000_00000_00000; +export const CHANGE_EVENTS /* */ = 0b00001_00000_00000_00000; +export const SUBSCRIBE_EVENTS/* */ = 0b00010_00000_00000_00000; +export const SELECTOR /* */ = 0b00100_00000_00000_00000; +export const EQUALITY_CHECK /* */ = 0b01000_00000_00000_00000; diff --git a/packages/react-async-states/src/react/useAsyncState.ts b/packages/react-async-states/src/react/useAsyncState.ts index a055d460..24ac636e 100644 --- a/packages/react-async-states/src/react/useAsyncState.ts +++ b/packages/react-async-states/src/react/useAsyncState.ts @@ -1,34 +1,236 @@ -import {useAsyncStateBase} from "./useAsyncStateBase"; +import * as React from "react"; +import {Producer, Source, State} from "../async-state"; import { + BaseConfig, + CleanupFn, ConfigWithKeyWithoutSelector, ConfigWithKeyWithSelector, ConfigWithProducerWithoutSelector, ConfigWithProducerWithSelector, ConfigWithSourceWithoutSelector, ConfigWithSourceWithSelector, + MixedConfig, + PartialUseAsyncStateConfiguration, + StateContextValue, UseAsyncState, - MixedConfig } from "../types.internal"; -import {Source, Producer, State} from "../async-state"; +import {AsyncStateContext} from "./context"; +import {AUTO_RUN} from "./StateHookFlags"; +import {__DEV__} from "../shared"; +import {emptyArray, noop} from "./utils"; +import {calculateStateValue, StateHook, StateHookImpl} from "./StateHook"; -// the real implementation is in useAsyncStateBase.tsx +export function useCurrentHook(): StateHook { + return React.useMemo>(createStateHook, emptyArray); +} + +export function createStateHook(): StateHook { + return new StateHookImpl(); +} + +export const useAsyncStateBase = function useAsyncStateImpl>( + mixedConfig: MixedConfig, + deps: any[] = emptyArray, + overrides?: PartialUseAsyncStateConfiguration, +): UseAsyncState { + + const hook: StateHook = useCurrentHook(); + const [guard, setGuard] = React.useState(0); + const contextValue = React.useContext(AsyncStateContext); + + React.useMemo(() => hook.update(1, mixedConfig, contextValue, overrides, 8), + [contextValue, guard, ...deps]); + + const [selectedValue, setSelectedValue] = React + .useState>>(calculateStateValue.bind(null, hook)); + + if ( + selectedValue.version !== hook.instance?.version || + selectedValue.source !== hook.instance?._source + ) { + updateSelectedValue(); + } + + if (hook.current !== selectedValue.state) { + hook.current = selectedValue.state; + } + if (hook.version !== selectedValue.version) { + hook.version = selectedValue.version; + } + + React.useEffect( + hook.subscribe.bind(null, setGuard, updateSelectedValue), + [contextValue, hook.flags, hook.instance] + ); + + React.useEffect(autoRunAsyncState, deps); + + return selectedValue; + + + function updateSelectedValue() { + setSelectedValue(calculateStateValue(hook)); + hook.version = hook.instance?.version; + } + + function autoRunAsyncState(): CleanupFn { + // auto run only if condition is met, and it is not lazy + if (!(hook.flags & AUTO_RUN)) { + return; + } + // if dependencies change, if we run, the cleanup shall abort + let config = (hook.config as BaseConfig); + + if (config.autoRunArgs && Array.isArray(config.autoRunArgs)) { + return hook.base.run(...config.autoRunArgs); + } + return hook.base.run(); + } +} + + +// this is a mini version of useAsyncState +// this hook uses fewer hooks and has fewer capabilities that useAsyncState +// its usage should be when you want to have control over a source +// and you do not intend to have it auto run, dependencies, manage payload +// etc etc. +// this is like useSyncExternalStore, but returns an object with several +// functions that allows controlling the external source. So, may be better ? +// this hook can use directly useSES on the asyncState instance +// but this will require additional memoization to add the other properties +// that UseAsyncState has (abort, mergePayload, invalidateCache, run, replaceState ...) +export function useSource( + source: Source +): UseAsyncState> { + return useSourceLane(source, undefined, __DEV__ ? 9 : undefined); +} + +export function useSourceLane( + source: Source, + lane?: string, + level: number = 8, // used in dev mode only +): UseAsyncState> { + const hook: StateHook> = useCurrentHook(); + const contextValue = React.useContext(AsyncStateContext); -// default + React.useMemo(() => hook.update(2, source, contextValue, {lane}, level), + [contextValue, lane]); + + const [selectedValue, setSelectedValue] = React + .useState>>>(calculateStateValue.bind(null, hook)); + + if ( + selectedValue.version !== hook.instance?.version || + selectedValue.source !== hook.instance?._source + ) { + updateSelectedValue(); + } + + if (hook.current !== selectedValue.state) { + hook.current = selectedValue.state; + } + if (hook.version !== selectedValue.version) { + hook.version = selectedValue.version; + } + + React.useEffect( + hook.subscribe.bind(null, noop, updateSelectedValue), + [contextValue, hook.flags, hook.instance] + ); + + return selectedValue; + + + function updateSelectedValue() { + setSelectedValue(calculateStateValue(hook)); + hook.version = hook.instance?.version; + } + +} + +// this is a mini version of useAsyncState +// this hook uses fewer hooks and has fewer capabilities that useAsyncState +// its usage should be when you want to have control over a producer (may be inline) +// and you do not intend to have it auto run, dependencies, manage payload +// etc etc. +// this is like useSyncExternalStore, but returns an object with several +// functions that allows controlling the external source. So, may be better ? +// this hook can use directly useSES on the asyncState instance +// but this will require additional memoization to add the other properties +// that UseAsyncState has (abort, mergePayload, invalidateCache, run, replaceState ...) +export function useProducer( + producer: Producer, +): UseAsyncState> { + const hook: StateHook> = useCurrentHook(); + const contextValue = React.useContext(AsyncStateContext); + + React.useMemo(() => hook.update(3, producer, contextValue, undefined, 8), [contextValue]); + + const [selectedValue, setSelectedValue] = React + .useState>>>(calculateStateValue.bind(null, hook)); + + if ( + selectedValue.version !== hook.instance?.version || + selectedValue.source !== hook.instance?._source + ) { + updateSelectedValue(); + } + + if (hook.current !== selectedValue.state) { + hook.current = selectedValue.state; + } + if (hook.version !== selectedValue.version) { + hook.version = selectedValue.version; + } + + if (hook.instance!.originalProducer !== producer) { + hook.instance!.replaceProducer(producer); + } + + React.useEffect( + hook.subscribe.bind(null, noop, updateSelectedValue), + [contextValue, hook.flags, hook.instance] + ); + + return selectedValue; + + + function updateSelectedValue() { + setSelectedValue(calculateStateValue(hook)); + hook.version = hook.instance?.version; + } +} function useAsyncStateExport(key: string, deps?: any[]): UseAsyncState function useAsyncStateExport(source: Source, deps?: any[]) function useAsyncStateExport(producer: Producer, deps?: any[]) -function useAsyncStateExport(configWithKeyWithSelector: ConfigWithKeyWithSelector, deps?: any[]) -function useAsyncStateExport(configWithKeyWithoutSelector: ConfigWithKeyWithoutSelector, deps?: any[]) -function useAsyncStateExport(configWithSourceWithSelector: ConfigWithSourceWithSelector, deps?: any[]) -function useAsyncStateExport(configWithSourceWithoutSelector: ConfigWithSourceWithoutSelector, deps?: any[]) -function useAsyncStateExport(configWithProducerWithSelector: ConfigWithProducerWithSelector, deps?: any[]) -function useAsyncStateExport(configWithProducerWithoutSelector: ConfigWithProducerWithoutSelector, deps?: any[]): UseAsyncState -function useAsyncStateExport(mixedConfig: MixedConfig, deps?: any[]): UseAsyncState -function useAsyncStateExport>(mixedConfig: MixedConfig, deps?: any[]): UseAsyncState -{ +function useAsyncStateExport( + configWithKeyWithSelector: ConfigWithKeyWithSelector, deps?: any[]) +function useAsyncStateExport( + configWithKeyWithoutSelector: ConfigWithKeyWithoutSelector, deps?: any[]) +function useAsyncStateExport( + configWithSourceWithSelector: ConfigWithSourceWithSelector, + deps?: any[] +) +function useAsyncStateExport( + configWithSourceWithoutSelector: ConfigWithSourceWithoutSelector, + deps?: any[] +) +function useAsyncStateExport( + configWithProducerWithSelector: ConfigWithProducerWithSelector, + deps?: any[] +) +function useAsyncStateExport( + configWithProducerWithoutSelector: ConfigWithProducerWithoutSelector, + deps?: any[] +): UseAsyncState +function useAsyncStateExport( + mixedConfig: MixedConfig, deps?: any[]): UseAsyncState +function useAsyncStateExport>( + mixedConfig: MixedConfig, deps?: any[]): UseAsyncState { return useAsyncStateBase(mixedConfig, deps); } + // auto runs const autoConfigOverrides = Object.freeze({lazy: false}); diff --git a/packages/react-async-states/src/react/useAsyncStateBase.ts b/packages/react-async-states/src/react/useAsyncStateBase.ts deleted file mode 100644 index 5b33bd12..00000000 --- a/packages/react-async-states/src/react/useAsyncStateBase.ts +++ /dev/null @@ -1,198 +0,0 @@ -import * as React from "react"; -import {Producer, Source, State} from "../async-state"; -import { - BaseConfig, - CleanupFn, - MixedConfig, - PartialUseAsyncStateConfiguration, - StateContextValue, - UseAsyncState, -} from "../types.internal"; -import {AsyncStateContext} from "./context"; -import {AUTO_RUN} from "./StateHookFlags"; -import {__DEV__} from "../shared"; -import {emptyArray, noop} from "./utils"; -import {calculateStateValue, StateHook, StateHookImpl} from "./StateHook"; - -export function useCurrentHook(): StateHook { - return React.useMemo>(createStateHook, emptyArray); -} - -export function createStateHook(): StateHook { - return new StateHookImpl(); -} - - -export const useAsyncStateBase = function useAsyncStateImpl>( - mixedConfig: MixedConfig, - deps: any[] = emptyArray, - overrides?: PartialUseAsyncStateConfiguration, -): UseAsyncState { - - const hook: StateHook = useCurrentHook(); - const [guard, setGuard] = React.useState(0); - const contextValue = React.useContext(AsyncStateContext); - - React.useMemo(() => hook.update(1, mixedConfig, contextValue, overrides, 8), - [contextValue, guard, ...deps]); - - const [selectedValue, setSelectedValue] = React - .useState>>(calculateStateValue.bind(null, hook)); - - if ( - selectedValue.version !== hook.instance?.version || - selectedValue.source !== hook.instance?._source - ) { - updateSelectedValue(); - } - - if (hook.current !== selectedValue.state) { - hook.current = selectedValue.state; - } - if (hook.version !== selectedValue.version) { - hook.version = selectedValue.version; - } - - React.useEffect( - hook.subscribe.bind(null, setGuard, updateSelectedValue), - [contextValue, hook.flags, hook.instance] - ); - - React.useEffect(autoRunAsyncState, deps); - - return selectedValue; - - - function updateSelectedValue() { - setSelectedValue(calculateStateValue(hook)); - hook.version = hook.instance?.version; - } - - function autoRunAsyncState(): CleanupFn { - // auto run only if condition is met, and it is not lazy - if (!(hook.flags & AUTO_RUN)) { - return; - } - // if dependencies change, if we run, the cleanup shall abort - let config = (hook.config as BaseConfig); - - if (config.autoRunArgs && Array.isArray(config.autoRunArgs)) { - return hook.base.run(...config.autoRunArgs); - } - return hook.base.run(); - } -} - - -// this is a mini version of useAsyncState -// this hook uses fewer hooks and has fewer capabilities that useAsyncState -// its usage should be when you want to have control over a source -// and you do not intend to have it auto run, dependencies, manage payload -// etc etc. -// this is like useSyncExternalStore, but returns an object with several -// functions that allows controlling the external source. So, may be better ? -// this hook can use directly useSES on the asyncState instance -// but this will require additional memoization to add the other properties -// that UseAsyncState has (abort, mergePayload, invalidateCache, run, replaceState ...) -export function useSource( - source: Source -): UseAsyncState> { - return useSourceLane(source, undefined, __DEV__ ? 9 : undefined); -} - -export function useSourceLane( - source: Source, - lane?: string, - level: number = 8, // used in dev mode only -): UseAsyncState> { - const hook: StateHook> = useCurrentHook(); - const contextValue = React.useContext(AsyncStateContext); - - React.useMemo(() => hook.update(2, source, contextValue, {lane}, level), - [contextValue, lane]); - - const [selectedValue, setSelectedValue] = React - .useState>>>(calculateStateValue.bind(null, hook)); - - if ( - selectedValue.version !== hook.instance?.version || - selectedValue.source !== hook.instance?._source - ) { - updateSelectedValue(); - } - - if (hook.current !== selectedValue.state) { - hook.current = selectedValue.state; - } - if (hook.version !== selectedValue.version) { - hook.version = selectedValue.version; - } - - React.useEffect( - hook.subscribe.bind(null, noop, updateSelectedValue), - [contextValue, hook.flags, hook.instance] - ); - - return selectedValue; - - - function updateSelectedValue() { - setSelectedValue(calculateStateValue(hook)); - hook.version = hook.instance?.version; - } - -} - -// this is a mini version of useAsyncState -// this hook uses fewer hooks and has fewer capabilities that useAsyncState -// its usage should be when you want to have control over a producer (may be inline) -// and you do not intend to have it auto run, dependencies, manage payload -// etc etc. -// this is like useSyncExternalStore, but returns an object with several -// functions that allows controlling the external source. So, may be better ? -// this hook can use directly useSES on the asyncState instance -// but this will require additional memoization to add the other properties -// that UseAsyncState has (abort, mergePayload, invalidateCache, run, replaceState ...) -export function useProducer( - producer: Producer, -): UseAsyncState> { - const hook: StateHook> = useCurrentHook(); - const contextValue = React.useContext(AsyncStateContext); - - React.useMemo(() => hook.update(3, producer, contextValue, undefined, 8), [contextValue]); - - const [selectedValue, setSelectedValue] = React - .useState>>>(calculateStateValue.bind(null, hook)); - - if ( - selectedValue.version !== hook.instance?.version || - selectedValue.source !== hook.instance?._source - ) { - updateSelectedValue(); - } - - if (hook.current !== selectedValue.state) { - hook.current = selectedValue.state; - } - if (hook.version !== selectedValue.version) { - hook.version = selectedValue.version; - } - - if (hook.instance!.originalProducer !== producer) { - hook.instance!.replaceProducer(producer); - } - - React.useEffect( - hook.subscribe.bind(null, noop, updateSelectedValue), - [contextValue, hook.flags, hook.instance] - ); - - return selectedValue; - - - function updateSelectedValue() { - setSelectedValue(calculateStateValue(hook)); - hook.version = hook.instance?.version; - } -} - From 388b1feeb8e3e410d64859f3abdfdd3eb823b18c Mon Sep 17 00:00:00 2001 From: Mohamed EL AYADI Date: Mon, 28 Nov 2022 14:36:06 +0100 Subject: [PATCH 13/13] move wrapProducerFn to protottype & reduce_funcs set to false in terser options & state hook resolve flags enhacenements --- packages/react-async-states/package.json | 2 +- .../rollup/rollup.config.js | 18 +- .../src/async-state/AsyncState.ts | 225 +++++++++--------- .../react-async-states/src/react/StateHook.ts | 69 +++--- 4 files changed, 163 insertions(+), 151 deletions(-) diff --git a/packages/react-async-states/package.json b/packages/react-async-states/package.json index 2c9fab8e..dcf86179 100644 --- a/packages/react-async-states/package.json +++ b/packages/react-async-states/package.json @@ -17,7 +17,7 @@ "test:watch": "react-scripts test --env=jsdom", "clean:dist": "rimraf dist", "start": "pnpm dev", - "prebuild": "rimraf dist", + "prebuild": "pnpm test && rimraf dist", "build": "pnpm clean:dist && rollup -c rollup/rollup.config.js", "dev": "pnpm clean:dist && rollup -c rollup/rollup.config.dev.js -w" }, diff --git a/packages/react-async-states/rollup/rollup.config.js b/packages/react-async-states/rollup/rollup.config.js index 6e273261..ff2e1012 100644 --- a/packages/react-async-states/rollup/rollup.config.js +++ b/packages/react-async-states/rollup/rollup.config.js @@ -119,7 +119,11 @@ const webModulesBuild = [ } }), commonjs(), - terser(), + terser({ + compress: { + reduce_funcs: false, + } + }), replace({ preventAssignment: true, values: {"process.env.NODE_ENV": JSON.stringify("production")}, @@ -208,7 +212,11 @@ const umdBuild = [ }), commonjs(), gzipPlugin.default(), - terser(), + terser({ + compress: { + reduce_funcs: false, + } + }), copy({ targets: [ { @@ -259,7 +267,11 @@ const devtoolsSharedBuild = [ } }), commonjs(), - terser(), + terser({ + compress: { + reduce_funcs: false, + } + }), // copy({ // hook: 'closeBundle', diff --git a/packages/react-async-states/src/async-state/AsyncState.ts b/packages/react-async-states/src/async-state/AsyncState.ts index 10d9b832..051adfdf 100644 --- a/packages/react-async-states/src/async-state/AsyncState.ts +++ b/packages/react-async-states/src/async-state/AsyncState.ts @@ -34,7 +34,6 @@ class AsyncState implements StateInterface { subsIndex: number = 0; subscriptions: Record> | null = null; - producer: ProducerFunction; suspender: Promise | undefined = undefined; originalProducer: Producer | undefined; @@ -57,7 +56,6 @@ class AsyncState implements StateInterface { this.key = key; this.uniqueId = nextUniqueId(); this.config = shallowClone(config); - this.producer = wrapProducerFunction(this); this.originalProducer = producer ?? undefined; this.producerType = producer ? ProducerType.indeterminate : ProducerType.notProvided; @@ -79,6 +77,7 @@ class AsyncState implements StateInterface { this.abort = this.abort.bind(this); this.getState = this.getState.bind(this); this.setState = this.setState.bind(this); + this.producer = this.producer.bind(this); this.subscribe = this.subscribe.bind(this); this.getPayload = this.getPayload.bind(this); this.mergePayload = this.mergePayload.bind(this); @@ -113,6 +112,115 @@ class AsyncState implements StateInterface { Object.assign(this.config, partialConfig); } + producer( + props: ProducerProps, + indicators: RunIndicators, + callbacks?: ProducerCallbacks, + ): AbortFn { + let instance = this; + const currentProducer = this.originalProducer; + if (typeof currentProducer !== "function") { + indicators.fulfilled = true; + instance.producerType = ProducerType.notProvided; + instance.setState(props.args[0], props.args[1]); + if (callbacks) { + switch (instance.state.status) { + case Status.success: { + callbacks.onSuccess?.(instance.state); + break; + } + case Status.aborted: { + callbacks.onAborted?.(instance.state); + break; + } + case Status.error: { + callbacks.onError?.(instance.state); + break; + } + } + } + return; + } + // the running promise is used to pass the status to pending and as suspender in react18+ + let runningPromise; + // the execution value is the return of the initial producer function + let executionValue; + // it is important to clone to capture properties and save only serializable stuff + const savedProps = cloneProducerProps(props); + + try { + executionValue = currentProducer(props); + } catch (e) { + if (__DEV__) devtools.emitRunSync(instance, savedProps); + indicators.fulfilled = true; + let errorState = StateBuilder.error(e, savedProps); + instance.replaceState(errorState); + callbacks?.onError?.(errorState); + return; + } + + if (isGenerator(executionValue)) { + instance.producerType = ProducerType.generator; + if (__DEV__) devtools.emitRunGenerator(instance, savedProps); + // generatorResult is either {done, value} or a promise + let generatorResult; + try { + generatorResult = wrapStartedGenerator(executionValue, props, indicators); + } catch (e) { + indicators.fulfilled = true; + let errorState = StateBuilder.error(e, savedProps); + instance.replaceState(errorState); + callbacks?.onError?.(errorState); + return; + } + if (generatorResult.done) { + indicators.fulfilled = true; + let successState = StateBuilder.success(generatorResult.value, savedProps); + instance.replaceState(successState); + callbacks?.onSuccess?.(successState); + return; + } else { + runningPromise = generatorResult; + instance.suspender = runningPromise; + instance.replaceState(StateBuilder.pending(savedProps) as State); + } + } else if (isPromise(executionValue)) { + instance.producerType = ProducerType.promise; + if (__DEV__) devtools.emitRunPromise(instance, savedProps); + runningPromise = executionValue; + instance.suspender = runningPromise; + instance.replaceState(StateBuilder.pending(savedProps) as State); + } else { // final value + if (__DEV__) devtools.emitRunSync(instance, savedProps); + indicators.fulfilled = true; + instance.producerType = ProducerType.sync; + let successState = StateBuilder.success(executionValue, savedProps); + instance.replaceState(successState); + callbacks?.onSuccess?.(successState); + return; + } + + runningPromise + .then(stateData => { + let aborted = indicators.aborted; + if (!aborted) { + indicators.fulfilled = true; + let successState = StateBuilder.success(stateData, savedProps); + instance.replaceState(successState); + callbacks?.onSuccess?.(successState); + } + }) + .catch(stateError => { + let aborted = indicators.aborted; + if (!aborted) { + indicators.fulfilled = true; + let errorState = StateBuilder.error(stateError, savedProps); + instance.replaceState(errorState); + callbacks?.onError?.(errorState); + } + }); + }; + getPayload(): Record { if (!this.payload) { this.payload = {}; @@ -993,119 +1101,6 @@ function standaloneProducerEffectsCreator(props: ProducerProps): ProducerE //region WRAP PRODUCER FUNCTION -export function wrapProducerFunction(instance: StateInterface): ProducerFunction { - // this is the real deal - return function producerFuncImpl( - props: ProducerProps, - indicators: RunIndicators, - callbacks?: ProducerCallbacks, - ): undefined { - - // this allows the developer to omit the producer attribute. - // and replaces state when there is no producer - const currentProducer = instance.originalProducer; - if (typeof currentProducer !== "function") { - indicators.fulfilled = true; - instance.producerType = ProducerType.notProvided; - instance.setState(props.args[0], props.args[1]); - if (callbacks) { - switch (instance.state.status) { - case Status.success: { - callbacks.onSuccess?.(instance.state); - break; - } - case Status.aborted: { - callbacks.onAborted?.(instance.state); - break; - } - case Status.error: { - callbacks.onError?.(instance.state); - break; - } - } - } - return; - } - // the running promise is used to pass the status to pending and as suspender in react18+ - let runningPromise; - // the execution value is the return of the initial producer function - let executionValue; - // it is important to clone to capture properties and save only serializable stuff - const savedProps = cloneProducerProps(props); - - try { - executionValue = currentProducer(props); - } catch (e) { - if (__DEV__) devtools.emitRunSync(instance, savedProps); - indicators.fulfilled = true; - let errorState = StateBuilder.error(e, savedProps); - instance.replaceState(errorState); - callbacks?.onError?.(errorState); - return; - } - - if (isGenerator(executionValue)) { - instance.producerType = ProducerType.generator; - if (__DEV__) devtools.emitRunGenerator(instance, savedProps); - // generatorResult is either {done, value} or a promise - let generatorResult; - try { - generatorResult = wrapStartedGenerator(executionValue, props, indicators); - } catch (e) { - indicators.fulfilled = true; - let errorState = StateBuilder.error(e, savedProps); - instance.replaceState(errorState); - callbacks?.onError?.(errorState); - return; - } - if (generatorResult.done) { - indicators.fulfilled = true; - let successState = StateBuilder.success(generatorResult.value, savedProps); - instance.replaceState(successState); - callbacks?.onSuccess?.(successState); - return; - } else { - runningPromise = generatorResult; - instance.suspender = runningPromise; - instance.replaceState(StateBuilder.pending(savedProps) as State); - } - } else if (isPromise(executionValue)) { - instance.producerType = ProducerType.promise; - if (__DEV__) devtools.emitRunPromise(instance, savedProps); - runningPromise = executionValue; - instance.suspender = runningPromise; - instance.replaceState(StateBuilder.pending(savedProps) as State); - } else { // final value - if (__DEV__) devtools.emitRunSync(instance, savedProps); - indicators.fulfilled = true; - instance.producerType = ProducerType.sync; - let successState = StateBuilder.success(executionValue, savedProps); - instance.replaceState(successState); - callbacks?.onSuccess?.(successState); - return; - } - - runningPromise - .then(stateData => { - let aborted = indicators.aborted; - if (!aborted) { - indicators.fulfilled = true; - let successState = StateBuilder.success(stateData, savedProps); - instance.replaceState(successState); - callbacks?.onSuccess?.(successState); - } - }) - .catch(stateError => { - let aborted = indicators.aborted; - if (!aborted) { - indicators.fulfilled = true; - let errorState = StateBuilder.error(stateError, savedProps); - instance.replaceState(errorState); - callbacks?.onError?.(errorState); - } - }); - }; -} function wrapStartedGenerator( generatorInstance, diff --git a/packages/react-async-states/src/react/StateHook.ts b/packages/react-async-states/src/react/StateHook.ts index e9cb97c7..4f0f6b3a 100644 --- a/packages/react-async-states/src/react/StateHook.ts +++ b/packages/react-async-states/src/react/StateHook.ts @@ -178,43 +178,48 @@ export function resolveFlags( } } -function getConfigFlags( +function getKeyFlags( + config: PartialUseAsyncStateConfiguration, + key: string, +) { + switch (key) { + case "hoist": return config.hoist ? HOIST : NO_MODE; + case "fork": return config.fork ? FORK : NO_MODE; + case "lane": return config.lane ? LANE : NO_MODE; + case "selector": return typeof config.selector === "function" ? SELECTOR : NO_MODE; + case "areEqual": return typeof config.areEqual === "function" ? EQUALITY_CHECK : NO_MODE; + + case "events": { + let flags = NO_MODE; + if (config.events!.change) { + flags |= CHANGE_EVENTS; + } + if (config.events!.subscribe) { + flags |= SUBSCRIBE_EVENTS; + } + return flags; + } + + case "lazy": + case "condition": { + if (config.lazy === false && config.condition !== false) { + return AUTO_RUN; + } + return NO_MODE; + } + default: return NO_MODE; + } +} + +export function getConfigFlags( config?: PartialUseAsyncStateConfiguration ): number { if (!config) { return NO_MODE; } - - let flags = NO_MODE; - - if (config.hoist) { - flags |= HOIST; - } - if (config.fork) { - flags |= FORK; - } - if (config.lane) { - flags |= LANE; - } - if (config.selector) { - flags |= SELECTOR; - } - if (config.areEqual) { - flags |= EQUALITY_CHECK; - } - if (config.events) { - if (config.events.change) { - flags |= CHANGE_EVENTS; - } - if (config.events.subscribe) { - flags |= SUBSCRIBE_EVENTS; - } - } - // default behavior is lazy=true; so only change if specified explicitly - if (config.lazy === false && config.condition !== false) { - flags |= AUTO_RUN; - } - return flags; + return Object.keys(config) + .reduce((flags, key) => + (flags | getKeyFlags(config, key)), NO_MODE); }