From 80ae86764386c6667c2dc3254abe42195cd6324d Mon Sep 17 00:00:00 2001 From: Kushan Joshi <0o3ko0@gmail.com> Date: Tue, 3 Oct 2023 19:12:14 -0400 Subject: [PATCH] refactor: Release 1 prep (#23) * delete old code * first stab * build setup * documentation * doc changes * save changes * Implement transaction (#24) * transaction * transaction * implement glue code for transactions * update docs * apply transaction changes * fix prettier run * fix lint * Implement effects (#25) * start * effects * selectors (#26) * selectors * better external internal fields * add some tests * Fix/update rename (#27) * save original * closes https://github.com/bangle-io/bangle-issues-internal/issues/33 * fixes * add txn docs * add docs * Implement refs (#29) * closes https://github.com/bangle-io/bangle-issues-internal/issues/36 * implement ref * add docs * send docs (#30) --- .eslintignore | 12 - .github/workflows/node.js.yml | 10 +- .gitignore | 1 + API.md | 277 - CODE_OF_CONDUCT.md | 24 +- .../eslint-config-custom/base.js | 17 +- config/eslint-config-custom/package.json | 18 + config/eslint-config-custom/react.js | 14 + config/tsconfig/base.json | 32 + config/tsconfig/library.json | 8 + config/tsconfig/nextjs.json | 20 + config/tsconfig/package.json | 12 + config/tsconfig/react-library.json | 11 + documentation/.eslintrc.cjs | 3 + documentation/components/CodeBlock.tsx | 71 +- documentation/next.config.js | 25 +- documentation/package.json | 16 +- documentation/pages/docs/actions.mdx | 86 + .../docs/advanced-topics/powerful-effects.mdx | 47 + .../pages/docs/api/derived-field.mdx | 0 documentation/pages/docs/api/effect.mdx | 0 documentation/pages/docs/api/key.mdx | 154 + documentation/pages/docs/api/ref.mdx | 82 + documentation/pages/docs/api/slice.mdx | 0 documentation/pages/docs/api/state-field.mdx | 0 documentation/pages/docs/api/store-state.mdx | 3 + documentation/pages/docs/api/transaction.mdx | 77 + documentation/pages/docs/effects.mdx | 61 + documentation/pages/docs/getting-started.mdx | 54 + documentation/pages/docs/index.mdx | 2 +- documentation/pages/docs/selectors.mdx | 58 + documentation/pages/docs/slice.mdx | 113 + documentation/tsconfig.json | 16 +- package.json | 92 +- packages/core/.eslintrc.cjs | 3 + .../core/jest.config.cjs | 0 jest.setup.js => packages/core/jest.setup.js | 2 + packages/core/package.json | 49 + packages/core/src/__tests__/actions.test.ts | 203 + .../src}/__tests__/dependency-helpers.test.ts | 12 +- .../core/src}/__tests__/effect.test.ts | 174 +- packages/core/src/__tests__/field.test.ts | 147 + .../core/src}/__tests__/ref.test.ts | 92 +- .../core/src/__tests__/store-state.test.ts | 320 + packages/core/src/__tests__/store.test.ts | 29 + packages/core/src/base-store.ts | 19 + packages/core/src/effect/cleanup.ts | 24 + .../core/src}/effect/effect-manager.ts | 23 +- packages/core/src/effect/effect-run.ts | 75 + packages/core/src/effect/effect.ts | 209 + packages/core/src/effect/on-abort.ts | 5 + packages/core/src/effect/operation.ts | 62 + .../core/src/effect}/ref.ts | 14 +- packages/core/src/helpers/create-ids.ts | 5 + .../core/src}/helpers/dependency-helpers.ts | 11 +- .../core/src/helpers/has-idle-callback.ts | 2 + packages/core/src/helpers/id-generation.ts | 37 + packages/core/src/helpers/logger-warn.ts | 3 + packages/core/src/helpers/test-cleanup.ts | 5 + packages/core/src/helpers/throw-error.ts | 3 + packages/core/src/index.ts | 4 + packages/core/src/logger.ts | 27 + packages/core/src/slice/field.ts | 114 + packages/core/src/slice/key.ts | 112 + packages/core/src/slice/slice.ts | 142 + packages/core/src/store-state.ts | 189 + packages/core/src/store.ts | 143 + packages/core/src/transaction.ts | 65 + packages/core/src/types.ts | 13 + packages/core/tsconfig.json | 5 + packages/react/.eslintrc.cjs | 3 + packages/react/jest.config.cjs | 7 + packages/react/jest.setup.js | 13 + packages/react/package.json | 59 + packages/react/src/App.tsx | 5 + packages/react/src/__tests__/dummy.test.ts | 1 + packages/react/src/index.ts | 0 packages/react/tsconfig.json | 5 + pnpm-lock.yaml | 8569 ++++++++++------- pnpm-workspace.yaml | 1 + src/index.ts | 3 - src/react/index.ts | 1 - src/react/react.ts | 61 - src/vanilla/__tests__/action.test.ts | 254 - src/vanilla/__tests__/id_generation.test.ts | 80 - src/vanilla/__tests__/operation.test.ts | 331 - src/vanilla/__tests__/shallow-equal.test.ts | 71 - src/vanilla/__tests__/slice-key.test.ts | 662 -- src/vanilla/__tests__/slice.test.ts | 109 - src/vanilla/__tests__/store-state.test.ts | 478 - src/vanilla/__tests__/transaction.test.ts | 21 - src/vanilla/__tests__/types.test.ts | 31 - src/vanilla/__tests__/validations.test.ts | 88 - src/vanilla/action.ts | 108 - src/vanilla/base-store.ts | 80 - src/vanilla/cleanup.ts | 15 - .../effect/__tests__/run-instance.test.ts | 174 - src/vanilla/effect/effect.ts | 181 - src/vanilla/effect/index.ts | 9 - src/vanilla/effect/run-instance.ts | 124 - src/vanilla/helpers/id_generation.ts | 52 - src/vanilla/helpers/index.ts | 15 - src/vanilla/helpers/is-slice.ts | 6 - src/vanilla/helpers/shallow-equal.ts | 21 - src/vanilla/helpers/test-cleanup.ts | 7 - src/vanilla/helpers/updater.ts | 6 - src/vanilla/helpers/validations.ts | 120 - src/vanilla/index.ts | 21 - src/vanilla/logger.ts | 70 - src/vanilla/operation.ts | 176 - src/vanilla/slice/base-slice.ts | 100 - src/vanilla/slice/index.ts | 5 - src/vanilla/slice/slice-key.ts | 217 - src/vanilla/slice/slice.ts | 132 - src/vanilla/store-state.ts | 254 - src/vanilla/store.ts | 200 - src/vanilla/transaction.ts | 88 - src/vanilla/types.ts | 65 - tsconfig.json | 34 +- tsup.config.ts | 30 - 120 files changed, 8310 insertions(+), 8611 deletions(-) delete mode 100644 .eslintignore delete mode 100644 API.md rename .eslintrc.cjs => config/eslint-config-custom/base.js (81%) create mode 100644 config/eslint-config-custom/package.json create mode 100644 config/eslint-config-custom/react.js create mode 100644 config/tsconfig/base.json create mode 100644 config/tsconfig/library.json create mode 100644 config/tsconfig/nextjs.json create mode 100644 config/tsconfig/package.json create mode 100644 config/tsconfig/react-library.json create mode 100644 documentation/.eslintrc.cjs create mode 100644 documentation/pages/docs/actions.mdx create mode 100644 documentation/pages/docs/advanced-topics/powerful-effects.mdx create mode 100644 documentation/pages/docs/api/derived-field.mdx create mode 100644 documentation/pages/docs/api/effect.mdx create mode 100644 documentation/pages/docs/api/key.mdx create mode 100644 documentation/pages/docs/api/ref.mdx create mode 100644 documentation/pages/docs/api/slice.mdx create mode 100644 documentation/pages/docs/api/state-field.mdx create mode 100644 documentation/pages/docs/api/store-state.mdx create mode 100644 documentation/pages/docs/api/transaction.mdx create mode 100644 documentation/pages/docs/effects.mdx create mode 100644 documentation/pages/docs/getting-started.mdx create mode 100644 documentation/pages/docs/selectors.mdx create mode 100644 documentation/pages/docs/slice.mdx create mode 100644 packages/core/.eslintrc.cjs rename jest.config.cjs => packages/core/jest.config.cjs (100%) rename jest.setup.js => packages/core/jest.setup.js (77%) create mode 100644 packages/core/package.json create mode 100644 packages/core/src/__tests__/actions.test.ts rename {src/vanilla => packages/core/src}/__tests__/dependency-helpers.test.ts (95%) rename {src/vanilla/effect => packages/core/src}/__tests__/effect.test.ts (84%) create mode 100644 packages/core/src/__tests__/field.test.ts rename {src/vanilla => packages/core/src}/__tests__/ref.test.ts (52%) create mode 100644 packages/core/src/__tests__/store-state.test.ts create mode 100644 packages/core/src/__tests__/store.test.ts create mode 100644 packages/core/src/base-store.ts create mode 100644 packages/core/src/effect/cleanup.ts rename {src/vanilla => packages/core/src}/effect/effect-manager.ts (71%) create mode 100644 packages/core/src/effect/effect-run.ts create mode 100644 packages/core/src/effect/effect.ts create mode 100644 packages/core/src/effect/on-abort.ts create mode 100644 packages/core/src/effect/operation.ts rename {src/vanilla => packages/core/src/effect}/ref.ts (50%) create mode 100644 packages/core/src/helpers/create-ids.ts rename {src/vanilla => packages/core/src}/helpers/dependency-helpers.ts (89%) create mode 100644 packages/core/src/helpers/has-idle-callback.ts create mode 100644 packages/core/src/helpers/id-generation.ts create mode 100644 packages/core/src/helpers/logger-warn.ts create mode 100644 packages/core/src/helpers/test-cleanup.ts create mode 100644 packages/core/src/helpers/throw-error.ts create mode 100644 packages/core/src/index.ts create mode 100644 packages/core/src/logger.ts create mode 100644 packages/core/src/slice/field.ts create mode 100644 packages/core/src/slice/key.ts create mode 100644 packages/core/src/slice/slice.ts create mode 100644 packages/core/src/store-state.ts create mode 100644 packages/core/src/store.ts create mode 100644 packages/core/src/transaction.ts create mode 100644 packages/core/src/types.ts create mode 100644 packages/core/tsconfig.json create mode 100644 packages/react/.eslintrc.cjs create mode 100644 packages/react/jest.config.cjs create mode 100644 packages/react/jest.setup.js create mode 100644 packages/react/package.json create mode 100644 packages/react/src/App.tsx create mode 100644 packages/react/src/__tests__/dummy.test.ts create mode 100644 packages/react/src/index.ts create mode 100644 packages/react/tsconfig.json delete mode 100644 src/index.ts delete mode 100644 src/react/index.ts delete mode 100644 src/react/react.ts delete mode 100644 src/vanilla/__tests__/action.test.ts delete mode 100644 src/vanilla/__tests__/id_generation.test.ts delete mode 100644 src/vanilla/__tests__/operation.test.ts delete mode 100644 src/vanilla/__tests__/shallow-equal.test.ts delete mode 100644 src/vanilla/__tests__/slice-key.test.ts delete mode 100644 src/vanilla/__tests__/slice.test.ts delete mode 100644 src/vanilla/__tests__/store-state.test.ts delete mode 100644 src/vanilla/__tests__/transaction.test.ts delete mode 100644 src/vanilla/__tests__/types.test.ts delete mode 100644 src/vanilla/__tests__/validations.test.ts delete mode 100644 src/vanilla/action.ts delete mode 100644 src/vanilla/base-store.ts delete mode 100644 src/vanilla/cleanup.ts delete mode 100644 src/vanilla/effect/__tests__/run-instance.test.ts delete mode 100644 src/vanilla/effect/effect.ts delete mode 100644 src/vanilla/effect/index.ts delete mode 100644 src/vanilla/effect/run-instance.ts delete mode 100644 src/vanilla/helpers/id_generation.ts delete mode 100644 src/vanilla/helpers/index.ts delete mode 100644 src/vanilla/helpers/is-slice.ts delete mode 100644 src/vanilla/helpers/shallow-equal.ts delete mode 100644 src/vanilla/helpers/test-cleanup.ts delete mode 100644 src/vanilla/helpers/updater.ts delete mode 100644 src/vanilla/helpers/validations.ts delete mode 100644 src/vanilla/index.ts delete mode 100644 src/vanilla/logger.ts delete mode 100644 src/vanilla/operation.ts delete mode 100644 src/vanilla/slice/base-slice.ts delete mode 100644 src/vanilla/slice/index.ts delete mode 100644 src/vanilla/slice/slice-key.ts delete mode 100644 src/vanilla/slice/slice.ts delete mode 100644 src/vanilla/store-state.ts delete mode 100644 src/vanilla/store.ts delete mode 100644 src/vanilla/transaction.ts delete mode 100644 src/vanilla/types.ts delete mode 100644 tsup.config.ts diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 3a646a3..0000000 --- a/.eslintignore +++ /dev/null @@ -1,12 +0,0 @@ -dist -build -node_modules -**.d.ts -*.html -*.js -*.cjs -tsup.config.ts -theme.config.jsx -documentation/dist -documentation/.next -documentation diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 867d5aa..8a6ffcd 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -31,8 +31,8 @@ jobs: run: pnpm lint - name: test run: pnpm test - - run: pnpx semantic-release - if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/alpha' - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + # - run: pnpx semantic-release + # if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/alpha' + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore index 26bd5cd..10433ab 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,7 @@ docs/.vuepress/dist # Generated /test/types/autogen*.ts +tsconfig.tsbuildinfo # Eslint .eslintcache \ No newline at end of file diff --git a/API.md b/API.md deleted file mode 100644 index fafd03b..0000000 --- a/API.md +++ /dev/null @@ -1,277 +0,0 @@ -# Slice - -## basic - -```ts -slice([], { - name: 'sliceName', - state: { - a: 1, - }, -}); -``` - -## With selectors - -```ts -const key = sliceKey([sliceA], { - name: 'sliceName', - state: { - a: 1, - }, -}); - -const sel0 = key.selector( - // will have sliceA - (state) => { - return key.get(state).z; - }, - { - equal: (a, b) => a === b, - }, -); - -const sel1 = key.selector( - // will have sliceA - (state) => { - const otherSel = sel0(state); - const otherSlice = sliceA.get(state); - return key.get(state).f + otherSlice; - }, - { - equal: (a, b) => a === b, - }, -); - -const slice = key.slice({ - derivedState: { - a: sel1, - }, -}); -``` - -# Query - -generally prefer using selectors, but we have this for flexibility - -```ts -const myQuery = createQuery(({ param: X }) => { - return (storeState): T => {}; -}); - -key.createQuery(); // <-- like this - -const result = myQuery(store.state, { param: 1 }); -``` - -# Actions - -Should always be updating the key State and nothing else. -Q: not forcing an action name could be problem with syncing, maybe we can use a counter++ to always have the same name? -and not burden the user with naming actions - -- Global NoOp transaction - -- Chain transaction or multiple txns - -without helpers - -```ts -const myAction = slice.action((obj: { x: number }) => { - return (storeState) => { - return { - ...slice.get(storeState), - x: obj.x, - }; - }; -}); - -const myAction2 = slice.simpleAction((obj: { x: number }) => { - return (storeState) => { - return slice.update(storeState, { x }); - }; -}); - -myAction; // (params: P) => Transaction -``` - -with helpers - -```ts -const myAction = slice.action((obj: { x: number }) => { - return slice.tx((storeState) => { - return slice.update(storeState, { x: obj.x }); - }); -}); - -let tx: Transaction = slice.tx((storeState: StoreState): SliceState => {}); -``` - -### Serialization - -```ts -const myAction = slice.action( - z.object({ - x: z.number(), - }), - (obj) => {}, -); -``` - -### update helpers - -```ts -let result: SliceState = slice.update( - storeState, - (sliceState) => ({ - ...sliceState, - x: obj.x, - }), - { - replace: true, - }, -); - -slice.update(storeState, (sliceState) => ({ - // is partial by default - x: obj.x, -})); - -slice.update(storeState, (sliceState) => ({ - // is partial by default - x: obj.x, -})); -// selector updates are ignored -slice.update(storeState, (sliceState) => ({ - x: obj.x, - selectorA: 2, // ignored -})); -``` - -# Operations - -```ts -const op = createOp>((obj: { x: number }) => { - return (store): void => { - const valA = sliceA.get(store); - const valB = sliceB.get(store); - - dispatch(someAction); - }; -}); - -dispatch(op(param)); -``` - -## Serialization of operation - -```ts -const op = createSerialOp>(z.object({ som: z.string() }), (obj) => { - return (key, dispatch): void => { - dispatch(someAction); - }; -}); - -dispatch(op(param)); -``` - -# Effects - -Using auto dependency thing - -```ts -effect((store) => { - store.name('myEffect'); // or use function name - - const valA = sliceA.track.foo(store, { isEqual }); // this will be tracked - const valT = sliceA.track(store, (val) => val.t, { isEqual }); // this will be selective tracked, when t changes - - const valB = sliceB.get(store.state); // this will be un-tracked - - cleanup(store, () => {}); - cleanup(store, () => {}); // can have multiple - - store.dispatch(someAction); -}); -``` - -## Effect Async - -- When a new effect runs, previous runs dispatch become no-op - -```ts -effect(async (store) => { - const valT = sliceA.track.foo(); // this will be selective tracked, when t changes - - const abort = new AbortController(); - const data = await fetch('someurl'); - - const valC = sliceB.track(store); // TODO: should this be tracked? - - cleanup(store, () => { - abort.abort(); - }); - - store.dispatch(someAction); -}); -``` - -## Typings - -By default dispatch can be `any`, but they can provide a store type if they want - -```ts -store.effect(() => {}); - -// or - -effect>((store) => { - dispatch(someAction); // dispatch will be typed -}); -``` - -## API - -```ts -effect(cb); -effect(cb, opts); - -let ef = effect(); -ef.disable(); -type Opts = { - autoRegister: boolean; // default true -}; -``` - -## Refs - -Refs that can be shared with other effects - -```ts -const getMyRef = ref(false); - -effect((store) => { - const myRef = getMyRef(store); -}); -``` - -## Other features - -- allow store to throw error if effects donot have name - -- we should follow angular style here to allow for cleanup, so that async await can work. - - When an effect is terminated, the dispatch function should become a no-op. This should be customizable if someone - wants to not cancel the effect on a new trigger. -- running it once - -```ts -effect((store) => { - store.cleanup(() => {}); -}); -``` - -# Readonly clone of slice - -This will help with the worker sync in an elegant way. - -we can also allow to merge multiple slices into one readonly slice diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index c351052..7f954a4 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -17,23 +17,23 @@ diverse, inclusive, and healthy community. Examples of behavior that contributes to a positive environment for our community include: -* Demonstrating empathy and kindness toward other people -* Being respectful of differing opinions, viewpoints, and experiences -* Giving and gracefully accepting constructive feedback -* Accepting responsibility and apologizing to those affected by our mistakes, +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience -* Focusing on what is best not just for us as individuals, but for the +- Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: -* The use of sexualized language or imagery, and sexual attention or +- The use of sexualized language or imagery, and sexual attention or advances of any kind -* Trolling, insulting or derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or email +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email address, without their explicit permission -* Other conduct which could reasonably be considered inappropriate in a +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities @@ -59,7 +59,7 @@ representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported to the community leaders responsible for enforcement at +reported to the community leaders responsible for enforcement at cubist.balsa_0p@icloud.com (address to Kushan). All complaints will be reviewed and investigated promptly and fairly. @@ -106,7 +106,7 @@ Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community -standards, including sustained inappropriate behavior, harassment of an +standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within diff --git a/.eslintrc.cjs b/config/eslint-config-custom/base.js similarity index 81% rename from .eslintrc.cjs rename to config/eslint-config-custom/base.js index 26a1f21..e53885d 100644 --- a/.eslintrc.cjs +++ b/config/eslint-config-custom/base.js @@ -1,4 +1,7 @@ -// eslint-disable-next-line no-undef +const { resolve } = require('node:path'); + +const project = resolve(process.cwd(), 'tsconfig.json'); + module.exports = { extends: [ 'eslint:recommended', @@ -7,12 +10,16 @@ module.exports = { ], parser: '@typescript-eslint/parser', plugins: ['@typescript-eslint'], - root: true, parserOptions: { - project: ['./tsconfig.json'], - tsconfigRootDir: __dirname, + project, + }, + settings: { + 'import/resolver': { + typescript: { + project, + }, + }, }, - rules: { '@typescript-eslint/no-unsafe-assignment': 'off', 'prefer-const': 'off', diff --git a/config/eslint-config-custom/package.json b/config/eslint-config-custom/package.json new file mode 100644 index 0000000..0789b10 --- /dev/null +++ b/config/eslint-config-custom/package.json @@ -0,0 +1,18 @@ +{ + "name": "eslint-config-custom", + "license": "MIT", + "version": "0.0.0", + "private": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^6.7.3", + "@typescript-eslint/parser": "^6.7.3", + "eslint": "^8.50.0", + "tsconfig": "workspace:*", + "typescript": "^5.2.2", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0" + }, + "devDependencies": { + "npm-run-all": "^4.1.5" + } +} diff --git a/config/eslint-config-custom/react.js b/config/eslint-config-custom/react.js new file mode 100644 index 0000000..f6ed1e0 --- /dev/null +++ b/config/eslint-config-custom/react.js @@ -0,0 +1,14 @@ +const { resolve } = require('node:path'); + +module.exports = { + extends: [ + require.resolve('./base.js'), + 'plugin:react/recommended', + 'plugin:react-hooks/recommended', + ], + settings: { + react: { + version: 'detect', + }, + }, +}; diff --git a/config/tsconfig/base.json b/config/tsconfig/base.json new file mode 100644 index 0000000..8a078b1 --- /dev/null +++ b/config/tsconfig/base.json @@ -0,0 +1,32 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Default", + "compilerOptions": { + "baseUrl": ".", + "esModuleInterop": true, + "exactOptionalPropertyTypes": true, + "forceConsistentCasingInFileNames": true, + "jsx": "react-jsx", + "module": "esnext", + "isolatedModules": true, + "moduleResolution": "node", + "noEmit": true, + "noEmitOnError": false, + "noFallthroughCasesInSwitch": true, + "noImplicitAny": true, + "noImplicitOverride": true, + "noImplicitReturns": true, + "noPropertyAccessFromIndexSignature": true, + "noUncheckedIndexedAccess": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "pretty": true, + "skipLibCheck": true, + "strict": true, + "strictNullChecks": true, + "preserveWatchOutput": true, + "stripInternal": true, + "target": "esnext" + }, + "exclude": ["node_modules", "dist"] +} diff --git a/config/tsconfig/library.json b/config/tsconfig/library.json new file mode 100644 index 0000000..94acd99 --- /dev/null +++ b/config/tsconfig/library.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "React Library", + "extends": "./base.json", + "compilerOptions": { + "target": "ESNext" + } +} diff --git a/config/tsconfig/nextjs.json b/config/tsconfig/nextjs.json new file mode 100644 index 0000000..4d352c9 --- /dev/null +++ b/config/tsconfig/nextjs.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Next.js", + "extends": "./base.json", + "compilerOptions": { + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": false, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "incremental": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve" + } +} diff --git a/config/tsconfig/package.json b/config/tsconfig/package.json new file mode 100644 index 0000000..41c0239 --- /dev/null +++ b/config/tsconfig/package.json @@ -0,0 +1,12 @@ +{ + "name": "tsconfig", + "version": "0.0.0", + "private": true, + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "devDependencies": { + "npm-run-all": "^4.1.5" + } +} diff --git a/config/tsconfig/react-library.json b/config/tsconfig/react-library.json new file mode 100644 index 0000000..36b62be --- /dev/null +++ b/config/tsconfig/react-library.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "React Library", + "extends": "./base.json", + "compilerOptions": { + "jsx": "react-jsx", + "lib": ["ES2015", "DOM"], + "module": "ESNext", + "target": "es6" + } +} diff --git a/documentation/.eslintrc.cjs b/documentation/.eslintrc.cjs new file mode 100644 index 0000000..ee9944f --- /dev/null +++ b/documentation/.eslintrc.cjs @@ -0,0 +1,3 @@ +module.exports = { + extends: ['custom/react', 'next'], +}; diff --git a/documentation/components/CodeBlock.tsx b/documentation/components/CodeBlock.tsx index 7779663..8fea7d7 100644 --- a/documentation/components/CodeBlock.tsx +++ b/documentation/components/CodeBlock.tsx @@ -1,15 +1,66 @@ -import { - Sandpack, - SandpackCodeEditor, - SandpackLayout, - SandpackPreview, - SandpackProvider, - useSandpack, -} from '@codesandbox/sandpack-react'; +import { Sandpack } from '@codesandbox/sandpack-react'; import { sandpackDark } from '@codesandbox/sandpack-themes'; import { useTheme } from 'next-themes'; import { useEffect, useState } from 'react'; +// import rawNsmCode from "../dist/nsm-docs-bundle/index.mjs?raw"; +import prettier from 'prettier'; -export function CodeBlock() { - return ; +export function CodeBlockVanilla({ + height, + children, +}: { + height?: number; + children: string; +}) { + const { theme } = useTheme(); + const code = ` +${children.trim()} + `.trim(); + + return ( + + ); +} +export function CodeBlock({ children }: { children: string }) { + const { theme } = useTheme(); + + return ( + + ); } diff --git a/documentation/next.config.js b/documentation/next.config.js index d987753..a1860fa 100644 --- a/documentation/next.config.js +++ b/documentation/next.config.js @@ -4,13 +4,24 @@ const withNextra = require('nextra')({ }); module.exports = { - ...withNextra(), - reactStrictMode: true, - swcMinify: true, - trailingSlash: true, - images: { - unoptimized: true, - }, + ...withNextra({ + trailingSlash: true, + images: { + unoptimized: true, + }, + distDir: 'dist', + swcMinify: true, + webpack: (config) => { + // console.log(config.module?.rules); + config.module?.rules?.unshift({ + resourceQuery: /raw/, + type: 'asset/source', + }); + + return config; + }, + }), + async redirects() { return [ { diff --git a/documentation/package.json b/documentation/package.json index c3b1501..0ce87a0 100644 --- a/documentation/package.json +++ b/documentation/package.json @@ -3,8 +3,10 @@ "version": "0.0.0", "private": true, "scripts": { - "build": "next build && next export -o dist", - "preview": "next dev" + "build": "next build", + "preview": "next dev", + "typecheck": "tsc --noEmit", + "typecheck:watch": "tsc --noEmit --watch" }, "dependencies": { "@codesandbox/sandpack-react": "^2.8.0", @@ -14,11 +16,19 @@ "next-themes": "^0.2.1", "nextra": "^2.13.1", "nextra-theme-docs": "^2.13.1", + "prettier": "^3.0.3", "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { "@types/node": "18.14.6", - "tailwindcss": "^3.3.3" + "@types/react": "^18.2.24", + "@types/react-dom": "^18.0.11", + "npm-run-all": "^4.1.5", + "tailwindcss": "^3.3.3", + "tsconfig": "workspace:*", + "typescript": "^5.2.2", + "eslint-config-custom": "workspace:*", + "eslint-config-next": "^13.5.4" } } diff --git a/documentation/pages/docs/actions.mdx b/documentation/pages/docs/actions.mdx new file mode 100644 index 0000000..9e9204d --- /dev/null +++ b/documentation/pages/docs/actions.mdx @@ -0,0 +1,86 @@ +# Actions + +Actions help you update your application state. They are the only way to update the state of your application. + +> Always keep your actions in the same file as the slice and key. See more about [structuring your code](./structuring-your-code). + +## Simple field update + +To update a field of your slice, you can use the `update` method on the field. + +```ts +const key = createKey('counterSlice'); +const counter = key.field(0); + +function increment() { + return counter.update((val) => val + 1); +} + +// store.js +store.dispatch(increment()); +// Get the updated state +counterSlice.get(store.state).counter; // 1 +``` + +> Note: just calling `increment()` is not enough to update the state. You need to dispatch the action to the store. + +## Updating many fields + +```ts +// userDataSlice.ts +const key = createKey('userDataSlice'); + +const userData = key.field(undefined); +const isLoading = key.field(false); + +// Update multiple fields of a slice in a single action +function setUserData(data) { + const txn = key.transaction(); + + return txn.step((state) => { + state = state.apply(userData.update(data)); + state = state.apply(isLoading.update(false)); + return state; + }); +} + +export const userDataSlice = key.slice({ + actions: { + setUserData, + }, + fields: { + // ... + }, +}); +``` + +## Merging transactions + +You can merge transaction from external actions into your slice's action. This is useful when you want to also change the state of other slices in one single action. + +In the example below we merge the transaction from an external `setUserData` action (see section above): + +```ts +import { userDataSlice } from './userDataSlice'; + +// set the userDataSlice as the dependency +const key = createKey('loginSlice', [userDataSlice]); + +const loggedIn = key.field(false); + +function loginUser(data) { + const txn = key.transaction(); + + return txn.step((state) => { + // get the transaction from the external action + const userDataTxn = userDataSlice.setUserData(data); + + state = state.apply(userDataTxn); + state = state.apply(loggedIn.update(true)); + + // the new state contains both the changes from the external action + // and the changes from this action + return state; + }); +} +``` diff --git a/documentation/pages/docs/advanced-topics/powerful-effects.mdx b/documentation/pages/docs/advanced-topics/powerful-effects.mdx new file mode 100644 index 0000000..31ef6bb --- /dev/null +++ b/documentation/pages/docs/advanced-topics/powerful-effects.mdx @@ -0,0 +1,47 @@ +## Custom isEqual camparison + +By default `track` uses `Object.is` to compare values. But this might not be useful in all cases. +Nalanda allows you to pass a custom `isEqual` function to `track.` to decide when a slice field has changed and the effect should be re-run. + +```typescript +const userName = userSlice.track.userName(store, { + // prevent re-running of effect if 'userName' differs only in case + isEqual: (a, b) => a.toLocaleLowerCase() === b.toLocaleLowerCase(), +}); +``` + +## Not tracking changes + +While re-running effect whenever a slice field changes is helpful, sometimes you just want to read the state without tracking it. +You can do this by using the `get` method instead of `track`. + +```typescript +effect((store) => { + // effect will rerun only when 'isLoggedIn' changes + const { isLoggedIn } = loginSlice.track(store); + // effect will not rerun when 'userName' changes + const { userName } = userSlice.get(store.state); + + if (isLoggedIn) { + console.log(`The user ${userName} is logged in`); + } else { + console.log(`Please login ${userName}`); + } +}); +``` + +## Conditional tracking + +If a condition is false, any tracking inside the condition will not be tracked (effects re-run will not depend on it) until the condition becomes true. + +In the following case when `isLoggedIn` becomes `true`, the effect will start tracking `userName` i.e. it will re-run whenever `userName` changes. + +```typescript +effect((store) => { + const { isLoggedIn } = loginSlice.track(store); + + if (isLoggedIn) { + const { userName } = userSlice.track(store); + } +}); +``` diff --git a/documentation/pages/docs/api/derived-field.mdx b/documentation/pages/docs/api/derived-field.mdx new file mode 100644 index 0000000..e69de29 diff --git a/documentation/pages/docs/api/effect.mdx b/documentation/pages/docs/api/effect.mdx new file mode 100644 index 0000000..e69de29 diff --git a/documentation/pages/docs/api/key.mdx b/documentation/pages/docs/api/key.mdx new file mode 100644 index 0000000..3cba14f --- /dev/null +++ b/documentation/pages/docs/api/key.mdx @@ -0,0 +1,154 @@ +## createKey + +Signature + +```ts +createKey(name:string, dependencies?: Slice[]) +``` + +Arguments: + +- `name` - Name of the slice. +- `dependencies` - An optional array of slices that this slice depends on. + +Returns: + +- `key` - A [key](#key) object. + +Example + +```ts +import { createKey } from 'nalanda'; + +const key = createKey('mySlice', [someSlice, someOtherSlice]); +``` + +## Key + +The following methods are available on the `key` object. + +### `.derive()` + +Creates a new derived field object. + +Signature: + +```ts +key.derive(compute: (storeState: StoreState) => T, options?: DeriveOptions); +``` + +Arguments: + +- `compute` - A function that computes the derived value. + +- `options?` - An optional object containing the following options. + + - `equal` - `(a: T, b: T) => boolean` A comparator function that compares the previous and current value of the derived field. If the comparator returns true, the derived field is not updated. Defaults to `Object.is`. + +### `.effect()` + +Creates a new effect object. + +Signature: + +```ts +key.effect(effect: (store: Store) => void | Promise) +``` + +Arguments: + +- `effect` - The callback to run as a side effect. + +Returns: + +- `effect` - An [effect](./effect) object. + +Example: + +```ts +const counter = key.field(0); + +key.effect((store) => { + // This will run whenever the counter value changes + const counterValue = counter.track(store); + console.log(`The counter value is ${counterValue}`); +}); +``` + +### `.field()` + +Creates a new field object. + +Signature: + +```ts +key.field(initialValue: any) +``` + +Arguments: + +- `initialValue` - Initial value of the field. + +Returns: + +- `field` - A field object. + +### `.slice()` + +Creates a new [slice](./slice) object. + +Signature: + +```ts +key.slice({ fields: { Fields }, actions: { Actions } }); +``` + +Arguments: + +- `fields` - An object containing the fields you to expose externally. + +- `actions` - An object containing the actions you to expose externally. + +Returns: + +- `slice` - A [slice](./slice) object. + +Example: + +```ts +export const countSlice = key.slice({ + fields: { + count, + }, + actions: { + increment, + }, +}); +``` + +> Note: Only the slice should be exported from your file. + +### `.transaction()` + +Creates a new [transaction](./transaction) object which is used to update the slice state. + +Signature: + +```ts +key.transaction(); +``` + +Returns: + +- `txn` - A [transaction](./transaction) object. + +Example: + +```ts +function increment() { + const txn = key.transaction(); + return txn.step((state: StoreState) => { + return state.apply(count.update((c) => c + 1)); + }); +} +``` diff --git a/documentation/pages/docs/api/ref.mdx b/documentation/pages/docs/api/ref.mdx new file mode 100644 index 0000000..3d7411c --- /dev/null +++ b/documentation/pages/docs/api/ref.mdx @@ -0,0 +1,82 @@ +# Ref + +Ref (short for reference) is a mutable object that allows you save value without any reactivity. +This allows you to share data across multiple runs of an effects. + +### Usage + +```ts {3} +import { ref } from 'nalanda'; + +const getValueRef = ref(initialValue); + +effect((store) => { + const valueRef = getValueRef(store); + valueRef.current = 'newValue'; // to set the value +}); +``` + +### Sharing ref between effects + +Here is an example where a shared ref is used to manage aborting of a request across multiple effects. + +```ts +import { ref } from 'nalanda'; + +const key = createKey('mySlice', []); +const getAbortRef = ref(new AbortController()); + +key.effect(async (store) => { + const abortRef = getAbortRef(store); + + if (!abortRef.current.signal.aborted) { + const data = await fetchUserData(); + // handle fetched data + + // reset the abort controller + abortRef.current = new AbortController(); + } +}); + +// an effect that can cancel the fetch +key.effect(async (store) => { + const abortRef = getAbortRef(store); + const { isUserLoggedIn } = useSlice.track(store); + + // if user logs out, cancel any ongoing fetch + if (!isUserLoggedIn) { + abortRef.current.abort(); + } +}); +``` + +### Typescript + +You pass a type argument to `ref` to specify the type of the value you want to store. + +```ts // +const getUsernameRef = ref(undefined); + +key.effect(async (store) => { + const usernameRef = getUsernameRef(store); + + // fetch username if not set + if (!usernameRef.current) { + const username = await fetchUsername(); + usernameRef.current = username; + } +}); +``` + +### When to use them? + +Refs share a lot of similarities with state. However, they are not the same. By default its a **good** idea to use slice state whever possible. + +1. When you don't need reactivity. + Setting a ref value will not trigger a re-render. This is useful when you want to store a value that is not related to the UI. + +1. When you need to share imperative data across multiple effects. + Things like `AbortController`, `setTimeout` and `setInterval` are good examples of things you want to share across multiple effects without the need to re-render. + +1. When the data is local to the effect. + If you need to store a value that is local to the effect and does not need to be widenly available across your application. For example, storing a `setInterval` id to clear it later. diff --git a/documentation/pages/docs/api/slice.mdx b/documentation/pages/docs/api/slice.mdx new file mode 100644 index 0000000..e69de29 diff --git a/documentation/pages/docs/api/state-field.mdx b/documentation/pages/docs/api/state-field.mdx new file mode 100644 index 0000000..e69de29 diff --git a/documentation/pages/docs/api/store-state.mdx b/documentation/pages/docs/api/store-state.mdx new file mode 100644 index 0000000..c003923 --- /dev/null +++ b/documentation/pages/docs/api/store-state.mdx @@ -0,0 +1,3 @@ +# StoreState + +### `.apply()` diff --git a/documentation/pages/docs/api/transaction.mdx b/documentation/pages/docs/api/transaction.mdx new file mode 100644 index 0000000..56641ef --- /dev/null +++ b/documentation/pages/docs/api/transaction.mdx @@ -0,0 +1,77 @@ +import { Callout } from 'nextra/components'; + +# Transaction + +A Transaction is an object when applied to a store state can produce a new store state. + +## Usage + +A transaction is created in Actions (a function that returns a transaction). + +In the example below the action `incrementCounter` returns a transaction that increments the counter. + +```ts {5} +const counterField = key.field(0); + +// An action is a function that returns a transaction +function incrementCounter(): Transaction { + const transaction = counterField.update((n) => n + 1); + return transaction; +} +``` + +### Updating the store state + +You can create transaction by calling `incrementCounter(){:ts}` and dispatching it to update the store state. + +```ts {3} +key.effect((store) => { + const oldValue = counterField.get(store.state); + store.dispatch(incrementCounter()); + const newValue = counterField.get(store.state); + console.log(`counter changed from ${oldValue} to ${newValue}`); +}); +``` + +> See [Effect](./effect) for more information on effects. + +## Methods + +### `.step()` + +Adds a step to that modifies the store state. + +Signature: + +```ts +transaction.step(stepper: (StoreState) => StoreState) +``` + +Arguments: + +- `stepper` - A function that takes a store state and returns a new modified store state. + +Returns: + +- The same transaction object. + +Example: + +```ts /step/ +function incrementCounter(): Transaction { + const txn = key.transaction(); + + return txn.step((storeState) => { + const counterValue = counterField.get(storeState); + + // field.update returns a transaction + const newTxn = counterField.update(counterValue + 1); + + // apply the transaction to the store state to return + // a new store state. + return storeState.apply(newTxn); + }); +} +``` + +> See [StoreState.apply()](./store-state/#apply) for more information on how to updating the store state. diff --git a/documentation/pages/docs/effects.mdx b/documentation/pages/docs/effects.mdx new file mode 100644 index 0000000..58e2844 --- /dev/null +++ b/documentation/pages/docs/effects.mdx @@ -0,0 +1,61 @@ +import { CodeBlockVanilla } from '../../components/CodeBlock'; + +# Effects + +Effects help you perform side effects in your application. They are used to perform tasks such as fetching data from a server, logging to the console, or interacting with the browser. + +```typescript +import { effect } from 'nalanda'; + +effect((store) => { + // effect will rerun whenever userSlice changes + const { userName } = userSlice.track(store); + const { isLoggedIn } = loginSlice.track(store); + + if (isLoggedIn) { + console.log(`The user ${userName} is logged in`); + } else { + console.log(`Please login ${userName}`); + } +}); +``` + +> Note: All effects will run atleast **once** after the store is initialized. + +## Tracking + +The tracking methods tracks any changes to the slice fields and re-runs the effect whenever it changes. +There are two ways to track changes in a slice. + +```typescript +// destructured form +const { userName, userAddress } = userSlice.track(store); + +// direct access +const userName = userSlice.track.userName(store); +const userAddress = userSlice.track.userAddress(store); +``` + +## Async Effects + +Effect callback can also be async. +If the effect has to run again before the previous effect run is completed, the `cleanup` function can be used to run any cleanups. + +```typescript +effect(async (store) => { + const { userName } = userSlice.track(store); + const controller = new AbortController(); + + const data = await fetchUserData(userName, { + signal: controller.signal, + }); + + store.dispatch(userSlice.updateGithubData(data)); + + cleanup(store, () => { + // if userName changes, abort the fetch request + // so that we don't update the state with stale data. + controller.abort(); + }); +}); +``` diff --git a/documentation/pages/docs/getting-started.mdx b/documentation/pages/docs/getting-started.mdx new file mode 100644 index 0000000..f1cea72 --- /dev/null +++ b/documentation/pages/docs/getting-started.mdx @@ -0,0 +1,54 @@ +import { CodeBlockVanilla } from '../../components/CodeBlock'; + +# nalanda Documentation + +## Introduction + +`nalanda` is a lightweight state management library, which enables setting up stores, slices, and states in a simplified and efficient manner. Below is a guideline on how to use `nalanda` effectively. + +## Setup & Usage + +To use `nalanda`, it is essential to set up a store, create a slice, and define a state. + +### 1. Installing the Library + +Before setting up the store, ensure that `nalanda` is installed in your project. + + +{` +import { createKey, createStore } from 'nalanda'; + +// Create a key with a unique slice name +const key = createKey('mySliceName'); + +// Define the initial state field +const counter = key.field(0); + +// Define an action to update the state +function increment() { +return counter.update((prev) => prev + 1); +} + +// A slice is a collection of state fields and actions +// this will be the only way to access the state from outside. +const counterSlice = key.slice({ +counter, +}); + +// Set up the global store with your slice +const store = createStore({ +slices: [counterSlice], +}); + +// Log the initial state value +console.log(counterSlice.get(store.state)); // 0 + +// Dispatch an action to update the state +store.dispatch(increment()); + +// Log the updated state value +console.log(counterSlice.get(store.state)); // 1 + +`} + + diff --git a/documentation/pages/docs/index.mdx b/documentation/pages/docs/index.mdx index 2ba0c3d..e818a74 100644 --- a/documentation/pages/docs/index.mdx +++ b/documentation/pages/docs/index.mdx @@ -2,7 +2,7 @@ import { Callout, Tabs, Tab } from 'nextra-theme-docs'; # Nalanda -A serious state management library. +Affordable state management library for everyone. #### Installation diff --git a/documentation/pages/docs/selectors.mdx b/documentation/pages/docs/selectors.mdx new file mode 100644 index 0000000..ab22e07 --- /dev/null +++ b/documentation/pages/docs/selectors.mdx @@ -0,0 +1,58 @@ +# Selectors + +Selectors help you to create state that is derived from other fields or other slices. + +In the following example we are using the `loginSlice` and `userSlice` in a selector. + +```ts +import { loginSlice } from './loginSlice'; +import { userSlice } from './userSlice'; + +const key = createKey( + 'myAppSlice', + // declare the dependencies + [loginSlice, userSlice], +); + +const nameField = key.derive((state) => { + const { isLoggedIn } = loginSlice.get(state); + const { userName } = userSlice.get(state); + + if (isLoggedIn) { + return userName; + } + + return 'Guest'; +}); +``` + +## Composing selectors + +Selectors can be composed with other selectors. + +```ts +const counterField = key.field(0); + +const doubleField = key.derive((state) => { + const counter = counterField.get(state); + return counter * 2; +}); + +const timesSixField = key.derive((state) => { + const counter = doubleField.get(state); + return counter * 3; +}); + +export const mySlice = key.slice({ + fields: { + counter: counterField, + double: doubleField, + timesSix: timesSixField, + }, +}); + +key.effect((store) => { + const { counter, double, timesSix } = mySlice.track(store); + console.log({ counter, double, timesSix }); +}); +``` diff --git a/documentation/pages/docs/slice.mdx b/documentation/pages/docs/slice.mdx new file mode 100644 index 0000000..579a594 --- /dev/null +++ b/documentation/pages/docs/slice.mdx @@ -0,0 +1,113 @@ +# Slice + +A slice is a fundamental data structure that facilitates robust state management for your application. +It consolidates actions, state fields, selector fields, and effects. +It is crucial to **only export** the slice, enabling it to serve as a gatekeeper for the rest of your application +, maintaining encapsulation and integrity. + +## Creating a slice + +To create a slice: + +```ts +import { createKey } from 'nalanda'; + +const key = createKey('loginSlice'); + +// create fields +const isLoggedIn = key.field(false); + +// create actions +function loginUser() { + return counter.update(true); +} + +// Only export the slice +export const loginSlice = key.slice({ + fields: { + isLoggedIn, + }, + actions: { + loginUser, + }, +}); +``` + +### Best practices + +1. **Export slice only**: One export the slice and notthing else, even for testing purposes + +2. **One slice per file**: Keep a single slice per file to streamline locating slices and their dependencies. + +### Registering a slice + +To register your slice in the centralized store: + +```ts +import { createStore } from 'nalanda'; + +const store = createStore({ + slices: [loginSlice], +}); +``` + +## Usage + +Use a slice wherever there's access to the store or the store state, typically in UI components, effects, or other slices. + +### In another Slice's action + +In the following example we are using the `loginSlice` in another slice's action. + +```ts +// userSlice.ts +// userSlice.ts +import { createKey } from 'nalanda'; +import { loginSlice } from './loginSlice'; + +const key = createKey('mySliceName', [loginSlice]); // Pass loginSlice as a dependency + +const userNameField = key.field(undefined); + +function setUserName(userName) { + const txn = key.transaction(); + return txn.step((state) => { + // Check if user is logged in + if (!loginSlice.get(state).isLoggedIn) return state; + + const newState = state.apply(userNameField.update(userName)); + + return newState; + }); +} + +export const userSlice = key.slice({ + fields: { + userName: userNameField, + }, + actions: { + setUserName, + }, +}); +``` + +For more details, refer to the [actions](./actions) documentation. + +### In an Effect + +In the following example we are using the `loginSlice` in an effect. + +```ts +import { loginSlice } from './loginSlice'; +import { effect } from 'nalanda'; + +effect((store) => { + const { isLoggedIn } = loginSlice.get(store.state); + + if (isLoggedIn) { + // Execute specific actions + } +}); +``` + +For additional information, visit the [effects](./effects) documentation. diff --git a/documentation/tsconfig.json b/documentation/tsconfig.json index 093985a..a355365 100644 --- a/documentation/tsconfig.json +++ b/documentation/tsconfig.json @@ -1,19 +1,5 @@ { - "compilerOptions": { - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": false, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "incremental": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve" - }, + "extends": "tsconfig/nextjs.json", "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], "exclude": ["node_modules"] } diff --git a/package.json b/package.json index 84140c2..b6afebd 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,8 @@ { - "name": "nalanda", - "sideEffects": false, + "name": "nalanda-workspace", + "private": true, "version": "0.0.0", "description": "", - "main": "dist/index.js", "authors": [ { "name": "Kushan Joshi", @@ -19,55 +18,17 @@ "url": "https://github.com/bangle-io/nalanda/issues" }, "scripts": { - "test": "jest", - "lint": "npm-run-all -l --aggregate-output --parallel lint:*", - "lint:eslint": "eslint .", - "lint:tsc": "tsc --noEmit", - "lint:prettier": "prettier src --check", - "build": "tsup", - "format": "prettier src --write", - "preview-docs": "pnpm --filter documentation run preview", - "build-docs": "pnpm --filter documentation run build" + "build": "pnpm -r run build", + "lint": "pnpm -r run lint", + "test": "pnpm -r run test", + "build-docs": "pnpm -r --filter documentation build" }, "keywords": [], "license": "MIT", "dependencies": { - "use-sync-external-store": "^1.2.0" - }, - "files": [ - "package.json", - "dist", - "src", - "README.md", - "LICENSE.txt", - "!**/.gitattributes" - ], - "devDependencies": { - "@semantic-release/changelog": "^6.0.3", - "@semantic-release/commit-analyzer": "10.0.4", - "@semantic-release/exec": "6.0.3", - "@semantic-release/git": "^10.0.1", - "@semantic-release/github": "^9.2.1", - "@semantic-release/npm": "^10.0.6", - "@swc/core": "^1.3.90", - "@swc/jest": "^0.2.29", - "@types/jest": "^29.5.5", - "@types/react": "^18.2.23", - "@types/react-dom": "^18.2.8", - "@types/use-sync-external-store": "^0.0.4", - "@typescript-eslint/eslint-plugin": "^6.7.3", - "@typescript-eslint/parser": "^6.7.3", - "eslint": "^8.50.0", - "jest": "^29.7.0", - "npm-run-all": "^4.1.5", - "prettier": "^3.0.3", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "semantic-release": "^21.1.2", - "tsup": "^7.2.0", + "tsconfig": "workspace:*", "typescript": "^5.2.2", - "wait-for-expect": "^3.0.2", - "zod": "^3.22.2" + "prettier": "^3.0.3" }, "prettier": { "singleQuote": true, @@ -75,40 +36,5 @@ "quoteProps": "consistent", "arrowParens": "always", "printWidth": 80 - }, - "peerDependencies": { - "react": ">=17.0", - "zod": ">=3.20.0" - }, - "publishConfig": { - "access": "public" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "zod": { - "optional": true - } - }, - "exports": { - ".": { - "types": "./dist/index.d.ts", - "import": "./dist/index.mjs", - "require": "./dist/index.js" - }, - "./package.json": "./package.json", - "./react": { - "types": "./dist/react/index.d.ts", - "import": "./dist/react/index.mjs", - "require": "./dist/react/index.js" - }, - "./vanilla": { - "types": "./dist/vanilla/index.d.ts", - "import": "./dist/vanilla/index.mjs", - "require": "./dist/vanilla/index.js" - } - }, - "module": "dist/index.mjs", - "types": "dist/index.d.ts" + } } diff --git a/packages/core/.eslintrc.cjs b/packages/core/.eslintrc.cjs new file mode 100644 index 0000000..63d1173 --- /dev/null +++ b/packages/core/.eslintrc.cjs @@ -0,0 +1,3 @@ +module.exports = { + extends: ['custom/base'], +}; diff --git a/jest.config.cjs b/packages/core/jest.config.cjs similarity index 100% rename from jest.config.cjs rename to packages/core/jest.config.cjs diff --git a/jest.setup.js b/packages/core/jest.setup.js similarity index 77% rename from jest.setup.js rename to packages/core/jest.setup.js index 1fab659..9ea8fc8 100644 --- a/jest.setup.js +++ b/packages/core/jest.setup.js @@ -1,5 +1,7 @@ +// eslint-disable-next-line no-undef globalThis.requestIdleCallback = function (cb) { const start = Date.now(); + // eslint-disable-next-line no-undef return setTimeout(function () { cb({ didTimeout: false, diff --git a/packages/core/package.json b/packages/core/package.json new file mode 100644 index 0000000..e327ab3 --- /dev/null +++ b/packages/core/package.json @@ -0,0 +1,49 @@ +{ + "name": "nalanda", + "sideEffects": false, + "version": "0.0.0", + "license": "MIT", + "authors": [ + { + "name": "Kushan Joshi", + "email": "0o3ko0@gmail.com", + "web": "http://github.com/kepta" + } + ], + "repository": { + "type": "git", + "url": "https://github.com/bangle-io/nalanda.git" + }, + "bugs": { + "url": "https://github.com/bangle-io/nalanda/issues" + }, + "scripts": { + "typecheck": "tsc --noEmit", + "typecheck:watch": "tsc --noEmit --watch", + "test": "jest", + "lint": "npm-run-all -l --aggregate-output --parallel lint:*", + "lint:eslint": "eslint .", + "lint:tsc": "tsc --noEmit", + "lint:prettier": "prettier src --check", + "format": "prettier src --write" + }, + "devDependencies": { + "@swc/core": "^1.3.90", + "@swc/jest": "^0.2.29", + "@types/jest": "^29.5.5", + "eslint-config-custom": "workspace:*", + "jest": "^29.7.0", + "npm-run-all": "^4.1.5", + "prettier": "^3.0.3", + "tsconfig": "workspace:*", + "typescript": "^5.2.2", + "wait-for-expect": "^3.0.2" + }, + "prettier": { + "singleQuote": true, + "trailingComma": "all", + "quoteProps": "consistent", + "arrowParens": "always", + "printWidth": 80 + } +} diff --git a/packages/core/src/__tests__/actions.test.ts b/packages/core/src/__tests__/actions.test.ts new file mode 100644 index 0000000..05ec981 --- /dev/null +++ b/packages/core/src/__tests__/actions.test.ts @@ -0,0 +1,203 @@ +import { testCleanup } from '../helpers/test-cleanup'; +import { createKey } from '../slice/key'; +import { createStore } from '../store'; + +afterEach(() => { + testCleanup(); +}); + +describe('actions', () => { + const key = createKey('mySliceName'); + + const counter = key.field(0); + const counterNegative = key.field(-1); + + const counterSlice = key.slice({ + fields: { counter, counterNegative }, + }); + + function increment() { + return counter.update((c) => c + 1); + } + + function decrement() { + return counterNegative.update((c) => c - 1); + } + + function customUpdate(val: { counter: number; counterNegative: number }) { + const txn = key.transaction(); + + return txn.step((state) => { + state = state.apply(counter.update(val.counter)); + state = state.apply(counterNegative.update(val.counterNegative)); + return state; + }); + } + + function chainedAction() { + const txn = key.transaction(); + + return txn + .step((state) => { + state = state.apply(counter.update((c) => c + 1)); + return state; + }) + .step((state) => { + return state.apply(counterNegative.update((c) => c - 1)); + }) + .step((state) => { + return state.apply(counter.update((c) => c + 1)); + }); + } + + function setup() { + const store = createStore({ + slices: [counterSlice], + }); + + return { store }; + } + + describe('basic actions', () => { + test('should increment counter', () => { + const { store } = setup(); + const initStoreState = store.state; + + store.dispatch(increment()); + + expect(counterSlice.get(store.state)).toEqual({ + counter: 1, + counterNegative: -1, + }); + + expect(counterSlice.get(initStoreState)).toEqual({ + counter: 0, + counterNegative: -1, + }); + }); + + test('should handle multiple increments', () => { + const { store } = setup(); + + store.dispatch(increment()); + store.dispatch(increment()); + + expect(counter.get(store.state)).toBe(2); + expect(counterNegative.get(store.state)).toBe(-1); + }); + + test('should handle increment and decrement', () => { + const { store } = setup(); + + store.dispatch(increment()); + store.dispatch(increment()); + store.dispatch(decrement()); + + expect(counter.get(store.state)).toBe(2); + expect(counterNegative.get(store.state)).toBe(-2); + }); + + test('should maintain state correctness after actions', () => { + const { store } = setup(); + + store.dispatch(increment()); + store.dispatch(increment()); + store.dispatch(decrement()); + + expect(counterSlice.get(store.state)).toEqual({ + counter: 2, + counterNegative: -2, + }); + }); + + test('should update both counter and counterNegative with customUpdate', () => { + const { store } = setup(); + + store.dispatch(customUpdate({ counter: 3, counterNegative: -3 })); + + expect(counterSlice.get(store.state)).toEqual({ + counter: 3, + counterNegative: -3, + }); + }); + + test('should handle multiple custom updates correctly', () => { + const { store } = setup(); + + store.dispatch(customUpdate({ counter: 2, counterNegative: -2 })); + store.dispatch(customUpdate({ counter: 5, counterNegative: -5 })); + + expect(counterSlice.get(store.state)).toEqual({ + counter: 5, + counterNegative: -5, + }); + }); + + test('should maintain correct state after customUpdate and other actions', () => { + const { store } = setup(); + + store.dispatch(customUpdate({ counter: 2, counterNegative: -2 })); + store.dispatch(increment()); + store.dispatch(decrement()); + + expect(counterSlice.get(store.state)).toEqual({ + counter: 3, + counterNegative: -3, + }); + }); + + test('should double increment the counter', () => { + const { store } = setup(); + + store.dispatch(chainedAction()); + + expect(counterSlice.get(store.state)).toEqual({ + counter: 2, + counterNegative: -2, // Assuming counterNegative remains unaffected + }); + }); + }); + + describe('merging actions from another slice', () => { + const key = createKey('myOtherSlice', [counterSlice]); + + const base = key.field(0); + + function bumpByNumber(number: number) { + const txn = key.transaction(); + + return txn.step((state) => { + state = state.apply( + customUpdate({ counter: number, counterNegative: -number }), + ); + state = state.apply(base.update((c) => c + number)); + return state; + }); + } + const baseSlice = key.slice({ + fields: { base }, + }); + + test('should work', () => { + const store = createStore({ + slices: [counterSlice, baseSlice], + }); + + expect(counterSlice.get(store.state)).toEqual({ + counter: 0, + counterNegative: -1, + }); + + store.dispatch(bumpByNumber(1)); + + expect(baseSlice.get(store.state)).toEqual({ + base: 1, + }); + + expect(counterSlice.get(store.state)).toEqual({ + counter: 1, + counterNegative: -1, + }); + }); + }); +}); diff --git a/src/vanilla/__tests__/dependency-helpers.test.ts b/packages/core/src/__tests__/dependency-helpers.test.ts similarity index 95% rename from src/vanilla/__tests__/dependency-helpers.test.ts rename to packages/core/src/__tests__/dependency-helpers.test.ts index ae4c0a4..d227c85 100644 --- a/src/vanilla/__tests__/dependency-helpers.test.ts +++ b/packages/core/src/__tests__/dependency-helpers.test.ts @@ -1,17 +1,17 @@ -import { calcReverseDependencies as _calcReverseDependencies } from '../helpers'; -import { AnySlice } from '../types'; +import { calcReverseDependencies as _calcReverseDependencies } from '../helpers/dependency-helpers'; +import { Slice } from '../slice/slice'; const createSlice = (id: string) => - ({ sliceId: id, dependencies: [] }) as unknown as AnySlice; + ({ sliceId: id, dependencies: [] }) as unknown as Slice; -const setDeps = (slice: AnySlice, deps: string[]) => { +const setDeps = (slice: Slice, deps: string[]) => { return { ...slice, dependencies: deps.map((dep) => createSlice(dep)), - } as AnySlice; + } as Slice; }; -const calcReverseDependencies = (slices: AnySlice[]) => { +const calcReverseDependencies = (slices: Slice[]) => { return _calcReverseDependencies(slices) as Record>; }; diff --git a/src/vanilla/effect/__tests__/effect.test.ts b/packages/core/src/__tests__/effect.test.ts similarity index 84% rename from src/vanilla/effect/__tests__/effect.test.ts rename to packages/core/src/__tests__/effect.test.ts index fe631c1..3541c29 100644 --- a/src/vanilla/effect/__tests__/effect.test.ts +++ b/packages/core/src/__tests__/effect.test.ts @@ -1,9 +1,9 @@ -import { slice, sliceKey } from '../../slice'; -import { testCleanup } from '../../helpers/test-cleanup'; -import { Store } from '../../store'; +import { testCleanup } from '../helpers/test-cleanup'; import waitForExpect from 'wait-for-expect'; -import { effect } from '../effect'; -import { cleanup } from '../../cleanup'; +import { createKey } from '../slice/key'; +import { createStore } from '../store'; +import { EffectScheduler, effect } from '../effect/effect'; +import { cleanup } from '../effect/cleanup'; beforeEach(() => { testCleanup(); @@ -13,52 +13,48 @@ function sleep(t = 1): Promise { return new Promise((res) => setTimeout(res, t)); } -const sliceA = slice([], { - name: 'sliceA', - state: { - sliceAField1: 'value:sliceAField1', - sliceAField2: 'value:sliceAField2', +const zeroTimeoutScheduler: EffectScheduler = (cb, opts) => { + if (opts.deferred) { + setTimeout(cb, 0); + } else { + queueMicrotask(cb); + } +}; + +const sliceAKey = createKey('sliceA', []); +const sliceAField1 = sliceAKey.field('value:sliceAField1'); +const sliceAField2 = sliceAKey.field('value:sliceAField2'); + +const sliceA = sliceAKey.slice({ + fields: { + sliceAField1, + sliceAField2, }, }); -const sliceB = slice([], { - name: 'sliceB', - state: { sliceBField1: 'value:sliceBField1' }, -}); +const sliceBKey = createKey('sliceB', []); +const sliceBField1 = sliceBKey.field('value:sliceBField1'); -const sliceCDepBKey = sliceKey([sliceB], { - name: 'sliceCDepB', - state: { sliceCDepBField: 'value:sliceCDepBField' }, +const sliceB = sliceBKey.slice({ + fields: { + sliceBField1, + }, }); -const sliceCDepBSelector1 = sliceCDepBKey.selector( - (state) => { - return ( - sliceCDepBKey.get(state).sliceCDepBField + - ':' + - sliceB.get(state).sliceBField1 - ); - }, - { - equal: (a, b) => { - return a === b; - }, - }, -); +const sliceCDepBKey = createKey('sliceCDepB', [sliceB]); +const sliceCDepBField = sliceCDepBKey.field('value:sliceCDepBField'); -const sliceCDepBSelector2 = sliceCDepBKey.selector( - (state) => { - return sliceCDepBKey.get(state).sliceCDepBField + ':selector2'; - }, - { - equal: (a, b) => { - return a === b; - }, - }, -); +const sliceCDepBSelector1 = sliceCDepBKey.derive((state) => { + return sliceCDepBField.get(state) + ':' + sliceB.get(state).sliceBField1; +}); + +const sliceCDepBSelector2 = sliceCDepBKey.derive((state) => { + return sliceCDepBField.get(state) + ':selector2'; +}); const sliceCDepB = sliceCDepBKey.slice({ - derivedState: { + fields: { + sliceCDepBField, sliceCDepBSelector1, sliceCDepBSelector2, }, @@ -66,36 +62,27 @@ const sliceCDepB = sliceCDepBKey.slice({ describe('effect with store', () => { const setup = () => { - const updateSliceAField1 = sliceA.action((sliceAField1: string) => { - let transaction = sliceA.tx((state) => { - return sliceA.update(state, { sliceAField1 }); - }); - - return transaction; - }); - - const updateSliceAField2 = sliceA.action((sliceAField2: string) => { - let transaction = sliceA.tx((state) => { - return sliceA.update(state, { sliceAField2 }); - }); - - return transaction; - }); - - const updateSliceBField1 = sliceB.action((sliceBField1: string) => { - return sliceB.tx((state) => { - return sliceB.update(state, { sliceBField1 }); - }); - }); - - const updateSliceCDepBField = sliceCDepB.action((val: string) => { - return sliceCDepB.tx((state) => { - return sliceCDepB.update(state, { sliceCDepBField: val }); - }); - }); - - const store = Store.create({ - storeName: 'test', + function updateSliceAField1(val: string) { + return sliceAField1.update(val); + } + + function updateSliceAField2(val: string) { + return sliceAField2.update(val); + } + + function updateSliceBField1(val: string) { + return sliceBField1.update(val); + } + + function updateSliceCDepBField(val: string) { + return sliceCDepBField.update(val); + } + + const store = createStore({ + name: 'test', + overrides: { + effectSchedulerOverride: zeroTimeoutScheduler, + }, slices: [sliceA, sliceB, sliceCDepB], }); @@ -224,6 +211,11 @@ describe('effect with store', () => { const selector2InitValue = 'value:sliceCDepBField:selector2'; + expect({ ...sliceCDepB.get(store.state) }).toEqual({ + sliceCDepBField: 'value:sliceCDepBField', + sliceCDepBSelector1: 'value:sliceCDepBField:value:sliceBField1', + sliceCDepBSelector2: 'value:sliceCDepBField:selector2', + }); expect(sliceCDepB.get(store.state).sliceCDepBSelector2).toBe( selector2InitValue, ); @@ -303,18 +295,13 @@ describe('effect with store', () => { const cleanupCalled = jest.fn(); const effectCalled = jest.fn(); - const eff = store.effect( - (effectStore) => { - const { sliceAField1 } = sliceA.track(effectStore); + store.effect((effectStore) => { + const { sliceAField1 } = sliceA.track(effectStore); - effectCalled(sliceAField1); + effectCalled(sliceAField1); - cleanup(effectStore, cleanupCalled); - }, - { - deferred: false, - }, - ); + cleanup(effectStore, cleanupCalled); + }); await waitForExpect(() => { expect(effectCalled).toHaveBeenCalledTimes(1); @@ -340,16 +327,13 @@ describe('effect with store', () => { const cleanupCalled = jest.fn(); const effectCalled = jest.fn(); - const eff = store.effect( - (effectStore) => { - const { sliceBField1 } = sliceB.track(effectStore); + const eff = store.effect((effectStore) => { + const { sliceBField1 } = sliceB.track(effectStore); - effectCalled(sliceBField1); + effectCalled(sliceBField1); - cleanup(effectStore, cleanupCalled); - }, - { deferred: false }, - ); + cleanup(effectStore, cleanupCalled); + }); await waitForExpect(() => { expect(effectCalled).toHaveBeenCalledTimes(1); @@ -567,10 +551,11 @@ describe('effect with store', () => { describe('effect only', () => { const setup = () => { const callback = jest.fn(); - const store = Store.create({ - storeName: 'test', + const store = createStore({ + name: 'test', slices: [sliceA, sliceB, sliceCDepB], }); + return { effect: effect( () => { @@ -619,14 +604,13 @@ describe('effect only', () => { test('runs the effect if it has run once and dependencies have changed', async () => { const { effect, callback } = setup(); - effect.run(); await sleep(5); jest .spyOn(effect['runInstance'], 'whatDependenciesStateChange') - .mockReturnValue('someChange'); + .mockReturnValue(sliceAKey.field('some field that changed')); effect.run(); await sleep(5); @@ -643,7 +627,7 @@ describe('effect only', () => { jest .spyOn(effect['runInstance'], 'whatDependenciesStateChange') - .mockReturnValue(false); + .mockReturnValue(undefined); effect.run(); diff --git a/packages/core/src/__tests__/field.test.ts b/packages/core/src/__tests__/field.test.ts new file mode 100644 index 0000000..80b7604 --- /dev/null +++ b/packages/core/src/__tests__/field.test.ts @@ -0,0 +1,147 @@ +import { testCleanup } from '../helpers/test-cleanup'; +import { createKey } from '../slice/key'; +import { createStore } from '../store'; + +beforeEach(() => { + testCleanup(); +}); + +describe('internal fields', () => { + test('internal field should be updated', () => { + const key = createKey('mySliceName'); + const counter = key.field(0); + const counterSlice = key.slice({ + fields: {}, + }); + + function updateCounter(state: number) { + return counter.update(state + 1); + } + + const store = createStore({ + slices: [counterSlice], + }); + + expect(counter.get(store.state)).toBe(0); + expect(Object.keys(counterSlice.get(store.state))).toEqual([]); + }); + + describe('mix of internal and external fields', () => { + const setup = () => { + const key = createKey('mySliceName'); + const counter = key.field(0); + const myName = key.field('kj'); + const callCount = { + externalDerivedOnCounter: 0, + internalDerivedOnCounter: 0, + }; + + const externalDerivedOnCounter = key.derive((state) => { + callCount.externalDerivedOnCounter++; + return `external:counter is ${counter.get(state)}`; + }); + + const internalDerivedOnCounter = key.derive((state) => { + callCount.internalDerivedOnCounter++; + return `internal:counter is ${counter.get(state)}`; + }); + + const counterSlice = key.slice({ + fields: { + myName, + externalDerivedOnCounter, + }, + }); + + function updateCounter() { + return counter.update((existing) => existing + 1); + } + + function updateName(name: string) { + return myName.update(name + '!'); + } + + return { + counter, + counterSlice, + updateCounter, + updateName, + callCount, + internalDerivedOnCounter, + }; + }; + + test('access external fields', () => { + const { counterSlice, counter, callCount } = setup(); + const store = createStore({ + slices: [counterSlice], + }); + + expect(counter.get(store.state)).toBe(0); + + const result = counterSlice.get(store.state); + expect('myName' in result).toBe(true); + expect('counter' in result).toBe(false); + expect({ ...result }).toEqual({ + externalDerivedOnCounter: 'external:counter is 0', + myName: 'kj', + }); + expect(Object.keys(result)).toEqual([ + 'myName', + 'externalDerivedOnCounter', + ]); + + expect(callCount).toEqual({ + externalDerivedOnCounter: 1, + internalDerivedOnCounter: 0, + }); + }); + + test('updating', () => { + const { counterSlice, counter, callCount, updateCounter } = setup(); + + const store = createStore({ + slices: [counterSlice], + }); + + store.dispatch(updateCounter()); + expect(counter.get(store.state)).toBe(1); + let result = counterSlice.get(store.state); + + expect(result.externalDerivedOnCounter).toBe('external:counter is 1'); + // to test proxy + result.externalDerivedOnCounter; + result.externalDerivedOnCounter; + expect(callCount.externalDerivedOnCounter).toEqual(1); + + store.dispatch(updateCounter()); + expect(counter.get(store.state)).toBe(2); + result = counterSlice.get(store.state); + expect(result.externalDerivedOnCounter).toBe('external:counter is 2'); + // to test proxy + result.externalDerivedOnCounter; + expect(callCount.externalDerivedOnCounter).toEqual(2); + }); + + test('derived is lazy', () => { + const { counterSlice, counter, callCount, updateCounter } = setup(); + + const store = createStore({ + slices: [counterSlice], + }); + + store.dispatch(updateCounter()); + expect(counter.get(store.state)).toBe(1); + let result = counterSlice.get(store.state); + + // accessing some other field should not trigger the derived + expect(result.myName).toBe('kj'); + expect(callCount.externalDerivedOnCounter).toEqual(0); + // access the derived field + result.externalDerivedOnCounter; + expect(callCount.externalDerivedOnCounter).toEqual(1); + + expect(counterSlice.get(store.state)).toBe(result); + }); + }); +}); diff --git a/src/vanilla/__tests__/ref.test.ts b/packages/core/src/__tests__/ref.test.ts similarity index 52% rename from src/vanilla/__tests__/ref.test.ts rename to packages/core/src/__tests__/ref.test.ts index 641e271..ead50ad 100644 --- a/src/vanilla/__tests__/ref.test.ts +++ b/packages/core/src/__tests__/ref.test.ts @@ -1,34 +1,37 @@ -import { slice } from '../slice'; -import { Store } from '../store'; -import { ref } from '../ref'; -import { effect } from '../effect'; -import { DerivativeStore } from '../base-store'; +import { Store, createStore } from '../store'; import waitForExpect from 'wait-for-expect'; import { testCleanup } from '../helpers/test-cleanup'; - -const sliceA = slice([], { - name: 'sliceA', - state: { - sliceAField1: 'value:sliceAField1', - sliceAField2: 'value:sliceAField2', +import { createKey } from '../slice/key'; +import { ref } from '../effect/ref'; +import { EffectStore } from '../effect/effect'; + +const sliceAKey = createKey('sliceA', []); +const sliceAField1 = sliceAKey.field('value:sliceAField1'); +const sliceAField2 = sliceAKey.field('value:sliceAField2'); + +const sliceA = sliceAKey.slice({ + fields: { + sliceAField1, + sliceAField2, }, }); -const sliceB = slice([], { - name: 'sliceB', - state: { sliceBField1: 'value:sliceBField1' }, -}); +const sliceBKey = createKey('sliceB', []); +const sliceBField1 = sliceBKey.field('value:sliceBField1'); -// to get around the abstract class limitation -class MyDerivedStore extends DerivativeStore {} +const sliceB = sliceBKey.slice({ + fields: { + sliceBField1, + }, +}); beforeEach(() => { testCleanup(); }); test('ref works', async () => { - const myStore = Store.create({ - storeName: 'myStore', + const myStore = createStore({ + name: 'myStore', slices: [sliceA, sliceB], }); @@ -36,34 +39,34 @@ test('ref works', async () => { foo: {}, })); + let derStore: EffectStore | undefined; + myStore.effect((store) => { + derStore = store; const val = sliceA.track(store); - const myRef = getMyRef(store); myRef.current.foo.counter = 1; }); - const derStore = new MyDerivedStore(myStore, 'testStore'); - - expect(getMyRef(derStore).current).toEqual({ + expect(getMyRef(myStore).current).toEqual({ foo: {}, }); // effect is deferred so we need to wait for it to run await waitForExpect(() => { - expect(getMyRef(derStore).current.foo.counter).toBe(1); + expect(getMyRef(derStore!).current.foo.counter).toBe(1); }); }); test('creating another store does not reuse the ref value', async () => { - const myStore = Store.create({ - storeName: 'myStore', + const myStore = createStore({ + name: 'myStore', slices: [sliceA, sliceB], }); - const myStore2 = Store.create({ - storeName: 'myStore2', + const myStore2 = createStore({ + name: 'myStore2', slices: [sliceA, sliceB], }); @@ -71,7 +74,11 @@ test('creating another store does not reuse the ref value', async () => { foo: {}, })); + let derStore: EffectStore | undefined; + let derStore2: EffectStore | undefined; + myStore.effect((store) => { + derStore = store; const val = sliceA.track(store); const myRef = getMyRef(store); @@ -80,32 +87,30 @@ test('creating another store does not reuse the ref value', async () => { }); myStore2.effect((store) => { + derStore2 = store; const myRef = getMyRef(store); myRef.current.foo.counter = 99; }); - const derStore = new MyDerivedStore(myStore, 'testStore'); - const derStore2 = new MyDerivedStore(myStore2, 'testStore2'); - - expect(getMyRef(derStore).current).toEqual({ + expect(getMyRef(myStore).current).toEqual({ foo: {}, }); // effect is deferred so we need to wait for it to run await waitForExpect(() => { - expect(getMyRef(derStore).current.foo.counter).toBe(1); + expect(getMyRef(derStore!).current.foo.counter).toBe(1); }); // effect is deferred so we need to wait for it to run await waitForExpect(() => { - expect(getMyRef(derStore2).current.foo.counter).toBe(99); + expect(getMyRef(derStore2!).current.foo.counter).toBe(99); }); }); test('multiple effects can share the ref value', async () => { - const myStore = Store.create({ - storeName: 'myStore', + const myStore = createStore({ + name: 'myStore', slices: [sliceA, sliceB], }); @@ -113,7 +118,11 @@ test('multiple effects can share the ref value', async () => { foo: {}, })); + let derStore: EffectStore | undefined; + let derStore2: EffectStore | undefined; + myStore.effect((store) => { + derStore = store; const val = sliceA.track(store).sliceAField1; const myRef = getMyRef(store); @@ -121,7 +130,8 @@ test('multiple effects can share the ref value', async () => { myRef.current.foo.counter = 1; }); - myStore.effect((store) => { + sliceBKey.effect((store) => { + derStore2 = store; const val = sliceB.track(store).sliceBField1; const myRef = getMyRef(store); @@ -131,13 +141,13 @@ test('multiple effects can share the ref value', async () => { } }); - const derStore = new MyDerivedStore(myStore, 'testStore'); - - expect(getMyRef(derStore).current).toEqual({ + expect(getMyRef(myStore).current).toEqual({ foo: {}, }); await waitForExpect(() => { - expect(getMyRef(derStore).current.foo.counter).toBe(2); + expect(getMyRef(myStore).current.foo.counter).toBe(2); + expect(getMyRef(derStore2!).current.foo.counter).toBe(2); + expect(getMyRef(derStore!).current.foo.counter).toBe(2); }); }); diff --git a/packages/core/src/__tests__/store-state.test.ts b/packages/core/src/__tests__/store-state.test.ts new file mode 100644 index 0000000..02f4220 --- /dev/null +++ b/packages/core/src/__tests__/store-state.test.ts @@ -0,0 +1,320 @@ +import { testCleanup } from '../helpers/test-cleanup'; +import { createKey } from '../index'; +import { StoreState } from '../store-state'; + +const sliceOneKey = createKey('sliceOne', []); +const keyOne = sliceOneKey.field('valueOne'); + +const sliceOne = sliceOneKey.slice({ + fields: { + keyOne, + }, +}); + +const sliceTwoKey = createKey('sliceTwo', []); +const keyTwo = sliceTwoKey.field('valueTwo'); + +const sliceTwo = sliceTwoKey.slice({ + fields: { + keyTwo, + }, +}); + +const updateKeyOneSliceOne = (val: string) => { + return keyOne.update(val); +}; + +const updateKeyTwoSliceTwo = (val: string) => { + return keyTwo.update(val); +}; + +beforeEach(() => { + testCleanup(); +}); + +describe('StoreState Slice and Transaction Operations', () => { + test('correctly applies a single transaction', () => { + let storeState = StoreState.create({ + slices: [sliceOne, sliceTwo], + }); + + const transaction = updateKeyOneSliceOne('updatedValueOne'); + + storeState = storeState.apply(transaction); + + expect(sliceOne.get(storeState)).toMatchInlineSnapshot(` + { + "keyOne": "updatedValueOne", + } + `); + expect(sliceTwo.get(storeState)).toMatchInlineSnapshot(` + { + "keyTwo": "valueTwo", + } + `); + }); + + test('correctly applies multiple transactions and throws error when applying the same transaction again', () => { + let storeState = StoreState.create({ + slices: [sliceOne, sliceTwo], + }); + + const firstTransaction = updateKeyOneSliceOne('updatedValueOne'); + const secondTransaction = updateKeyTwoSliceTwo('updatedValueTwo'); + + // Apply multiple transactions to the store and verify state updates + storeState = storeState.apply( + firstTransaction.step((state) => { + return state.apply(secondTransaction); + }), + ); + + expect(sliceOne.get(storeState)).toEqual({ + keyOne: 'updatedValueOne', + }); + expect(sliceTwo.get(storeState)).toEqual({ + keyTwo: 'updatedValueTwo', + }); + + // Try applying the same transactions again and verify that an error is thrown + expect(() => + storeState.apply(firstTransaction), + ).toThrowErrorMatchingInlineSnapshot( + `"Transaction "tx_0" has already been applied."`, + ); + + expect(() => + storeState.apply(secondTransaction), + ).toThrowErrorMatchingInlineSnapshot( + `"Transaction "tx_1" has already been applied."`, + ); + }); + + test('storeState remains the same if action step does not mutate state', () => { + const immutableSliceKey = createKey('immutableSlice', []); + const fixedState = { fixed: 'state' }; + const immutableField = immutableSliceKey.field(fixedState); + + const immutableSlice = immutableSliceKey.slice({ + fields: { + immutableField: immutableField, + }, + }); + + function nonMutatingAction(inputNumber: number) { + return immutableField.update(() => fixedState); + } + + let storeState = StoreState.create({ + slices: [sliceOne, immutableSlice], + }); + + let newStoreStateAfterActionOne = storeState.apply(nonMutatingAction(3)); + + expect(newStoreStateAfterActionOne).toBe(storeState); + + let newStoreStateAfterActionTwo = newStoreStateAfterActionOne.apply( + updateKeyOneSliceOne('updatedValueOne').step((state) => { + return state.apply(nonMutatingAction(3)); + }), + ); + + expect(immutableSlice.get(newStoreStateAfterActionTwo).immutableField).toBe( + fixedState, + ); + }); + + test('step is called with the same instance of storeState if no mutation occurred in previous step', () => { + const mySliceKey = createKey('mySlice', []); + const fixedState = { fixed: 'state' }; + const myField = mySliceKey.field(fixedState); + + const mySlice = mySliceKey.slice({ + fields: { + myField: myField, + }, + }); + + function nonMutatingAction(inputNumber: number) { + return myField.update(fixedState); + } + + let storeStateInstances: StoreState[] = []; + + function mutatingAction(inputNumber: number) { + const transaction = mySliceKey.transaction(); + + return transaction.step((state) => { + storeStateInstances.push(state); + return state.apply(myField.update({ fixed: 'new-state' })); + }); + } + + let store = StoreState.create({ + slices: [sliceOne, mySlice], + }); + + let newStoreStateAfterMutatingAction = store.apply( + nonMutatingAction(3).step((state) => state.apply(mutatingAction(53))), + ); + + expect(storeStateInstances.length).toBe(1); + expect(storeStateInstances[0]).toBe(store); + + expect(newStoreStateAfterMutatingAction).not.toBe(store); + }); + + test('state from previous step is correctly passed to next step', () => { + const sliceAKey = createKey('sliceA', []); + const counterA = sliceAKey.field(1); + + const sliceA = sliceAKey.slice({ + fields: { + counter: counterA, + }, + }); + + const sliceBKey = createKey('sliceB', [sliceA]); + const counterB = sliceBKey.field(1); + + const sliceB = sliceBKey.slice({ + fields: { + counter: counterB, + }, + }); + + function actionIncrementCounterA() { + return counterA.update((existing) => existing + 1); + } + + function actionIncrementCounterB() { + const txn = sliceBKey.transaction(); + return txn.step((state) => { + return state.apply( + counterB.update( + () => sliceA.get(state).counter + sliceB.get(store).counter + 1, + ), + ); + }); + } + + let store = StoreState.create({ + slices: [sliceA, sliceB], + }); + + let newStore = store.apply( + actionIncrementCounterA().step((state) => + state.apply(actionIncrementCounterB()), + ), + ); + + expect({ + a: sliceA.get(newStore), + b: sliceB.get(newStore), + }).toEqual({ + a: { + counter: 2, + }, + b: { + counter: 4, + }, + }); + + // previous state should not be changed + expect({ + a: sliceA.get(store), + b: sliceB.get(store), + }).toEqual({ + a: { + counter: 1, + }, + b: { + counter: 1, + }, + }); + }); + + test('correctly overrides state', () => { + let store = StoreState.create({ + slices: [sliceOne, sliceTwo], + stateOverride: { + [sliceOne.sliceId]: { + keyOne: 'newValueOne', + }, + }, + }); + + expect(sliceOne.get(store)).toEqual({ + keyOne: 'newValueOne', + }); + + expect(sliceTwo.get(store)).toEqual({ + keyTwo: 'valueTwo', + }); + }); +}); + +describe('_getChangedSlices', () => { + test('returns an empty array when no transactions have been applied', () => { + let storeState = StoreState.create({ + slices: [], + }); + + const changedSlices = storeState._getChangedSlices( + StoreState.create({ + slices: [], + }), + ); + + expect(changedSlices).toEqual([]); + }); + + test('should return changed slices', () => { + let storeState1 = StoreState.create({ + slices: [sliceOne, sliceTwo], + }); + + let storeState2 = StoreState.create({ + slices: [sliceOne, sliceTwo], + }); + + // Apply transaction to the second store state + const transaction = updateKeyTwoSliceTwo('updatedValueTwo'); + storeState2 = storeState2.apply(transaction); + + const changedSlices = storeState1._getChangedSlices(storeState2); + + // Only sliceTwo should have changed + expect(changedSlices.length).toBe(1); + expect(changedSlices[0]!.sliceId).toBe('sl_sliceTwo$'); + }); + + test('should return empty array when no slices have changed', () => { + let storeState1 = StoreState.create({ + slices: [sliceOne, sliceTwo], + }); + + let storeState2 = StoreState.create({ + slices: [sliceOne, sliceTwo], + }); + + const changedSlices = storeState1._getChangedSlices(storeState2); + + expect(changedSlices.length).toBe(0); + }); + + test('should return all slices when all slices have changed', () => { + let initialStoreState = StoreState.create({ + slices: [sliceOne, sliceTwo], + }); + + // Apply transactions to the second store state + const transactionOne = updateKeyOneSliceOne('updatedValueOne'); + const transactionTwo = updateKeyTwoSliceTwo('updatedValueTwo'); + let storeState = initialStoreState.apply(transactionOne); + storeState = storeState.apply(transactionTwo); + + expect(storeState._getChangedSlices(initialStoreState)).toHaveLength(2); + expect(initialStoreState._getChangedSlices(storeState)).toHaveLength(2); + }); +}); diff --git a/packages/core/src/__tests__/store.test.ts b/packages/core/src/__tests__/store.test.ts new file mode 100644 index 0000000..7e7dfc9 --- /dev/null +++ b/packages/core/src/__tests__/store.test.ts @@ -0,0 +1,29 @@ +import { createKey, createStore } from '../index'; +import { testCleanup } from '../helpers/test-cleanup'; + +const key = createKey('mySliceName'); + +const counter = key.field(0); +const counterNegative = key.field(-1); + +const counterSlice = key.slice({ + fields: { counter, counterNegative }, +}); + +afterEach(() => { + testCleanup(); +}); + +test('basic setup', () => { + const store = createStore({ + slices: [counterSlice], + }); + + expect(counter.get(store.state)).toBe(0); + expect(counterNegative.get(store.state)).toBe(-1); + + expect(counterSlice.get(store.state)).toEqual({ + counter: 0, + counterNegative: -1, + }); +}); diff --git a/packages/core/src/base-store.ts b/packages/core/src/base-store.ts new file mode 100644 index 0000000..1498e09 --- /dev/null +++ b/packages/core/src/base-store.ts @@ -0,0 +1,19 @@ +import type { Operation } from './effect/operation'; +import type { Store } from './store'; +import type { StoreState } from './store-state'; +import type { Transaction } from './transaction'; + +export type Dispatch = ( + txn: Transaction | Operation, + opts?: { + debugInfo?: string; + }, +) => void; + +export abstract class BaseStore { + abstract readonly state: StoreState; + + abstract _rootStore: Store; + + abstract dispatch(txn: Transaction | Operation): void; +} diff --git a/packages/core/src/effect/cleanup.ts b/packages/core/src/effect/cleanup.ts new file mode 100644 index 0000000..4cb9527 --- /dev/null +++ b/packages/core/src/effect/cleanup.ts @@ -0,0 +1,24 @@ +import { EffectStore } from './effect'; +import { OperationStore } from './operation'; +import { throwValidationError } from '../helpers/throw-error'; + +export type CleanupCallback = () => void | Promise; + +export function cleanup( + store: EffectStore | OperationStore, + cb: CleanupCallback, +): void { + if (store instanceof EffectStore) { + store._getRunInstance().addCleanup(cb); + return; + } + + if (store instanceof OperationStore) { + store._addCleanup(cb); + return; + } + + throwValidationError( + `Invalid store. 'cleanup()' can only be used with an effect or operation`, + ); +} diff --git a/src/vanilla/effect/effect-manager.ts b/packages/core/src/effect/effect-manager.ts similarity index 71% rename from src/vanilla/effect/effect-manager.ts rename to packages/core/src/effect/effect-manager.ts index 83c0872..767d7f1 100644 --- a/src/vanilla/effect/effect-manager.ts +++ b/packages/core/src/effect/effect-manager.ts @@ -1,15 +1,16 @@ -import { calcReverseDependencies } from '../helpers'; +import { calcReverseDependencies } from '../helpers/dependency-helpers'; import type { DebugLogger } from '../logger'; -import type { AnySlice, SliceId } from '../types'; +import type { Slice } from '../slice/slice'; +import type { SliceId } from '../types'; import type { Effect } from './effect'; export class EffectManager { - slicesLookup: Record; - reverseDependencies: Record> = {}; + slicesLookup: Record; + reverseDependencies: Record> = {}; private _effects: Set = new Set(); constructor( - private readonly _slices: AnySlice[], + private readonly _slices: Slice[], private readonly _opts: { debug?: DebugLogger | undefined; }, @@ -23,7 +24,6 @@ export class EffectManager { ([sliceId, sliceIds]) => { return [ sliceId, - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion new Set([...sliceIds].map((id) => this.slicesLookup[id]!)), ]; }, @@ -37,7 +37,10 @@ export class EffectManager { } } - getAllSlicesChanged(slicesChanged?: AnySlice[]): undefined | Set { + /** + * Will include all slices that depend on the slices that changed. + */ + getAllSlicesChanged(slicesChanged?: Slice[]): undefined | Set { if (slicesChanged === undefined) { return undefined; } @@ -64,10 +67,10 @@ export class EffectManager { }); } - run(slicesChanged?: AnySlice[]) { - const allSlices = this.getAllSlicesChanged(slicesChanged); + run(slicesChanged?: Slice[]) { + const allSlicesChanged = this.getAllSlicesChanged(slicesChanged); for (const effect of this._effects) { - effect.run(allSlices); + effect.run(allSlicesChanged); } } diff --git a/packages/core/src/effect/effect-run.ts b/packages/core/src/effect/effect-run.ts new file mode 100644 index 0000000..af3566e --- /dev/null +++ b/packages/core/src/effect/effect-run.ts @@ -0,0 +1,75 @@ +import type { CleanupCallback } from './cleanup'; +import type { BaseField } from '../slice/field'; +import type { Store } from '../store'; + +type TrackedFieldObj = { field: BaseField; value: unknown }; + +export class EffectRun { + private cleanups: Set = new Set(); + private readonly trackedFields: TrackedFieldObj[] = []; + private isDestroyed = false; + + /** + * @internal + * To keep track of how many times addTrackedField is called. If it's 0, then + * the user most likely forgot to destructure/access the tracked field. + * + * For example + * const foo = store.track() // this is incorrect and will not track anything + * + * const { foo } = store.track() // this is correct + */ + private addTrackedCount = 0; + + get trackedCount(): number { + return this.addTrackedCount; + } + + constructor( + public readonly store: Store, + public readonly name: string, + ) {} + + getTrackedFields(): ReadonlyArray { + return this.trackedFields; + } + + addCleanup(cleanup: CleanupCallback): void { + // this condition can be reached if there is some async process that blocked the run + // for a while and then called cleanup. + if (this.isDestroyed) { + // immediately call cleanup, since the call is stale + void cleanup(); + return; + } + this.cleanups.add(cleanup); + } + + addTrackedField(field: BaseField, val: unknown): void { + this.addTrackedCount++; + this.trackedFields.push({ field, value: val }); + return; + } + + whatDependenciesStateChange(): undefined | BaseField { + for (const { field, value } of this.trackedFields) { + const curVal = field.get(this.store.state); + if (!field.isEqual(curVal, value)) { + return field; + } + } + + return undefined; + } + + destroy(): void { + if (this.isDestroyed) { + return; + } + this.isDestroyed = true; + this.cleanups.forEach((cleanup) => { + void cleanup(); + }); + this.cleanups.clear(); + } +} diff --git a/packages/core/src/effect/effect.ts b/packages/core/src/effect/effect.ts new file mode 100644 index 0000000..70684f3 --- /dev/null +++ b/packages/core/src/effect/effect.ts @@ -0,0 +1,209 @@ +import { BaseStore } from '../base-store'; +import { EffectRun } from './effect-run'; +import { hasIdleCallback } from '../helpers/has-idle-callback'; +import type { BaseField } from '../slice/field'; +import type { DebugLogger } from '../logger'; +import type { Operation } from './operation'; +import type { Slice } from '../slice/slice'; +import type { Store } from '../store'; +import type { Transaction } from '../transaction'; + +const DEFAULT_MAX_WAIT = 15; + +export type EffectOpts = { + /** + * @internal - havent implemented it + * Effects are deferred by default. If set to false, the effect will run immediately after + * a store state change. If set to true, the effect will run anytime before maxWait. + */ + deferred: boolean; + /** + * + */ + maxWait: number; + scheduler: EffectScheduler; + name?: string; +}; + +export class EffectStore extends BaseStore { + constructor( + public _rootStore: Store, + public readonly name: string, + /** + * @internal + */ + public _getRunInstance: () => EffectRun, + ) { + super(); + } + + get state() { + return this._rootStore.state; + } + + dispatch(txn: Transaction | Operation) { + this._rootStore.dispatch(txn); + } +} + +export type EffectScheduler = ( + cb: () => void, + // eslint-disable-next-line @typescript-eslint/ban-types + opts: Omit & {}, +) => void; + +export type EffectCallback = (store: EffectStore) => void | Promise; +export type EffectCreator = (store: Store) => Effect; + +const DEFAULT_SCHEDULER: EffectScheduler = (cb, opts) => { + if (opts.deferred) { + if (hasIdleCallback) { + window.requestIdleCallback(cb, { timeout: opts.maxWait }); + } else { + setTimeout(cb, opts.maxWait); + } + } else { + queueMicrotask(cb); + } +}; + +export class Effect { + public readonly name: string; + public readonly debug: DebugLogger | undefined; + private destroyed = false; + private pendingRun = false; + private readonly effectStore: EffectStore; + private readonly scheduler: EffectScheduler; + private runCount = 0; + private runInstance: EffectRun; + + constructor( + private readonly effectCallback: EffectCallback, + private readonly rootStore: Store, + public readonly opts: EffectOpts, + ) { + this.name = opts.name || effectCallback.name || 'anonymous'; + this.debug = rootStore.options.debug; + this.scheduler = + rootStore.options?.overrides?.effectSchedulerOverride || opts.scheduler; + + this.runInstance = new EffectRun(rootStore, this.name); + this.effectStore = new EffectStore(rootStore, this.name, () => { + return this.runInstance; + }); + } + + destroy(): void { + if (this.destroyed) { + return; + } + + this.destroyed = true; + this.runInstance.destroy(); + } + + /** + * If slicesChanged is undefined, it will attempt to run the effect provided other conditions are met. + * The effect is guaranteed to run at least once. + * @param slicesChanged + * @returns + */ + run(slicesChanged?: Set): boolean { + if (this.pendingRun || this.destroyed) { + return false; + } + + if (!this.shouldQueueRun(slicesChanged)) { + return false; + } + + this.pendingRun = true; + this.scheduler(() => { + queueMicrotask(() => { + try { + this._run(); + } finally { + this.pendingRun = false; + } + }); + }, this.opts); + + return true; + } + + private shouldQueueRun(slicesChanged?: Set): boolean { + if (this.destroyed) { + return false; + } + + if (slicesChanged === undefined) { + return true; + } + + for (const { field } of this.runInstance.getTrackedFields()) { + const parentSlice = field._getSlice(); + if (slicesChanged.has(parentSlice)) { + return true; + } + } + + if (this.runCount === 0) { + return true; + } + + return false; + } + + private _run(): void { + if (this.destroyed) { + return; + } + + let fieldChanged: BaseField | undefined; + + // if runCount == 0, always run, to ensure the effect runs at least once + if (this.runCount != 0) { + const depChanged = this.runInstance.whatDependenciesStateChange(); + + fieldChanged = depChanged; + + // if nothing changed in the dependencies, don't run the effect + if (!fieldChanged) { + return; + } + } + + const oldInstance = this.runInstance; + oldInstance.destroy(); + + this.runInstance = new EffectRun(this.rootStore, this.name); + + this.runCount++; + void this.effectCallback(this.effectStore); + + this.debug?.({ + type: this.opts.deferred ? 'UPDATE_EFFECT' : 'SYNC_UPDATE_EFFECT', + name: this.name, + changed: fieldChanged?.id || '', + }); + } +} + +export function effect( + callback: EffectCallback, + { + deferred = true, + maxWait = DEFAULT_MAX_WAIT, + scheduler = DEFAULT_SCHEDULER, + }: Partial = {}, +): EffectCreator { + return (store: Store) => { + const newEffect = new Effect(callback, store, { + deferred, + maxWait, + scheduler, + }); + + return newEffect; + }; +} diff --git a/packages/core/src/effect/on-abort.ts b/packages/core/src/effect/on-abort.ts new file mode 100644 index 0000000..1096a6a --- /dev/null +++ b/packages/core/src/effect/on-abort.ts @@ -0,0 +1,5 @@ +export function onAbort(signal: AbortSignal, cb: () => void) { + signal.addEventListener('abort', cb, { + once: true, + }); +} diff --git a/packages/core/src/effect/operation.ts b/packages/core/src/effect/operation.ts new file mode 100644 index 0000000..4a2b03c --- /dev/null +++ b/packages/core/src/effect/operation.ts @@ -0,0 +1,62 @@ +import { BaseStore } from '../base-store'; +import type { CleanupCallback } from './cleanup'; +import { Store } from '../store'; +import type { Transaction } from '../transaction'; + +export type OperationOpts = { + deferred?: boolean; + maxWait?: number; +}; + +export class Operation {} + +export class OperationStore extends BaseStore { + private cleanupRan = false; + private readonly _cleanupCallbacks: Set = new Set(); + + _rootStore: Store; + constructor( + private rootStore: Store, + public readonly name: string, + private readonly opts: OperationOpts, + ) { + super(); + this._rootStore = rootStore; + } + + get state() { + return this.rootStore.state; + } + + dispatch(txn: Transaction | Operation) { + this.rootStore.dispatch(txn); + } + + _addCleanup(cb: CleanupCallback): void { + if (this.cleanupRan) { + console.warn( + `Adding a new cleanup to ${this.name} as cleanups have already run`, + ); + void cb(); + + return; + } + + this._cleanupCallbacks.add(cb); + } + + _runCleanup(): void { + if (this.cleanupRan) { + return; + } + + for (const cleanup of this._cleanupCallbacks) { + try { + void cleanup(); + } catch (e) { + console.error(e); + } + } + this.cleanupRan = true; + } +} diff --git a/src/vanilla/ref.ts b/packages/core/src/effect/ref.ts similarity index 50% rename from src/vanilla/ref.ts rename to packages/core/src/effect/ref.ts index 21760f5..93f0991 100644 --- a/src/vanilla/ref.ts +++ b/packages/core/src/effect/ref.ts @@ -1,5 +1,5 @@ -import type { DerivativeStore } from './base-store'; -import { Store } from './store'; +import type { BaseStore } from '../base-store'; +import { Store } from '../store'; export type RefObject = { current: T; @@ -7,17 +7,11 @@ export type RefObject = { export function ref( init: () => T, -): (store: DerivativeStore | Store) => RefObject { +): (store: Store | BaseStore) => RefObject { const cache = new WeakMap>(); return (store) => { - const rootStore = store instanceof Store ? store : store._rootStore; - - if (!rootStore) { - throw new Error( - 'Trying to access ref in a destroyed store ' + store.name, - ); - } + const rootStore: Store = store instanceof Store ? store : store._rootStore; let existing = cache.get(rootStore); diff --git a/packages/core/src/helpers/create-ids.ts b/packages/core/src/helpers/create-ids.ts new file mode 100644 index 0000000..8e094ce --- /dev/null +++ b/packages/core/src/helpers/create-ids.ts @@ -0,0 +1,5 @@ +import { FieldId, SliceId } from '../types'; + +export function createSliceId(id: string): SliceId { + return id as SliceId; +} diff --git a/src/vanilla/helpers/dependency-helpers.ts b/packages/core/src/helpers/dependency-helpers.ts similarity index 89% rename from src/vanilla/helpers/dependency-helpers.ts rename to packages/core/src/helpers/dependency-helpers.ts index 11d02ba..bcd50ae 100644 --- a/src/vanilla/helpers/dependency-helpers.ts +++ b/packages/core/src/helpers/dependency-helpers.ts @@ -1,7 +1,8 @@ -import type { AnySlice, SliceId } from '../types'; +import type { Slice } from '../slice/slice'; +import type { SliceId } from '../types'; -export function allDependencies(slices: AnySlice[]): Set { - const result = new Set(); +export function allDependencies(slices: Slice[]): Set { + const result = new Set(); for (const slice of slices) { for (const dep of slice.dependencies) { @@ -14,7 +15,7 @@ export function allDependencies(slices: AnySlice[]): Set { } const calcReverseDependenciesCache = new WeakMap< - AnySlice[], + Slice[], ReturnType >(); /** @@ -23,7 +24,7 @@ const calcReverseDependenciesCache = new WeakMap< * @returns */ export function calcReverseDependencies( - slices: AnySlice[], + slices: Slice[], ): Record> { if (calcReverseDependenciesCache.has(slices)) { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion diff --git a/packages/core/src/helpers/has-idle-callback.ts b/packages/core/src/helpers/has-idle-callback.ts new file mode 100644 index 0000000..5ee8ada --- /dev/null +++ b/packages/core/src/helpers/has-idle-callback.ts @@ -0,0 +1,2 @@ +export const hasIdleCallback = + typeof window !== 'undefined' && 'requestIdleCallback' in window; diff --git a/packages/core/src/helpers/id-generation.ts b/packages/core/src/helpers/id-generation.ts new file mode 100644 index 0000000..8998b9a --- /dev/null +++ b/packages/core/src/helpers/id-generation.ts @@ -0,0 +1,37 @@ +import type { FieldId, SliceId } from '../types'; + +const resetSymbol = Symbol('reset'); + +function createIdGenerator(prefix: string) { + let counterMap: Record = Object.create(null); + + return { + // only for testing + [resetSymbol]: () => { + counterMap = Object.create(null); + }, + generate: (name: string): T => { + if (name in counterMap) { + return `${prefix}_${name}$${++counterMap[name]}` as T; + } else { + counterMap[name] = 0; + return `${prefix}_${name}$` as T; + } + }, + }; +} + +let txCounter = 0; + +export const fieldIdCounters = createIdGenerator('f'); +export const sliceIdCounters = createIdGenerator('sl'); +export const genTransactionID = () => `tx_${txCounter++}`; + +/** + * WARNING Should only be used in tests, to avoid side effects between tests + */ +export const testOnlyResetIdGeneration = () => { + fieldIdCounters[resetSymbol](); + sliceIdCounters[resetSymbol](); + txCounter = 0; +}; diff --git a/packages/core/src/helpers/logger-warn.ts b/packages/core/src/helpers/logger-warn.ts new file mode 100644 index 0000000..8c8ba8e --- /dev/null +++ b/packages/core/src/helpers/logger-warn.ts @@ -0,0 +1,3 @@ +export function loggerWarn(message: string): void { + console.warn(message); +} diff --git a/packages/core/src/helpers/test-cleanup.ts b/packages/core/src/helpers/test-cleanup.ts new file mode 100644 index 0000000..f7372a8 --- /dev/null +++ b/packages/core/src/helpers/test-cleanup.ts @@ -0,0 +1,5 @@ +import { testOnlyResetIdGeneration } from './id-generation'; + +export function testCleanup() { + testOnlyResetIdGeneration(); +} diff --git a/packages/core/src/helpers/throw-error.ts b/packages/core/src/helpers/throw-error.ts new file mode 100644 index 0000000..ee17f87 --- /dev/null +++ b/packages/core/src/helpers/throw-error.ts @@ -0,0 +1,3 @@ +export function throwValidationError(message: string): never { + throw new Error(message); +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts new file mode 100644 index 0000000..744550b --- /dev/null +++ b/packages/core/src/index.ts @@ -0,0 +1,4 @@ +export { cleanup } from './effect/cleanup'; +export { createKey } from './slice/key'; +export { createStore } from './store'; +export { ref } from './effect/ref'; diff --git a/packages/core/src/logger.ts b/packages/core/src/logger.ts new file mode 100644 index 0000000..84a28f5 --- /dev/null +++ b/packages/core/src/logger.ts @@ -0,0 +1,27 @@ +import { SliceId } from './types'; + +type LogTypes = TransactionLog | OperationLog | EffectLog; + +export type DebugLogger = (log: LogTypes) => void; + +export interface TransactionLog { + type: 'TRANSACTION'; + action?: string; + dispatcher?: string | undefined; + sourceSlice: SliceId; + store?: string | undefined; + id: string; +} + +export interface OperationLog { + type: 'OPERATION'; + dispatcher?: string | undefined; + store?: string | undefined; + id: string; +} + +export interface EffectLog { + type: 'SYNC_UPDATE_EFFECT' | 'UPDATE_EFFECT'; + name: string; + changed: string; +} diff --git a/packages/core/src/slice/field.ts b/packages/core/src/slice/field.ts new file mode 100644 index 0000000..0f517b6 --- /dev/null +++ b/packages/core/src/slice/field.ts @@ -0,0 +1,114 @@ +import { EffectStore } from '../effect/effect'; +import { fieldIdCounters } from '../helpers/id-generation'; +import { throwValidationError } from '../helpers/throw-error'; +import type { Key } from './key'; +import { StoreState } from '../store-state'; +import { Transaction } from '../transaction'; +import type { FieldId } from '../types'; + +export type BaseFieldOptions = { + equal?: (a: TVal, b: TVal) => boolean; +}; + +export abstract class BaseField { + readonly id: FieldId; + + name: string | undefined; + + constructor( + public readonly key: Key, + public readonly options: BaseFieldOptions, + ) { + this.id = fieldIdCounters.generate(key.name); + } + + _getSlice() { + return this.key._assertedSlice(); + } + + abstract get(storeState: StoreState): TVal; + + isEqual(a: TVal, b: TVal): boolean { + if (this.options.equal) { + return this.options.equal(a, b); + } + return Object.is(a, b); + } + + track(store: EffectStore) { + const value = this.get(store.state); + store._getRunInstance().addTrackedField(this, value); + return value; + } +} + +export class DerivedField extends BaseField { + constructor( + public readonly deriveCallback: (state: StoreState) => TVal, + key: Key, + options: BaseFieldOptions, + ) { + super(key, options); + } + + private getCache = new WeakMap(); + + get(storeState: StoreState): TVal { + if (!this.id) { + throwValidationError( + `Cannot access state before Slice "${this.key.name}" has been created.`, + ); + } + + // TODO: return previously seen value based on isEqual and the lineage of store-state + + if (this.getCache.has(storeState)) { + return this.getCache.get(storeState); + } + + const newValue = this.deriveCallback(storeState); + + this.getCache.set(storeState, newValue); + + return newValue; + } +} + +export class StateField extends BaseField { + constructor( + public readonly initialValue: TVal, + key: Key, + options: BaseFieldOptions, + ) { + super(key, options); + } + + get(storeState: StoreState): TVal { + if (!this.id) { + throwValidationError( + `Cannot access state before Slice "${this.key.name}" has been created.`, + ); + } + const slice = this.key._assertedSlice(); + return storeState + ._getSliceStateManager(slice) + ._getFieldStateVal(this) as TVal; + } + + update(val: TVal | ((val: TVal) => TVal)): Transaction { + const txn = this.key.transaction(); + + return txn.step((state: StoreState) => { + const slice = this.key._assertedSlice(); + const manager = state._getSliceStateManager(slice); + + const newManager = manager._updateFieldState(this, val); + + if (newManager === manager) { + return state; + } + + return state._updateSliceStateManager(slice, newManager); + }); + } +} diff --git a/packages/core/src/slice/key.ts b/packages/core/src/slice/key.ts new file mode 100644 index 0000000..08fa605 --- /dev/null +++ b/packages/core/src/slice/key.ts @@ -0,0 +1,112 @@ +import type { EffectCallback, EffectOpts, EffectStore } from '../effect/effect'; +import { + StateField, + type BaseField, + BaseFieldOptions, + DerivedField, +} from './field'; +import { throwValidationError } from '../helpers/throw-error'; +import type { StoreState } from '../store-state'; +import { Transaction } from '../transaction'; +import type { FieldId, NoInfer } from '../types'; +import { Slice } from './slice'; + +/** + * @param name - The name of the slice. + * @param dependencies - An array of slices that this slice depends on. + */ +export function createKey(name: string, dependencies: Slice[] = []) { + return new Key(name, dependencies); +} + +export class Key { + constructor( + public readonly name: string, + public readonly dependencies: Slice[], + ) {} + + private _slice: Slice | undefined; + _effectCallbacks: [EffectCallback, Partial][] = []; + readonly _derivedFields: Record> = {}; + readonly _initialStateFieldValue: Record = {}; + readonly _fields = new Set>(); + readonly _fieldIdToFieldLookup: Record> = {}; + + hasField(field: BaseField) { + return this._fields.has(field); + } + + _assertedSlice(): Slice { + if (!this._slice) { + throwValidationError( + `Slice "${this.name}" does not exist. A slice must be created before it can be used.`, + ); + } + return this._slice; + } + + private registerField>(field: T): T { + this._fields.add(field); + this._fieldIdToFieldLookup[field.id] = field; + + if (field instanceof StateField) { + this._initialStateFieldValue[field.id] = field.initialValue; + } else if (field instanceof DerivedField) { + this._derivedFields[field.id] = field; + } + + return field; + } + + /** + * @param initialValue - The initial value of the field. + * @param options + */ + field( + initialValue: TVal, + options: BaseFieldOptions> = {}, + ) { + return this.registerField(new StateField(initialValue, this, options)); + } + + slice>>({ + fields, + actions, + }: { + fields: TFieldsSpec; + actions?: (...args: any) => Transaction; + }): Slice { + if (this._slice) { + throwValidationError( + `Slice "${this.name}" already exists. A key can only be used to create one slice.`, + ); + } + + this._slice = new Slice(this.name, fields, this); + + return this._slice; + } + + /** + * Creates a new transaction object which is used to update the slice state. + */ + transaction() { + return new Transaction(); + } + + effect(callback: EffectCallback, opts: Partial = {}) { + this._effectCallbacks.push([callback, opts]); + } + + /** + * + * @param compute - A function that computes the derived value. + * @param options + */ + derive( + compute: (storeState: StoreState) => TVal, + options: BaseFieldOptions> = {}, + ) { + return this.registerField(new DerivedField(compute, this, options)); + } +} diff --git a/packages/core/src/slice/slice.ts b/packages/core/src/slice/slice.ts new file mode 100644 index 0000000..a0d614f --- /dev/null +++ b/packages/core/src/slice/slice.ts @@ -0,0 +1,142 @@ +import type { EffectStore } from '../effect/effect'; +import { type BaseField, DerivedField } from './field'; +import { sliceIdCounters } from '../helpers/id-generation'; +import { throwValidationError } from '../helpers/throw-error'; +import type { StoreState } from '../store-state'; +import type { SliceId, FieldId, NoInfer } from '../types'; +import type { Key } from './key'; + +type MapSliceState>> = { + [K in keyof TFieldsSpec]: TFieldsSpec[K] extends BaseField + ? T + : never; +}; + +export class Slice> = any> { + sliceId: SliceId; + + private getCache = new WeakMap(); + private fieldNameToField: Record> = {}; + + get dependencies(): Slice[] { + return this._key.dependencies; + } + + _getFieldByName(fieldName: string): BaseField { + const field = this.fieldNameToField[fieldName]; + if (field === undefined) { + throwValidationError(`Field "${fieldName.toString()}" does not exist.`); + } + + return field; + } + + /** + * Called when the user overrides the initial value of a slice in the store. + */ + _verifyInitialValueOverride(val: Record): void { + // // TODO: when user provides an override, do more checks + } + + constructor( + public readonly name: string, + externalFieldSpec: TFieldsSpec, + public readonly _key: Key, + ) { + this.sliceId = sliceIdCounters.generate(name); + for (const [fieldName, field] of Object.entries(externalFieldSpec)) { + if (!_key._fields.has(field)) { + throwValidationError(`Field "${fieldName}" was not found.`); + } + field.name = fieldName; + this.fieldNameToField[fieldName] = field; + } + } + + /** + * Get a field value from the slice state. Slightly faster than `get`. + */ + getField( + storeState: StoreState, + fieldName: T, + ): MapSliceState[T] { + return this._getFieldByName(fieldName as string).get(storeState) as any; + } + + /** + * Similar to `track`, but only tracks a single field. + */ + trackField( + store: EffectStore, + fieldName: T, + ): MapSliceState[T] { + return this._getFieldByName(fieldName as string).track(store) as any; + } + + get(storeState: StoreState): MapSliceState { + const existing = this.getCache.get(storeState); + + if (existing) { + return existing; + } + + // since derived fields are lazy, we have to build this proxy + const lazyExternalState = new Proxy( + storeState._getSliceStateManager(this).rawState, + { + get: (target, fieldName: string, receiver) => { + if (!this.fieldNameToField[fieldName]) { + return undefined; + } + + const field = this._getFieldByName(fieldName); + + // this could have been a simple undefined check, but for some reason + // jest is hijacking the proxy + if (field instanceof DerivedField) { + return field.get(storeState); + } + // map field name to id and then forward the get to raw state + return Reflect.get(target, field.id, receiver); + }, + + has: (target, fieldName: string) => { + return fieldName in this.fieldNameToField; + }, + + ownKeys: () => { + return Object.keys(this.fieldNameToField); + }, + + getOwnPropertyDescriptor: (target, fieldName: string) => { + if (!this.fieldNameToField[fieldName]) { + return undefined; + } + + const field = this._getFieldByName(fieldName); + + if (field instanceof DerivedField) { + return { + configurable: true, + enumerable: true, + }; + } + + return Reflect.getOwnPropertyDescriptor(target, field.id); + }, + }, + ) as any; + + this.getCache.set(storeState, lazyExternalState); + + return lazyExternalState; + } + + track(store: EffectStore): MapSliceState { + return new Proxy(this.get(store.state), { + get: (target, prop: string, receiver) => { + return this._getFieldByName(prop).track(store); + }, + }); + } +} diff --git a/packages/core/src/store-state.ts b/packages/core/src/store-state.ts new file mode 100644 index 0000000..881da79 --- /dev/null +++ b/packages/core/src/store-state.ts @@ -0,0 +1,189 @@ +import type { Slice } from './slice/slice'; +import { FieldId, SliceId } from './types'; +import { throwValidationError } from './helpers/throw-error'; +import { Transaction } from './transaction'; +import { calcReverseDependencies } from './helpers/dependency-helpers'; +import { StateField } from './slice/field'; + +type SliceStateMap = Record; + +interface StoreStateConfig { + slices: Slice[]; + sliceStateMap: SliceStateMap; + computed: { + slicesLookup: Record; + reverseSliceDependencies: Record>; + }; +} + +function slicesComputedInfo(options: { + slices: Slice[]; +}): StoreStateConfig['computed'] { + const slicesLookup = Object.fromEntries( + options.slices.map((slice) => [slice.sliceId, slice]), + ); + + return { + slicesLookup, + reverseSliceDependencies: calcReverseDependencies(options.slices), + }; +} + +export class StoreState { + static create(options: { + slices: Slice[]; + stateOverride?: Record>; + }) { + const sliceStateMap: SliceStateMap = Object.fromEntries( + options.slices.map((slice) => [ + slice.sliceId, + SliceStateManager.new(slice), + ]), + ); + + const computed = slicesComputedInfo(options); + + if (options.stateOverride) { + for (const [sliceId, override] of Object.entries(options.stateOverride)) { + const id = sliceId as SliceId; + + if (!sliceStateMap[id]) { + throwValidationError( + `StoreState.create: slice with id "${id}" does not exist`, + ); + } + + const slice = computed.slicesLookup[id]!; + + sliceStateMap[id] = SliceStateManager.new(slice, override); + } + } + + return new StoreState({ + slices: options.slices, + sliceStateMap, + computed, + }); + } + + constructor(private config: StoreStateConfig) {} + + apply(transaction: Transaction): StoreState { + if (transaction._isDestroyed()) { + throwValidationError( + `Transaction "${transaction.id}" has already been applied.`, + ); + } + + const steps = transaction._getSteps(); + transaction._destroy(); + + return steps.reduce((storeState, step) => { + return step.stepper(storeState); + }, this as StoreState); + } + + _getSliceStateManager(slice: Slice): SliceStateManager { + const stateMap = this.config.sliceStateMap[slice.sliceId]; + + if (!stateMap) { + throwValidationError( + `Slice "${slice.name}" does not exist, did you forget to add it to the store?`, + ); + } + return stateMap; + } + + _updateSliceStateManager( + slice: Slice, + sliceStateManager: SliceStateManager, + ): StoreState { + const sliceStateMap = { + ...this.config.sliceStateMap, + [slice.sliceId]: sliceStateManager, + }; + return new StoreState({ + ...this.config, + sliceStateMap, + }); + } + + /** + * Returns slices that have changed compared to the provided store state. + * does not take into account slices that were removed in the current store state and exist + * in the provided store state. + */ + _getChangedSlices(otherStoreState: StoreState): Slice[] { + const diff: Slice[] = []; + + Object.values(this.config.sliceStateMap).forEach((sliceStateManager) => { + const slice = sliceStateManager.slice; + const sliceState = sliceStateManager.rawState; + + const otherSliceState = + otherStoreState.config.sliceStateMap[slice.sliceId]?.rawState; + + if (sliceState !== otherSliceState) { + diff.push(sliceStateManager.slice); + } + }); + + return diff; + } +} + +export class SliceStateManager { + static new(slice: Slice, sliceStateOverride?: Record) { + if (sliceStateOverride) { + slice._verifyInitialValueOverride(sliceStateOverride); + } + + let override = slice._key._initialStateFieldValue; + + if (sliceStateOverride) { + const normalizedOverride = Object.fromEntries( + Object.entries(sliceStateOverride).map(([fieldName, val]) => [ + slice._getFieldByName(fieldName).id, + val, + ]), + ); + + override = { + ...override, + ...normalizedOverride, + }; + } + return new SliceStateManager(slice, override); + } + + constructor( + public readonly slice: Slice, + private readonly sliceState: Record, + ) {} + + /** + * Raw state includes the state of all fields (internal and external) with fieldIds as keys. + */ + get rawState(): Record { + return this.sliceState; + } + + _getFieldStateVal(field: StateField): unknown { + return this.sliceState[field.id]; + } + + _updateFieldState(field: StateField, updater: any): SliceStateManager { + const oldValue = this._getFieldStateVal(field); + const newValue = + typeof updater === 'function' ? updater(oldValue) : updater; + + if (field.isEqual(oldValue, newValue)) { + return this; + } + + return new SliceStateManager(this.slice, { + ...this.sliceState, + [field.id]: newValue, + }); + } +} diff --git a/packages/core/src/store.ts b/packages/core/src/store.ts new file mode 100644 index 0000000..8bf5565 --- /dev/null +++ b/packages/core/src/store.ts @@ -0,0 +1,143 @@ +import { BaseStore } from './base-store'; +import { + effect, + type EffectCallback, + type EffectOpts, + type EffectScheduler, +} from './effect/effect'; +import { EffectManager } from './effect/effect-manager'; +import { StoreState } from './store-state'; +import type { DebugLogger } from './logger'; +import type { Operation } from './effect/operation'; +import type { Slice } from './slice/slice'; +import type { SliceId } from './types'; +import { Transaction } from './transaction'; + +interface StoreOptions { + name?: string; + slices: Slice[]; + debug?: DebugLogger; + overrides?: { + stateOverride?: Record>; + /** + * Overrides all effects schedulers for all effects in the store. + */ + effectSchedulerOverride?: EffectScheduler; + dispatchTransactionOverride?: DispatchTransaction; + }; + manualEffectsTrigger?: boolean; +} + +export const DEFAULT_DISPATCH_TRANSACTION: DispatchTransaction = ( + store, + updateState, + tx, +) => { + const newState = store.state.apply(tx); + updateState(newState); +}; + +// type DispatchOperation = (store: Store, operation: Operation) => void; + +type DispatchTransaction = ( + store: Store, + updateState: (state: StoreState) => void, + tx: Transaction, +) => void; + +export function createStore(config: StoreOptions) { + return new Store({ ...config, name: 'anonymous' }); +} + +export class Store extends BaseStore { + private _state: StoreState; + + _rootStore: Store; + public readonly initialState: StoreState; + + private effectsManager: EffectManager; + private destroyed = false; + private registeredSlicesEffect = false; + private _dispatchTxn: DispatchTransaction; + + get state() { + return this._state; + } + + destroy() { + if (this.destroyed) { + return; + } + + this.destroyed = true; + this.effectsManager.destroy(); + } + + isDestroyed() { + return this.destroyed; + } + + constructor(public readonly options: StoreOptions) { + super(); + + this._state = StoreState.create({ + slices: options.slices, + }); + this.initialState = this._state; + + this._dispatchTxn = + options.overrides?.dispatchTransactionOverride || + DEFAULT_DISPATCH_TRANSACTION; + + this.effectsManager = new EffectManager(this.options.slices, { + debug: this.options.debug, + }); + + this._rootStore = this; + + // do it a bit later so that all effects are registered + queueMicrotask(() => { + this.options.slices.forEach((slice) => { + slice._key._effectCallbacks.forEach(([effectCallback, opts]) => { + this.effect(effectCallback, opts); + }); + }); + this.registeredSlicesEffect = true; + }); + } + + dispatch(transaction: Transaction | Operation): void { + if (this.destroyed) { + return; + } + + if (transaction instanceof Transaction) { + this._dispatchTxn(this, this.updateState, transaction); + } + // TODO - dispatch operation + } + + effect(callback: EffectCallback, opts: Partial = {}) { + const effectInstance = effect(callback, opts)(this); + this.effectsManager.registerEffect(effectInstance); + + return effectInstance; + } + + runEffects() { + queueMicrotask(() => { + this.effectsManager.run(); + }); + } + + private updateState = (newState: StoreState) => { + const oldState = this._state; + this._state = newState; + + if (!this.options.manualEffectsTrigger) { + queueMicrotask(() => { + this.effectsManager.run(this._state._getChangedSlices(oldState)); + }); + } + }; +} diff --git a/packages/core/src/transaction.ts b/packages/core/src/transaction.ts new file mode 100644 index 0000000..f124d92 --- /dev/null +++ b/packages/core/src/transaction.ts @@ -0,0 +1,65 @@ +import { genTransactionID } from './helpers/id-generation'; +import type { StoreState } from './store-state'; + +type Step = { stepper: (storeState: StoreState) => StoreState }; + +export const META_DISPATCHER = 'DEBUG__DISPATCHER'; +export const TX_META_STORE_NAME = 'store-name'; + +export class Transaction { + readonly id = genTransactionID(); + + private destroyed = false; + + readonly metadata = new Metadata(); + + private steps: Array; + + constructor() { + this.steps = []; + } + + _getSteps(): ReadonlyArray { + return this.steps; + } + + /** + * + */ + step(stepper: Step['stepper']): Transaction { + this.steps.push({ stepper }); + return this; + } + + _destroy() { + this.destroyed = true; + } + + _isDestroyed() { + return this.destroyed; + } +} + +export class Metadata { + private _metadata: Record = Object.create(null); + + appendMetadata(key: string, val: string) { + let existing = this.getMetadata(key); + this.setMetadata(key, existing ? existing + ',' + val : val); + } + + fork(): Metadata { + const meta = new Metadata(); + meta._metadata = { ...this._metadata }; + + return meta; + } + + getMetadata(key: string) { + return this._metadata[key]; + } + + setMetadata(key: string, val: string) { + this._metadata[key] = val; + } +} diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts new file mode 100644 index 0000000..11e35a8 --- /dev/null +++ b/packages/core/src/types.ts @@ -0,0 +1,13 @@ +/** + * Hack for nominal typing + * https://basarat.gitbook.io/typescript/main-1/nominaltyping + */ +declare const __brand: unique symbol; +export type Brand = T & { [__brand]: K }; + +// Magic type that when used at sites where generic types are inferred from, will prevent those sites from being involved in the inference. +// https://github.com/microsoft/TypeScript/issues/14829 +export type NoInfer = [T][T extends any ? 0 : never]; + +export type SliceId = Brand; +export type FieldId = Brand; diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json new file mode 100644 index 0000000..5b942f1 --- /dev/null +++ b/packages/core/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "tsconfig/library.json", + "include": ["."], + "exclude": ["dist", "build", "node_modules"] +} diff --git a/packages/react/.eslintrc.cjs b/packages/react/.eslintrc.cjs new file mode 100644 index 0000000..c5a3582 --- /dev/null +++ b/packages/react/.eslintrc.cjs @@ -0,0 +1,3 @@ +module.exports = { + extends: ['custom/react'], +}; diff --git a/packages/react/jest.config.cjs b/packages/react/jest.config.cjs new file mode 100644 index 0000000..b5e2e59 --- /dev/null +++ b/packages/react/jest.config.cjs @@ -0,0 +1,7 @@ +module.exports = { + transform: { + '^.+\\.(t|j)sx?$': ['@swc/jest'], + }, + clearMocks: true, + setupFiles: ['/jest.setup.js'], +}; diff --git a/packages/react/jest.setup.js b/packages/react/jest.setup.js new file mode 100644 index 0000000..9ea8fc8 --- /dev/null +++ b/packages/react/jest.setup.js @@ -0,0 +1,13 @@ +// eslint-disable-next-line no-undef +globalThis.requestIdleCallback = function (cb) { + const start = Date.now(); + // eslint-disable-next-line no-undef + return setTimeout(function () { + cb({ + didTimeout: false, + timeRemaining: function () { + return Math.max(0, 50 - (Date.now() - start)); + }, + }); + }, 1); +}; diff --git a/packages/react/package.json b/packages/react/package.json new file mode 100644 index 0000000..9117551 --- /dev/null +++ b/packages/react/package.json @@ -0,0 +1,59 @@ +{ + "name": "react", + "sideEffects": false, + "version": "0.0.0", + "license": "MIT", + "authors": [ + { + "name": "Kushan Joshi", + "email": "0o3ko0@gmail.com", + "web": "http://github.com/kepta" + } + ], + "repository": { + "type": "git", + "url": "https://github.com/bangle-io/nalanda.git" + }, + "bugs": { + "url": "https://github.com/bangle-io/nalanda/issues" + }, + "scripts": { + "typecheck": "tsc --noEmit", + "typecheck:watch": "tsc --noEmit --watch", + "test": "jest", + "lint": "npm-run-all -l --aggregate-output --parallel lint:*", + "lint:eslint": "eslint .", + "lint:tsc": "tsc --noEmit", + "lint:prettier": "prettier src --check", + "format": "prettier src --write" + }, + "dependencies": { + "use-sync-external-store": "^1.2.0" + }, + "devDependencies": { + "@swc/core": "^1.3.90", + "@swc/jest": "^0.2.29", + "@types/jest": "^29.5.5", + "eslint-config-custom": "workspace:*", + "jest": "^29.7.0", + "npm-run-all": "^4.1.5", + "prettier": "^3.0.3", + "tsconfig": "workspace:*", + "typescript": "^5.2.2", + "wait-for-expect": "^3.0.2", + "@types/react": "^18.2.24", + "@types/react-dom": "^18.2.8", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "peerDependencies": { + "react": ">=17.0" + }, + "prettier": { + "singleQuote": true, + "trailingComma": "all", + "quoteProps": "consistent", + "arrowParens": "always", + "printWidth": 80 + } +} diff --git a/packages/react/src/App.tsx b/packages/react/src/App.tsx new file mode 100644 index 0000000..6d0348c --- /dev/null +++ b/packages/react/src/App.tsx @@ -0,0 +1,5 @@ +import React from 'react'; + +export function Foo() { + return
hello world
; +} diff --git a/packages/react/src/__tests__/dummy.test.ts b/packages/react/src/__tests__/dummy.test.ts new file mode 100644 index 0000000..c877e0c --- /dev/null +++ b/packages/react/src/__tests__/dummy.test.ts @@ -0,0 +1 @@ +test.todo('hello'); diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages/react/tsconfig.json b/packages/react/tsconfig.json new file mode 100644 index 0000000..5b942f1 --- /dev/null +++ b/packages/react/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "tsconfig/library.json", + "include": ["."], + "exclude": ["dist", "build", "node_modules"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b148187..8ca52a4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,49 +5,20 @@ settings: excludeLinksFromLockfile: false importers: - .: dependencies: - use-sync-external-store: - specifier: ^1.2.0 - version: 1.2.0(react@18.2.0) - devDependencies: - '@semantic-release/changelog': - specifier: ^6.0.3 - version: 6.0.3(semantic-release@21.1.2) - '@semantic-release/commit-analyzer': - specifier: 10.0.4 - version: 10.0.4(semantic-release@21.1.2) - '@semantic-release/exec': - specifier: 6.0.3 - version: 6.0.3(semantic-release@21.1.2) - '@semantic-release/git': - specifier: ^10.0.1 - version: 10.0.1(semantic-release@21.1.2) - '@semantic-release/github': - specifier: ^9.2.1 - version: 9.2.1(semantic-release@21.1.2) - '@semantic-release/npm': - specifier: ^10.0.6 - version: 10.0.6(semantic-release@21.1.2) - '@swc/core': - specifier: ^1.3.90 - version: 1.3.90 - '@swc/jest': - specifier: ^0.2.29 - version: 0.2.29(@swc/core@1.3.90) - '@types/jest': - specifier: ^29.5.5 - version: 29.5.5 - '@types/react': - specifier: ^18.2.23 - version: 18.2.23 - '@types/react-dom': - specifier: ^18.2.8 - version: 18.2.8 - '@types/use-sync-external-store': - specifier: ^0.0.4 - version: 0.0.4 + prettier: + specifier: ^3.0.3 + version: 3.0.3 + tsconfig: + specifier: workspace:* + version: link:config/tsconfig + typescript: + specifier: ^5.2.2 + version: 5.2.2 + + config/eslint-config-custom: + dependencies: '@typescript-eslint/eslint-plugin': specifier: ^6.7.3 version: 6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2) @@ -57,36 +28,28 @@ importers: eslint: specifier: ^8.50.0 version: 8.50.0 - jest: - specifier: ^29.7.0 - version: 29.7.0 - npm-run-all: - specifier: ^4.1.5 - version: 4.1.5 - prettier: - specifier: ^3.0.3 - version: 3.0.3 - react: - specifier: ^18.2.0 - version: 18.2.0 - react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) - semantic-release: - specifier: ^21.1.2 - version: 21.1.2(typescript@5.2.2) - tsup: - specifier: ^7.2.0 - version: 7.2.0(@swc/core@1.3.90)(typescript@5.2.2) + eslint-plugin-react: + specifier: ^7.33.2 + version: 7.33.2(eslint@8.50.0) + eslint-plugin-react-hooks: + specifier: ^4.6.0 + version: 4.6.0(eslint@8.50.0) + tsconfig: + specifier: workspace:* + version: link:../tsconfig typescript: specifier: ^5.2.2 version: 5.2.2 - wait-for-expect: - specifier: ^3.0.2 - version: 3.0.2 - zod: - specifier: ^3.22.2 - version: 3.22.2 + devDependencies: + npm-run-all: + specifier: ^4.1.5 + version: 4.1.5 + + config/tsconfig: + devDependencies: + npm-run-all: + specifier: ^4.1.5 + version: 4.1.5 documentation: dependencies: @@ -98,10 +61,10 @@ importers: version: 2.0.21 nalanda: specifier: workspace:* - version: link:.. + version: link:../packages/core next: specifier: ^13.5.3 - version: 13.5.3(@babel/core@7.23.0)(react-dom@18.2.0)(react@18.2.0) + version: 13.5.3(react-dom@18.2.0)(react@18.2.0) next-themes: specifier: ^0.2.1 version: 0.2.1(next@13.5.3)(react-dom@18.2.0)(react@18.2.0) @@ -111,6 +74,9 @@ importers: nextra-theme-docs: specifier: ^2.13.1 version: 2.13.1(next@13.5.3)(nextra@2.13.1)(react-dom@18.2.0)(react@18.2.0) + prettier: + specifier: ^3.0.3 + version: 3.0.3 react: specifier: ^18.2.0 version: 18.2.0 @@ -121,43 +87,165 @@ importers: '@types/node': specifier: 18.14.6 version: 18.14.6 + '@types/react': + specifier: ^18.2.24 + version: 18.2.24 + '@types/react-dom': + specifier: ^18.0.11 + version: 18.0.11 + eslint-config-custom: + specifier: workspace:* + version: link:../config/eslint-config-custom + eslint-config-next: + specifier: ^13.5.4 + version: 13.5.4(eslint@8.50.0)(typescript@5.2.2) + npm-run-all: + specifier: ^4.1.5 + version: 4.1.5 tailwindcss: specifier: ^3.3.3 version: 3.3.3 + tsconfig: + specifier: workspace:* + version: link:../config/tsconfig + typescript: + specifier: ^5.2.2 + version: 5.2.2 -packages: + packages/core: + devDependencies: + '@swc/core': + specifier: ^1.3.90 + version: 1.3.90 + '@swc/jest': + specifier: ^0.2.29 + version: 0.2.29(@swc/core@1.3.90) + '@types/jest': + specifier: ^29.5.5 + version: 29.5.5 + eslint-config-custom: + specifier: workspace:* + version: link:../../config/eslint-config-custom + jest: + specifier: ^29.7.0 + version: 29.7.0 + npm-run-all: + specifier: ^4.1.5 + version: 4.1.5 + prettier: + specifier: ^3.0.3 + version: 3.0.3 + tsconfig: + specifier: workspace:* + version: link:../../config/tsconfig + typescript: + specifier: ^5.2.2 + version: 5.2.2 + wait-for-expect: + specifier: ^3.0.2 + version: 3.0.2 + packages/react: + dependencies: + use-sync-external-store: + specifier: ^1.2.0 + version: 1.2.0(react@18.2.0) + devDependencies: + '@swc/core': + specifier: ^1.3.90 + version: 1.3.90 + '@swc/jest': + specifier: ^0.2.29 + version: 0.2.29(@swc/core@1.3.90) + '@types/jest': + specifier: ^29.5.5 + version: 29.5.5 + '@types/react': + specifier: ^18.2.24 + version: 18.2.24 + '@types/react-dom': + specifier: ^18.2.8 + version: 18.2.8 + eslint-config-custom: + specifier: workspace:* + version: link:../../config/eslint-config-custom + jest: + specifier: ^29.7.0 + version: 29.7.0 + npm-run-all: + specifier: ^4.1.5 + version: 4.1.5 + prettier: + specifier: ^3.0.3 + version: 3.0.3 + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + tsconfig: + specifier: workspace:* + version: link:../../config/tsconfig + typescript: + specifier: ^5.2.2 + version: 5.2.2 + wait-for-expect: + specifier: ^3.0.2 + version: 3.0.2 + +packages: /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true + resolution: + { + integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==, + } + engines: { node: '>=0.10.0' } /@alloc/quick-lru@5.2.0: - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==, + } + engines: { node: '>=10' } dev: true /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==, + } + engines: { node: '>=6.0.0' } dependencies: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.19 + dev: true /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==, + } + engines: { node: '>=6.9.0' } dependencies: '@babel/highlight': 7.22.20 chalk: 2.4.2 + dev: true /@babel/compat-data@7.22.20: - resolution: {integrity: sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==, + } + engines: { node: '>=6.9.0' } + dev: true /@babel/core@7.23.0: - resolution: {integrity: sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==, + } + engines: { node: '>=6.9.0' } dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.22.13 @@ -176,52 +264,80 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: true /@babel/generator@7.23.0: - resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==, + } + engines: { node: '>=6.9.0' } dependencies: '@babel/types': 7.23.0 '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 + dev: true /@babel/helper-compilation-targets@7.22.15: - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==, + } + engines: { node: '>=6.9.0' } dependencies: '@babel/compat-data': 7.22.20 '@babel/helper-validator-option': 7.22.15 browserslist: 4.22.1 lru-cache: 5.1.1 semver: 6.3.1 + dev: true /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==, + } + engines: { node: '>=6.9.0' } + dev: true /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==, + } + engines: { node: '>=6.9.0' } dependencies: '@babel/template': 7.22.15 '@babel/types': 7.23.0 + dev: true /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==, + } + engines: { node: '>=6.9.0' } dependencies: '@babel/types': 7.23.0 + dev: true /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==, + } + engines: { node: '>=6.9.0' } dependencies: '@babel/types': 7.23.0 + dev: true /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.0): - resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==, + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0 dependencies: @@ -231,63 +347,102 @@ packages: '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.20 + dev: true /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==, + } + engines: { node: '>=6.9.0' } dev: true /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==, + } + engines: { node: '>=6.9.0' } dependencies: '@babel/types': 7.23.0 + dev: true /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==, + } + engines: { node: '>=6.9.0' } dependencies: '@babel/types': 7.23.0 + dev: true /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==, + } + engines: { node: '>=6.9.0' } + dev: true /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==, + } + engines: { node: '>=6.9.0' } + dev: true /@babel/helper-validator-option@7.22.15: - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==, + } + engines: { node: '>=6.9.0' } + dev: true /@babel/helpers@7.23.1: - resolution: {integrity: sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==, + } + engines: { node: '>=6.9.0' } dependencies: '@babel/template': 7.22.15 '@babel/traverse': 7.23.0 '@babel/types': 7.23.0 transitivePeerDependencies: - supports-color + dev: true /@babel/highlight@7.22.20: - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==, + } + engines: { node: '>=6.9.0' } dependencies: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 + dev: true /@babel/parser@7.23.0: - resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==, + } + engines: { node: '>=6.0.0' } hasBin: true dependencies: '@babel/types': 7.23.0 + dev: true /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.0): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + resolution: + { + integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, + } peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -296,7 +451,10 @@ packages: dev: true /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.0): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + resolution: + { + integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==, + } peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -305,7 +463,10 @@ packages: dev: true /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.0): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + resolution: + { + integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==, + } peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -314,7 +475,10 @@ packages: dev: true /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.0): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + resolution: + { + integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==, + } peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -323,7 +487,10 @@ packages: dev: true /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.0): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + resolution: + { + integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==, + } peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -332,8 +499,11 @@ packages: dev: true /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==, + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -342,7 +512,10 @@ packages: dev: true /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.0): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + resolution: + { + integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==, + } peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -351,7 +524,10 @@ packages: dev: true /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.0): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + resolution: + { + integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, + } peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -360,7 +536,10 @@ packages: dev: true /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.0): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + resolution: + { + integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==, + } peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -369,7 +548,10 @@ packages: dev: true /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.0): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + resolution: + { + integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==, + } peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -378,7 +560,10 @@ packages: dev: true /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.0): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + resolution: + { + integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==, + } peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -387,7 +572,10 @@ packages: dev: true /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.0): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + resolution: + { + integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, + } peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -396,8 +584,11 @@ packages: dev: true /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.0): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==, + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -406,8 +597,11 @@ packages: dev: true /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==, + } + engines: { node: '>=6.9.0' } peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -416,23 +610,32 @@ packages: dev: true /@babel/runtime@7.23.1: - resolution: {integrity: sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==, + } + engines: { node: '>=6.9.0' } dependencies: regenerator-runtime: 0.14.0 - dev: false /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==, + } + engines: { node: '>=6.9.0' } dependencies: '@babel/code-frame': 7.22.13 '@babel/parser': 7.23.0 '@babel/types': 7.23.0 + dev: true /@babel/traverse@7.23.0: - resolution: {integrity: sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==, + } + engines: { node: '>=6.9.0' } dependencies: '@babel/code-frame': 7.22.13 '@babel/generator': 7.23.0 @@ -446,25 +649,39 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color + dev: true /@babel/types@7.23.0: - resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==, + } + engines: { node: '>=6.9.0' } dependencies: '@babel/helper-string-parser': 7.22.5 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + dev: true /@bcoe/v8-coverage@0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + resolution: + { + integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==, + } dev: true /@braintree/sanitize-url@6.0.4: - resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} + resolution: + { + integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==, + } dev: false /@codemirror/autocomplete@6.9.1(@codemirror/language@6.9.1)(@codemirror/state@6.2.1)(@codemirror/view@6.21.0)(@lezer/common@1.1.0): - resolution: {integrity: sha512-yma56tqD7khIZK4gy4X5lX3/k5ArMiCGat7HEWRF/8L2kqOjVdp2qKZqpcJjwTIjSj6fqKAHqi7IjtH3QFE+Bw==} + resolution: + { + integrity: sha512-yma56tqD7khIZK4gy4X5lX3/k5ArMiCGat7HEWRF/8L2kqOjVdp2qKZqpcJjwTIjSj6fqKAHqi7IjtH3QFE+Bw==, + } peerDependencies: '@codemirror/language': ^6.0.0 '@codemirror/state': ^6.0.0 @@ -478,7 +695,10 @@ packages: dev: false /@codemirror/commands@6.3.0: - resolution: {integrity: sha512-tFfcxRIlOWiQDFhjBSWJ10MxcvbCIsRr6V64SgrcaY0MwNk32cUOcCuNlWo8VjV4qRQCgNgUAnIeo0svkk4R5Q==} + resolution: + { + integrity: sha512-tFfcxRIlOWiQDFhjBSWJ10MxcvbCIsRr6V64SgrcaY0MwNk32cUOcCuNlWo8VjV4qRQCgNgUAnIeo0svkk4R5Q==, + } dependencies: '@codemirror/language': 6.9.1 '@codemirror/state': 6.2.1 @@ -487,7 +707,10 @@ packages: dev: false /@codemirror/lang-css@6.2.1(@codemirror/view@6.21.0): - resolution: {integrity: sha512-/UNWDNV5Viwi/1lpr/dIXJNWiwDxpw13I4pTUAsNxZdg6E0mI2kTQb0P2iHczg1Tu+H4EBgJR+hYhKiHKko7qg==} + resolution: + { + integrity: sha512-/UNWDNV5Viwi/1lpr/dIXJNWiwDxpw13I4pTUAsNxZdg6E0mI2kTQb0P2iHczg1Tu+H4EBgJR+hYhKiHKko7qg==, + } dependencies: '@codemirror/autocomplete': 6.9.1(@codemirror/language@6.9.1)(@codemirror/state@6.2.1)(@codemirror/view@6.21.0)(@lezer/common@1.1.0) '@codemirror/language': 6.9.1 @@ -499,7 +722,10 @@ packages: dev: false /@codemirror/lang-html@6.4.6: - resolution: {integrity: sha512-E4C8CVupBksXvgLSme/zv31x91g06eZHSph7NczVxZW+/K+3XgJGWNT//2WLzaKSBoxpAjaOi5ZnPU1SHhjh3A==} + resolution: + { + integrity: sha512-E4C8CVupBksXvgLSme/zv31x91g06eZHSph7NczVxZW+/K+3XgJGWNT//2WLzaKSBoxpAjaOi5ZnPU1SHhjh3A==, + } dependencies: '@codemirror/autocomplete': 6.9.1(@codemirror/language@6.9.1)(@codemirror/state@6.2.1)(@codemirror/view@6.21.0)(@lezer/common@1.1.0) '@codemirror/lang-css': 6.2.1(@codemirror/view@6.21.0) @@ -513,7 +739,10 @@ packages: dev: false /@codemirror/lang-javascript@6.2.1: - resolution: {integrity: sha512-jlFOXTejVyiQCW3EQwvKH0m99bUYIw40oPmFjSX2VS78yzfe0HELZ+NEo9Yfo1MkGRpGlj3Gnu4rdxV1EnAs5A==} + resolution: + { + integrity: sha512-jlFOXTejVyiQCW3EQwvKH0m99bUYIw40oPmFjSX2VS78yzfe0HELZ+NEo9Yfo1MkGRpGlj3Gnu4rdxV1EnAs5A==, + } dependencies: '@codemirror/autocomplete': 6.9.1(@codemirror/language@6.9.1)(@codemirror/state@6.2.1)(@codemirror/view@6.21.0)(@lezer/common@1.1.0) '@codemirror/language': 6.9.1 @@ -525,7 +754,10 @@ packages: dev: false /@codemirror/language@6.9.1: - resolution: {integrity: sha512-lWRP3Y9IUdOms6DXuBpoWwjkR7yRmnS0hKYCbSfPz9v6Em1A1UCRujAkDiCrdYfs1Z0Eu4dGtwovNPStIfkgNA==} + resolution: + { + integrity: sha512-lWRP3Y9IUdOms6DXuBpoWwjkR7yRmnS0hKYCbSfPz9v6Em1A1UCRujAkDiCrdYfs1Z0Eu4dGtwovNPStIfkgNA==, + } dependencies: '@codemirror/state': 6.2.1 '@codemirror/view': 6.21.0 @@ -536,7 +768,10 @@ packages: dev: false /@codemirror/lint@6.4.2: - resolution: {integrity: sha512-wzRkluWb1ptPKdzlsrbwwjYCPLgzU6N88YBAmlZi8WFyuiEduSd05MnJYNogzyc8rPK7pj6m95ptUApc8sHKVA==} + resolution: + { + integrity: sha512-wzRkluWb1ptPKdzlsrbwwjYCPLgzU6N88YBAmlZi8WFyuiEduSd05MnJYNogzyc8rPK7pj6m95ptUApc8sHKVA==, + } dependencies: '@codemirror/state': 6.2.1 '@codemirror/view': 6.21.0 @@ -544,11 +779,17 @@ packages: dev: false /@codemirror/state@6.2.1: - resolution: {integrity: sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==} + resolution: + { + integrity: sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==, + } dev: false /@codemirror/view@6.21.0: - resolution: {integrity: sha512-JI3asAk/fZ7h2ATjY9ErDFGWoWe4Bu7XgzR31G26RU3M/DLjfdQK8Im7hL1P/PAyprfVrf0uRNqxu02TkBcm3g==} + resolution: + { + integrity: sha512-JI3asAk/fZ7h2ATjY9ErDFGWoWe4Bu7XgzR31G26RU3M/DLjfdQK8Im7hL1P/PAyprfVrf0uRNqxu02TkBcm3g==, + } dependencies: '@codemirror/state': 6.2.1 style-mod: 4.1.0 @@ -556,14 +797,20 @@ packages: dev: false /@codesandbox/nodebox@0.1.8: - resolution: {integrity: sha512-2VRS6JDSk+M+pg56GA6CryyUSGPjBEe8Pnae0QL3jJF1mJZJVMDKr93gJRtBbLkfZN6LD/DwMtf+2L0bpWrjqg==} + resolution: + { + integrity: sha512-2VRS6JDSk+M+pg56GA6CryyUSGPjBEe8Pnae0QL3jJF1mJZJVMDKr93gJRtBbLkfZN6LD/DwMtf+2L0bpWrjqg==, + } dependencies: outvariant: 1.4.0 strict-event-emitter: 0.4.6 dev: false /@codesandbox/sandpack-client@2.7.1: - resolution: {integrity: sha512-fU3+vs5IjVyHRCtawdqfIlYLXnCGaDPSE6uGNMLhxhStQVVrCbfTtXi4faRGEkkaW1x2Fm+AsqsK53kJtQuhCQ==} + resolution: + { + integrity: sha512-fU3+vs5IjVyHRCtawdqfIlYLXnCGaDPSE6uGNMLhxhStQVVrCbfTtXi4faRGEkkaW1x2Fm+AsqsK53kJtQuhCQ==, + } dependencies: '@codesandbox/nodebox': 0.1.8 buffer: 6.0.3 @@ -573,7 +820,10 @@ packages: dev: false /@codesandbox/sandpack-react@2.8.0(@lezer/common@1.1.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-cgOOREDKH0UV0wdGQkjStj47FqorMptK8lVwmRKlorG2S7H8UpNK3mIveKBK9jfpUnUl+l5670u4vDtBEZ55/A==} + resolution: + { + integrity: sha512-cgOOREDKH0UV0wdGQkjStj47FqorMptK8lVwmRKlorG2S7H8UpNK3mIveKBK9jfpUnUl+l5670u4vDtBEZ55/A==, + } peerDependencies: react: ^16.8.0 || ^17 || ^18 react-dom: ^16.8.0 || ^17 || ^18 @@ -605,232 +855,37 @@ packages: dev: false /@codesandbox/sandpack-themes@2.0.21: - resolution: {integrity: sha512-CMH/MO/dh6foPYb/3eSn2Cu/J3+1+/81Fsaj7VggICkCrmRk0qG5dmgjGAearPTnRkOGORIPHuRqwNXgw0E6YQ==} + resolution: + { + integrity: sha512-CMH/MO/dh6foPYb/3eSn2Cu/J3+1+/81Fsaj7VggICkCrmRk0qG5dmgjGAearPTnRkOGORIPHuRqwNXgw0E6YQ==, + } dev: false - /@colors/colors@1.5.0: - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.50.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: eslint: 8.50.0 eslint-visitor-keys: 3.4.3 - dev: true /@eslint-community/regexpp@4.9.0: - resolution: {integrity: sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true + resolution: + { + integrity: sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ==, + } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } /@eslint/eslintrc@2.1.2: - resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } dependencies: ajv: 6.12.6 debug: 4.3.4 @@ -843,16 +898,20 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true /@eslint/js@8.50.0: - resolution: {integrity: sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + resolution: + { + integrity: sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } /@headlessui/react@1.7.17(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow==, + } + engines: { node: '>=10' } peerDependencies: react: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18 @@ -863,28 +922,37 @@ packages: dev: false /@humanwhocodes/config-array@0.11.11: - resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} - engines: {node: '>=10.10.0'} + resolution: + { + integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==, + } + engines: { node: '>=10.10.0' } dependencies: '@humanwhocodes/object-schema': 1.2.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true + resolution: + { + integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, + } + engines: { node: '>=12.22' } /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - dev: true + resolution: + { + integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==, + } /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==, + } + engines: { node: '>=8' } dependencies: camelcase: 5.3.1 find-up: 4.1.0 @@ -894,16 +962,22 @@ packages: dev: true /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==, + } + engines: { node: '>=8' } dev: true /@jest/console@29.7.0: - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/types': 29.6.3 - '@types/node': 20.8.0 + '@types/node': 18.14.6 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -911,8 +985,11 @@ packages: dev: true /@jest/core@29.7.0: - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -924,14 +1001,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.0 + '@types/node': 18.14.6 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.8.0) + jest-config: 29.7.0(@types/node@18.14.6) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -954,32 +1031,44 @@ packages: dev: true /@jest/create-cache-key-function@27.5.1: - resolution: {integrity: sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + resolution: + { + integrity: sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==, + } + engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } dependencies: '@jest/types': 27.5.1 dev: true /@jest/environment@29.7.0: - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.0 + '@types/node': 18.14.6 jest-mock: 29.7.0 dev: true /@jest/expect-utils@29.7.0: - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: jest-get-type: 29.6.3 dev: true /@jest/expect@29.7.0: - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: expect: 29.7.0 jest-snapshot: 29.7.0 @@ -988,20 +1077,26 @@ packages: dev: true /@jest/fake-timers@29.7.0: - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.8.0 + '@types/node': 18.14.6 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true /@jest/globals@29.7.0: - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 @@ -1012,8 +1107,11 @@ packages: dev: true /@jest/reporters@29.7.0: - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -1026,7 +1124,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.19 - '@types/node': 20.8.0 + '@types/node': 18.14.6 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -1049,15 +1147,21 @@ packages: dev: true /@jest/schemas@29.6.3: - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@sinclair/typebox': 0.27.8 dev: true /@jest/source-map@29.6.3: - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jridgewell/trace-mapping': 0.3.19 callsites: 3.1.0 @@ -1065,8 +1169,11 @@ packages: dev: true /@jest/test-result@29.7.0: - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/console': 29.7.0 '@jest/types': 29.6.3 @@ -1075,8 +1182,11 @@ packages: dev: true /@jest/test-sequencer@29.7.0: - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/test-result': 29.7.0 graceful-fs: 4.2.11 @@ -1085,8 +1195,11 @@ packages: dev: true /@jest/transform@29.7.0: - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@babel/core': 7.23.0 '@jest/types': 29.6.3 @@ -1108,72 +1221,110 @@ packages: dev: true /@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} + 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.2 - '@types/node': 20.8.0 + '@types/node': 18.14.6 '@types/yargs': 16.0.6 chalk: 4.1.2 dev: true /@jest/types@29.6.3: - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.2 - '@types/node': 20.8.0 + '@types/node': 18.14.6 '@types/yargs': 17.0.26 chalk: 4.1.2 dev: true /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==, + } + engines: { node: '>=6.0.0' } dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.19 + dev: true /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==, + } + engines: { node: '>=6.0.0' } + dev: true /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==, + } + engines: { node: '>=6.0.0' } + dev: true /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + resolution: + { + integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, + } + dev: true /@jridgewell/trace-mapping@0.3.19: - resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + resolution: + { + integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==, + } dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 + dev: true /@lezer/common@1.1.0: - resolution: {integrity: sha512-XPIN3cYDXsoJI/oDWoR2tD++juVrhgIago9xyKhZ7IhGlzdDM9QgC8D8saKNCz5pindGcznFr2HBSsEQSWnSjw==} + resolution: + { + integrity: sha512-XPIN3cYDXsoJI/oDWoR2tD++juVrhgIago9xyKhZ7IhGlzdDM9QgC8D8saKNCz5pindGcznFr2HBSsEQSWnSjw==, + } dev: false /@lezer/css@1.1.3: - resolution: {integrity: sha512-SjSM4pkQnQdJDVc80LYzEaMiNy9txsFbI7HsMgeVF28NdLaAdHNtQ+kB/QqDUzRBV/75NTXjJ/R5IdC8QQGxMg==} + resolution: + { + integrity: sha512-SjSM4pkQnQdJDVc80LYzEaMiNy9txsFbI7HsMgeVF28NdLaAdHNtQ+kB/QqDUzRBV/75NTXjJ/R5IdC8QQGxMg==, + } dependencies: '@lezer/highlight': 1.1.6 '@lezer/lr': 1.3.12 dev: false /@lezer/highlight@1.1.6: - resolution: {integrity: sha512-cmSJYa2us+r3SePpRCjN5ymCqCPv+zyXmDl0ciWtVaNiORT/MxM7ZgOMQZADD0o51qOaOg24qc/zBViOIwAjJg==} + resolution: + { + integrity: sha512-cmSJYa2us+r3SePpRCjN5ymCqCPv+zyXmDl0ciWtVaNiORT/MxM7ZgOMQZADD0o51qOaOg24qc/zBViOIwAjJg==, + } dependencies: '@lezer/common': 1.1.0 dev: false /@lezer/html@1.3.6: - resolution: {integrity: sha512-Kk9HJARZTc0bAnMQUqbtuhFVsB4AnteR2BFUWfZV7L/x1H0aAKz6YabrfJ2gk/BEgjh9L3hg5O4y2IDZRBdzuQ==} + resolution: + { + integrity: sha512-Kk9HJARZTc0bAnMQUqbtuhFVsB4AnteR2BFUWfZV7L/x1H0aAKz6YabrfJ2gk/BEgjh9L3hg5O4y2IDZRBdzuQ==, + } dependencies: '@lezer/common': 1.1.0 '@lezer/highlight': 1.1.6 @@ -1181,20 +1332,29 @@ packages: dev: false /@lezer/javascript@1.4.7: - resolution: {integrity: sha512-OVWlK0YEi7HM+9JRWtRkir8qvcg0/kVYg2TAMHlVtl6DU1C9yK1waEOLBMztZsV/axRJxsqfJKhzYz+bxZme5g==} + resolution: + { + integrity: sha512-OVWlK0YEi7HM+9JRWtRkir8qvcg0/kVYg2TAMHlVtl6DU1C9yK1waEOLBMztZsV/axRJxsqfJKhzYz+bxZme5g==, + } dependencies: '@lezer/highlight': 1.1.6 '@lezer/lr': 1.3.12 dev: false /@lezer/lr@1.3.12: - resolution: {integrity: sha512-5nwY1JzCueUdRtlMBnlf1SUi69iGCq2ABq7WQFQMkn/kxPvoACAEnTp4P17CtXxYr7WCwtYPLL2AEvxKPuF1OQ==} + resolution: + { + integrity: sha512-5nwY1JzCueUdRtlMBnlf1SUi69iGCq2ABq7WQFQMkn/kxPvoACAEnTp4P17CtXxYr7WCwtYPLL2AEvxKPuF1OQ==, + } dependencies: '@lezer/common': 1.1.0 dev: false /@mdx-js/mdx@2.3.0: - resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} + resolution: + { + integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==, + } dependencies: '@types/estree-jsx': 1.0.1 '@types/mdx': 2.0.8 @@ -1218,18 +1378,24 @@ packages: dev: false /@mdx-js/react@2.3.0(react@18.2.0): - resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} + resolution: + { + integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==, + } peerDependencies: react: '>=16' dependencies: '@types/mdx': 2.0.8 - '@types/react': 18.2.23 + '@types/react': 18.2.24 react: 18.2.0 dev: false /@napi-rs/simple-git-android-arm-eabi@0.1.9: - resolution: {integrity: sha512-9D4JnfePMpgL4pg9aMUX7/TIWEUQ+Tgx8n3Pf8TNCMGjUbImJyYsDSLJzbcv9wH7srgn4GRjSizXFJHAPjzEug==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-9D4JnfePMpgL4pg9aMUX7/TIWEUQ+Tgx8n3Pf8TNCMGjUbImJyYsDSLJzbcv9wH7srgn4GRjSizXFJHAPjzEug==, + } + engines: { node: '>= 10' } cpu: [arm] os: [android] requiresBuild: true @@ -1237,8 +1403,11 @@ packages: optional: true /@napi-rs/simple-git-android-arm64@0.1.9: - resolution: {integrity: sha512-Krilsw0gPrrASZzudNEl9pdLuNbhoTK0j7pUbfB8FRifpPdFB/zouwuEm0aSnsDXN4ftGrmGG82kuiR/2MeoPg==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-Krilsw0gPrrASZzudNEl9pdLuNbhoTK0j7pUbfB8FRifpPdFB/zouwuEm0aSnsDXN4ftGrmGG82kuiR/2MeoPg==, + } + engines: { node: '>= 10' } cpu: [arm64] os: [android] requiresBuild: true @@ -1246,8 +1415,11 @@ packages: optional: true /@napi-rs/simple-git-darwin-arm64@0.1.9: - resolution: {integrity: sha512-H/F09nDgYjv4gcFrZBgdTKkZEepqt0KLYcCJuUADuxkKupmjLdecMhypXLk13AzvLW4UQI7NlLTLDXUFLyr2BA==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-H/F09nDgYjv4gcFrZBgdTKkZEepqt0KLYcCJuUADuxkKupmjLdecMhypXLk13AzvLW4UQI7NlLTLDXUFLyr2BA==, + } + engines: { node: '>= 10' } cpu: [arm64] os: [darwin] requiresBuild: true @@ -1255,8 +1427,11 @@ packages: optional: true /@napi-rs/simple-git-darwin-x64@0.1.9: - resolution: {integrity: sha512-jBR2xS9nVPqmHv0TWz874W0m/d453MGrMeLjB+boK5IPPLhg3AWIZj0aN9jy2Je1BGVAa0w3INIQJtBBeB6kFA==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-jBR2xS9nVPqmHv0TWz874W0m/d453MGrMeLjB+boK5IPPLhg3AWIZj0aN9jy2Je1BGVAa0w3INIQJtBBeB6kFA==, + } + engines: { node: '>= 10' } cpu: [x64] os: [darwin] requiresBuild: true @@ -1264,8 +1439,11 @@ packages: optional: true /@napi-rs/simple-git-linux-arm-gnueabihf@0.1.9: - resolution: {integrity: sha512-3n0+VpO4YfZxndZ0sCvsHIvsazd+JmbSjrlTRBCnJeAU1/sfos3skNZtKGZksZhjvd+3o+/GFM8L7Xnv01yggA==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-3n0+VpO4YfZxndZ0sCvsHIvsazd+JmbSjrlTRBCnJeAU1/sfos3skNZtKGZksZhjvd+3o+/GFM8L7Xnv01yggA==, + } + engines: { node: '>= 10' } cpu: [arm] os: [linux] requiresBuild: true @@ -1273,8 +1451,11 @@ packages: optional: true /@napi-rs/simple-git-linux-arm64-gnu@0.1.9: - resolution: {integrity: sha512-lIzf0KHU2SKC12vMrWwCtysG2Sdt31VHRPMUiz9lD9t3xwVn8qhFSTn5yDkTeG3rgX6o0p5EKalfQN5BXsJq2w==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-lIzf0KHU2SKC12vMrWwCtysG2Sdt31VHRPMUiz9lD9t3xwVn8qhFSTn5yDkTeG3rgX6o0p5EKalfQN5BXsJq2w==, + } + engines: { node: '>= 10' } cpu: [arm64] os: [linux] requiresBuild: true @@ -1282,8 +1463,11 @@ packages: optional: true /@napi-rs/simple-git-linux-arm64-musl@0.1.9: - resolution: {integrity: sha512-KQozUoNXrxrB8k741ncWXSiMbjl1AGBGfZV21PANzUM8wH4Yem2bg3kfglYS/QIx3udspsT35I9abu49n7D1/w==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-KQozUoNXrxrB8k741ncWXSiMbjl1AGBGfZV21PANzUM8wH4Yem2bg3kfglYS/QIx3udspsT35I9abu49n7D1/w==, + } + engines: { node: '>= 10' } cpu: [arm64] os: [linux] requiresBuild: true @@ -1291,8 +1475,11 @@ packages: optional: true /@napi-rs/simple-git-linux-x64-gnu@0.1.9: - resolution: {integrity: sha512-O/Niui5mnHPcK3iYC3ui8wgERtJWsQ3Y74W/09t0bL/3dgzGMl4oQt0qTj9dWCsnoGsIEYHPzwCBp/2vqYp/pw==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-O/Niui5mnHPcK3iYC3ui8wgERtJWsQ3Y74W/09t0bL/3dgzGMl4oQt0qTj9dWCsnoGsIEYHPzwCBp/2vqYp/pw==, + } + engines: { node: '>= 10' } cpu: [x64] os: [linux] requiresBuild: true @@ -1300,8 +1487,11 @@ packages: optional: true /@napi-rs/simple-git-linux-x64-musl@0.1.9: - resolution: {integrity: sha512-L9n+e8Wn3hKr3RsIdY8GaB+ry4xZ4BaGwyKExgoB8nDGQuRUY9oP6p0WA4hWfJvJnU1H6hvo36a5UFPReyBO7A==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-L9n+e8Wn3hKr3RsIdY8GaB+ry4xZ4BaGwyKExgoB8nDGQuRUY9oP6p0WA4hWfJvJnU1H6hvo36a5UFPReyBO7A==, + } + engines: { node: '>= 10' } cpu: [x64] os: [linux] requiresBuild: true @@ -1309,8 +1499,11 @@ packages: optional: true /@napi-rs/simple-git-win32-arm64-msvc@0.1.9: - resolution: {integrity: sha512-Z6Ja/SZK+lMvRWaxj7wjnvSbAsGrH006sqZo8P8nxKUdZfkVvoCaAWr1r0cfkk2Z3aijLLtD+vKeXGlUPH6gGQ==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-Z6Ja/SZK+lMvRWaxj7wjnvSbAsGrH006sqZo8P8nxKUdZfkVvoCaAWr1r0cfkk2Z3aijLLtD+vKeXGlUPH6gGQ==, + } + engines: { node: '>= 10' } cpu: [arm64] os: [win32] requiresBuild: true @@ -1318,8 +1511,11 @@ packages: optional: true /@napi-rs/simple-git-win32-x64-msvc@0.1.9: - resolution: {integrity: sha512-VAZj1UvC+R2MjKOD3I/Y7dmQlHWAYy4omhReQJRpbCf+oGCBi9CWiIduGqeYEq723nLIKdxP7XjaO0wl1NnUww==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-VAZj1UvC+R2MjKOD3I/Y7dmQlHWAYy4omhReQJRpbCf+oGCBi9CWiIduGqeYEq723nLIKdxP7XjaO0wl1NnUww==, + } + engines: { node: '>= 10' } cpu: [x64] os: [win32] requiresBuild: true @@ -1327,8 +1523,11 @@ packages: optional: true /@napi-rs/simple-git@0.1.9: - resolution: {integrity: sha512-qKzDS0+VjMvVyU28px+C6zlD1HKy83NIdYzfMQWa/g/V1iG/Ic8uwrS2ihHfm7mp7X0PPrmINLiTTi6ieUIKfw==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-qKzDS0+VjMvVyU28px+C6zlD1HKy83NIdYzfMQWa/g/V1iG/Ic8uwrS2ihHfm7mp7X0PPrmINLiTTi6ieUIKfw==, + } + engines: { node: '>= 10' } optionalDependencies: '@napi-rs/simple-git-android-arm-eabi': 0.1.9 '@napi-rs/simple-git-android-arm64': 0.1.9 @@ -1344,12 +1543,27 @@ packages: dev: false /@next/env@13.5.3: - resolution: {integrity: sha512-X4te86vsbjsB7iO4usY9jLPtZ827Mbx+WcwNBGUOIuswuTAKQtzsuoxc/6KLxCMvogKG795MhrR1LDhYgDvasg==} + resolution: + { + integrity: sha512-X4te86vsbjsB7iO4usY9jLPtZ827Mbx+WcwNBGUOIuswuTAKQtzsuoxc/6KLxCMvogKG795MhrR1LDhYgDvasg==, + } dev: false + /@next/eslint-plugin-next@13.5.4: + resolution: + { + integrity: sha512-vI94U+D7RNgX6XypSyjeFrOzxGlZyxOplU0dVE5norIfZGn/LDjJYPHdvdsR5vN1eRtl6PDAsOHmycFEOljK5A==, + } + dependencies: + glob: 7.1.7 + dev: true + /@next/swc-darwin-arm64@13.5.3: - resolution: {integrity: sha512-6hiYNJxJmyYvvKGrVThzo4nTcqvqUTA/JvKim7Auaj33NexDqSNwN5YrrQu+QhZJCIpv2tULSHt+lf+rUflLSw==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-6hiYNJxJmyYvvKGrVThzo4nTcqvqUTA/JvKim7Auaj33NexDqSNwN5YrrQu+QhZJCIpv2tULSHt+lf+rUflLSw==, + } + engines: { node: '>= 10' } cpu: [arm64] os: [darwin] requiresBuild: true @@ -1357,8 +1571,11 @@ packages: optional: true /@next/swc-darwin-x64@13.5.3: - resolution: {integrity: sha512-UpBKxu2ob9scbpJyEq/xPgpdrgBgN3aLYlxyGqlYX5/KnwpJpFuIHU2lx8upQQ7L+MEmz+fA1XSgesoK92ppwQ==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-UpBKxu2ob9scbpJyEq/xPgpdrgBgN3aLYlxyGqlYX5/KnwpJpFuIHU2lx8upQQ7L+MEmz+fA1XSgesoK92ppwQ==, + } + engines: { node: '>= 10' } cpu: [x64] os: [darwin] requiresBuild: true @@ -1366,8 +1583,11 @@ packages: optional: true /@next/swc-linux-arm64-gnu@13.5.3: - resolution: {integrity: sha512-5AzM7Yx1Ky+oLY6pHs7tjONTF22JirDPd5Jw/3/NazJ73uGB05NqhGhB4SbeCchg7SlVYVBeRMrMSZwJwq/xoA==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-5AzM7Yx1Ky+oLY6pHs7tjONTF22JirDPd5Jw/3/NazJ73uGB05NqhGhB4SbeCchg7SlVYVBeRMrMSZwJwq/xoA==, + } + engines: { node: '>= 10' } cpu: [arm64] os: [linux] requiresBuild: true @@ -1375,8 +1595,11 @@ packages: optional: true /@next/swc-linux-arm64-musl@13.5.3: - resolution: {integrity: sha512-A/C1shbyUhj7wRtokmn73eBksjTM7fFQoY2v/0rTM5wehpkjQRLOXI8WJsag2uLhnZ4ii5OzR1rFPwoD9cvOgA==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-A/C1shbyUhj7wRtokmn73eBksjTM7fFQoY2v/0rTM5wehpkjQRLOXI8WJsag2uLhnZ4ii5OzR1rFPwoD9cvOgA==, + } + engines: { node: '>= 10' } cpu: [arm64] os: [linux] requiresBuild: true @@ -1384,8 +1607,11 @@ packages: optional: true /@next/swc-linux-x64-gnu@13.5.3: - resolution: {integrity: sha512-FubPuw/Boz8tKkk+5eOuDHOpk36F80rbgxlx4+xty/U71e3wZZxVYHfZXmf0IRToBn1Crb8WvLM9OYj/Ur815g==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-FubPuw/Boz8tKkk+5eOuDHOpk36F80rbgxlx4+xty/U71e3wZZxVYHfZXmf0IRToBn1Crb8WvLM9OYj/Ur815g==, + } + engines: { node: '>= 10' } cpu: [x64] os: [linux] requiresBuild: true @@ -1393,8 +1619,11 @@ packages: optional: true /@next/swc-linux-x64-musl@13.5.3: - resolution: {integrity: sha512-DPw8nFuM1uEpbX47tM3wiXIR0Qa+atSzs9Q3peY1urkhofx44o7E1svnq+a5Q0r8lAcssLrwiM+OyJJgV/oj7g==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-DPw8nFuM1uEpbX47tM3wiXIR0Qa+atSzs9Q3peY1urkhofx44o7E1svnq+a5Q0r8lAcssLrwiM+OyJJgV/oj7g==, + } + engines: { node: '>= 10' } cpu: [x64] os: [linux] requiresBuild: true @@ -1402,8 +1631,11 @@ packages: optional: true /@next/swc-win32-arm64-msvc@13.5.3: - resolution: {integrity: sha512-zBPSP8cHL51Gub/YV8UUePW7AVGukp2D8JU93IHbVDu2qmhFAn9LWXiOOLKplZQKxnIPUkJTQAJDCWBWU4UWUA==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-zBPSP8cHL51Gub/YV8UUePW7AVGukp2D8JU93IHbVDu2qmhFAn9LWXiOOLKplZQKxnIPUkJTQAJDCWBWU4UWUA==, + } + engines: { node: '>= 10' } cpu: [arm64] os: [win32] requiresBuild: true @@ -1411,8 +1643,11 @@ packages: optional: true /@next/swc-win32-ia32-msvc@13.5.3: - resolution: {integrity: sha512-ONcL/lYyGUj4W37D4I2I450SZtSenmFAvapkJQNIJhrPMhzDU/AdfLkW98NvH1D2+7FXwe7yclf3+B7v28uzBQ==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-ONcL/lYyGUj4W37D4I2I450SZtSenmFAvapkJQNIJhrPMhzDU/AdfLkW98NvH1D2+7FXwe7yclf3+B7v28uzBQ==, + } + engines: { node: '>= 10' } cpu: [ia32] os: [win32] requiresBuild: true @@ -1420,8 +1655,11 @@ packages: optional: true /@next/swc-win32-x64-msvc@13.5.3: - resolution: {integrity: sha512-2Vz2tYWaLqJvLcWbbTlJ5k9AN6JD7a5CN2pAeIzpbecK8ZF/yobA39cXtv6e+Z8c5UJuVOmaTldEAIxvsIux/Q==} - engines: {node: '>= 10'} + resolution: + { + integrity: sha512-2Vz2tYWaLqJvLcWbbTlJ5k9AN6JD7a5CN2pAeIzpbecK8ZF/yobA39cXtv6e+Z8c5UJuVOmaTldEAIxvsIux/Q==, + } + engines: { node: '>= 10' } cpu: [x64] os: [win32] requiresBuild: true @@ -1429,156 +1667,51 @@ packages: optional: true /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + } + engines: { node: '>= 8' } dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + } + engines: { node: '>= 8' } /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + } + engines: { node: '>= 8' } dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - dev: true - - /@octokit/auth-token@4.0.0: - resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} - engines: {node: '>= 18'} - dev: true - - /@octokit/core@5.0.1: - resolution: {integrity: sha512-lyeeeZyESFo+ffI801SaBKmCfsvarO+dgV8/0gD8u1d87clbEdWsP5yC+dSj3zLhb2eIf5SJrn6vDz9AheETHw==} - engines: {node: '>= 18'} - dependencies: - '@octokit/auth-token': 4.0.0 - '@octokit/graphql': 7.0.2 - '@octokit/request': 8.1.2 - '@octokit/request-error': 5.0.1 - '@octokit/types': 12.0.0 - before-after-hook: 2.2.3 - universal-user-agent: 6.0.0 - dev: true - - /@octokit/endpoint@9.0.1: - resolution: {integrity: sha512-hRlOKAovtINHQPYHZlfyFwaM8OyetxeoC81lAkBy34uLb8exrZB50SQdeW3EROqiY9G9yxQTpp5OHTV54QD+vA==} - engines: {node: '>= 18'} - dependencies: - '@octokit/types': 12.0.0 - is-plain-object: 5.0.0 - universal-user-agent: 6.0.0 - dev: true - - /@octokit/graphql@7.0.2: - resolution: {integrity: sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==} - engines: {node: '>= 18'} - dependencies: - '@octokit/request': 8.1.2 - '@octokit/types': 12.0.0 - universal-user-agent: 6.0.0 - dev: true - - /@octokit/openapi-types@19.0.0: - resolution: {integrity: sha512-PclQ6JGMTE9iUStpzMkwLCISFn/wDeRjkZFIKALpvJQNBGwDoYYi2fFvuHwssoQ1rXI5mfh6jgTgWuddeUzfWw==} - dev: true - - /@octokit/plugin-paginate-rest@9.0.0(@octokit/core@5.0.1): - resolution: {integrity: sha512-oIJzCpttmBTlEhBmRvb+b9rlnGpmFgDtZ0bB6nq39qIod6A5DP+7RkVLMOixIgRCYSHDTeayWqmiJ2SZ6xgfdw==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': '>=5' - dependencies: - '@octokit/core': 5.0.1 - '@octokit/types': 12.0.0 - dev: true - - /@octokit/plugin-retry@6.0.1(@octokit/core@5.0.1): - resolution: {integrity: sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': '>=5' - dependencies: - '@octokit/core': 5.0.1 - '@octokit/request-error': 5.0.1 - '@octokit/types': 12.0.0 - bottleneck: 2.19.5 - dev: true - - /@octokit/plugin-throttling@8.0.0(@octokit/core@5.0.1): - resolution: {integrity: sha512-OkMbHYUidj81q92YRkPzWmwXkEtsI3KOcSkNm763aqUOh9IEplyX05XjKAdZFANAvaYH0Q4JBZwu4h2VnPVXZA==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': ^5.0.0 - dependencies: - '@octokit/core': 5.0.1 - '@octokit/types': 12.0.0 - bottleneck: 2.19.5 - dev: true - - /@octokit/request-error@5.0.1: - resolution: {integrity: sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==} - engines: {node: '>= 18'} - dependencies: - '@octokit/types': 12.0.0 - deprecation: 2.3.1 - once: 1.4.0 - dev: true - - /@octokit/request@8.1.2: - resolution: {integrity: sha512-A0RJJfzjlZQwb+39eDm5UM23dkxbp28WEG4p2ueH+Q2yY4p349aRK/vcUlEuIB//ggcrHJceoYYkBP/LYCoXEg==} - engines: {node: '>= 18'} - dependencies: - '@octokit/endpoint': 9.0.1 - '@octokit/request-error': 5.0.1 - '@octokit/types': 12.0.0 - is-plain-object: 5.0.0 - universal-user-agent: 6.0.0 - dev: true - - /@octokit/types@12.0.0: - resolution: {integrity: sha512-EzD434aHTFifGudYAygnFlS1Tl6KhbTynEWELQXIbTY8Msvb5nEqTZIm7sbPEt4mQYLZwu3zPKVdeIrw0g7ovg==} - dependencies: - '@octokit/openapi-types': 19.0.0 - dev: true /@open-draft/deferred-promise@2.2.0: - resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + resolution: + { + integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==, + } dev: false - /@pnpm/config.env-replace@1.1.0: - resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} - engines: {node: '>=12.22.0'} - dev: true - - /@pnpm/network.ca-file@1.0.2: - resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} - engines: {node: '>=12.22.0'} - dependencies: - graceful-fs: 4.2.10 - dev: true - - /@pnpm/npm-conf@2.2.2: - resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} - engines: {node: '>=12'} - dependencies: - '@pnpm/config.env-replace': 1.1.0 - '@pnpm/network.ca-file': 1.0.2 - config-chain: 1.1.13 - dev: true - /@popperjs/core@2.11.8: - resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + resolution: + { + integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==, + } dev: false /@react-hook/intersection-observer@3.1.1(react@18.2.0): - resolution: {integrity: sha512-OTDx8/wFaRvzFtKl1dEUEXSOqK2zVJHporiTTdC2xO++0e9FEx9wIrPis5q3lqtXeZH9zYGLbk+aB75qNFbbuw==} + resolution: + { + integrity: sha512-OTDx8/wFaRvzFtKl1dEUEXSOqK2zVJHporiTTdC2xO++0e9FEx9wIrPis5q3lqtXeZH9zYGLbk+aB75qNFbbuw==, + } peerDependencies: react: '>=16.8' dependencies: @@ -1588,183 +1721,61 @@ packages: dev: false /@react-hook/passive-layout-effect@1.2.1(react@18.2.0): - resolution: {integrity: sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg==} + resolution: + { + integrity: sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg==, + } peerDependencies: react: '>=16.8' dependencies: react: 18.2.0 dev: false - /@semantic-release/changelog@6.0.3(semantic-release@21.1.2): - resolution: {integrity: sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==} - engines: {node: '>=14.17'} - peerDependencies: - semantic-release: '>=18.0.0' - dependencies: - '@semantic-release/error': 3.0.0 - aggregate-error: 3.1.0 - fs-extra: 11.1.1 - lodash: 4.17.21 - semantic-release: 21.1.2(typescript@5.2.2) - dev: true - - /@semantic-release/commit-analyzer@10.0.4(semantic-release@21.1.2): - resolution: {integrity: sha512-pFGn99fn8w4/MHE0otb2A/l5kxgOuxaaauIh4u30ncoTJuqWj4hXTgEJ03REqjS+w1R2vPftSsO26WC61yOcpw==} - engines: {node: '>=18'} - peerDependencies: - semantic-release: '>=20.1.0' - dependencies: - conventional-changelog-angular: 6.0.0 - conventional-commits-filter: 3.0.0 - conventional-commits-parser: 5.0.0 - debug: 4.3.4 - import-from: 4.0.0 - lodash-es: 4.17.21 - micromatch: 4.0.5 - semantic-release: 21.1.2(typescript@5.2.2) - transitivePeerDependencies: - - supports-color - dev: true - - /@semantic-release/error@3.0.0: - resolution: {integrity: sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==} - engines: {node: '>=14.17'} - dev: true - - /@semantic-release/error@4.0.0: - resolution: {integrity: sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==} - engines: {node: '>=18'} - dev: true - - /@semantic-release/exec@6.0.3(semantic-release@21.1.2): - resolution: {integrity: sha512-bxAq8vLOw76aV89vxxICecEa8jfaWwYITw6X74zzlO0mc/Bgieqx9kBRz9z96pHectiTAtsCwsQcUyLYWnp3VQ==} - engines: {node: '>=14.17'} - peerDependencies: - semantic-release: '>=18.0.0' - dependencies: - '@semantic-release/error': 3.0.0 - aggregate-error: 3.1.0 - debug: 4.3.4 - execa: 5.1.1 - lodash: 4.17.21 - parse-json: 5.2.0 - semantic-release: 21.1.2(typescript@5.2.2) - transitivePeerDependencies: - - supports-color - dev: true - - /@semantic-release/git@10.0.1(semantic-release@21.1.2): - resolution: {integrity: sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==} - engines: {node: '>=14.17'} - peerDependencies: - semantic-release: '>=18.0.0' - dependencies: - '@semantic-release/error': 3.0.0 - aggregate-error: 3.1.0 - debug: 4.3.4 - dir-glob: 3.0.1 - execa: 5.1.1 - lodash: 4.17.21 - micromatch: 4.0.5 - p-reduce: 2.1.0 - semantic-release: 21.1.2(typescript@5.2.2) - transitivePeerDependencies: - - supports-color - dev: true - - /@semantic-release/github@9.2.1(semantic-release@21.1.2): - resolution: {integrity: sha512-fEn9uOe6jwWR6ro2Wh6YNBCBuZ5lRi8Myz+1j3KDTSt8OuUGlpVM4lFac/0bDrql2NOKrIEAMGCfWb9WMIdzIg==} - engines: {node: '>=18'} - peerDependencies: - semantic-release: '>=20.1.0' - dependencies: - '@octokit/core': 5.0.1 - '@octokit/plugin-paginate-rest': 9.0.0(@octokit/core@5.0.1) - '@octokit/plugin-retry': 6.0.1(@octokit/core@5.0.1) - '@octokit/plugin-throttling': 8.0.0(@octokit/core@5.0.1) - '@semantic-release/error': 4.0.0 - aggregate-error: 5.0.0 - debug: 4.3.4 - dir-glob: 3.0.1 - globby: 13.2.2 - http-proxy-agent: 7.0.0 - https-proxy-agent: 7.0.2 - issue-parser: 6.0.0 - lodash-es: 4.17.21 - mime: 3.0.0 - p-filter: 3.0.0 - semantic-release: 21.1.2(typescript@5.2.2) - url-join: 5.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@semantic-release/npm@10.0.6(semantic-release@21.1.2): - resolution: {integrity: sha512-DyqHrGE8aUyapA277BB+4kV0C4iMHh3sHzUWdf0jTgp5NNJxVUz76W1f57FB64Ue03him3CBXxFqQD2xGabxow==} - engines: {node: '>=18'} - peerDependencies: - semantic-release: '>=20.1.0' - dependencies: - '@semantic-release/error': 4.0.0 - aggregate-error: 5.0.0 - execa: 8.0.1 - fs-extra: 11.1.1 - lodash-es: 4.17.21 - nerf-dart: 1.0.0 - normalize-url: 8.0.0 - npm: 9.8.1 - rc: 1.2.8 - read-pkg: 8.1.0 - registry-auth-token: 5.0.2 - semantic-release: 21.1.2(typescript@5.2.2) - semver: 7.5.4 - tempy: 3.1.0 - dev: true - - /@semantic-release/release-notes-generator@11.0.7(semantic-release@21.1.2): - resolution: {integrity: sha512-T09QB9ImmNx7Q6hY6YnnEbw/rEJ6a+22LBxfZq+pSAXg/OL/k0siwEm5cK4k1f9dE2Z2mPIjJKKohzUm0jbxcQ==} - engines: {node: '>=18'} - peerDependencies: - semantic-release: '>=20.1.0' - dependencies: - conventional-changelog-angular: 6.0.0 - conventional-changelog-writer: 6.0.1 - conventional-commits-filter: 4.0.0 - conventional-commits-parser: 5.0.0 - debug: 4.3.4 - get-stream: 7.0.1 - import-from: 4.0.0 - into-stream: 7.0.0 - lodash-es: 4.17.21 - read-pkg-up: 10.1.0 - semantic-release: 21.1.2(typescript@5.2.2) - transitivePeerDependencies: - - supports-color + /@rushstack/eslint-patch@1.5.1: + resolution: + { + integrity: sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==, + } dev: true /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + resolution: + { + integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==, + } dev: true /@sinonjs/commons@3.0.0: - resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + resolution: + { + integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==, + } dependencies: type-detect: 4.0.8 dev: true /@sinonjs/fake-timers@10.3.0: - resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + resolution: + { + integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==, + } dependencies: '@sinonjs/commons': 3.0.0 dev: true /@stitches/core@1.2.8: - resolution: {integrity: sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==} + resolution: + { + integrity: sha512-Gfkvwk9o9kE9r9XNBmJRfV8zONvXThnm1tcuojL04Uy5uRyqg93DC83lDebl0rocZCfKSjUv+fWYtMQmEDJldg==, + } dev: false /@swc/core-darwin-arm64@1.3.90: - resolution: {integrity: sha512-he0w74HvcoufE6CZrB/U/VGVbc7021IQvYrn1geMACnq/OqMBqjdczNtdNfJAy87LZ4AOUjHDKEIjsZZu7o8nQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-he0w74HvcoufE6CZrB/U/VGVbc7021IQvYrn1geMACnq/OqMBqjdczNtdNfJAy87LZ4AOUjHDKEIjsZZu7o8nQ==, + } + engines: { node: '>=10' } cpu: [arm64] os: [darwin] requiresBuild: true @@ -1772,8 +1783,11 @@ packages: optional: true /@swc/core-darwin-x64@1.3.90: - resolution: {integrity: sha512-hKNM0Ix0qMlAamPe0HUfaAhQVbZEL5uK6Iw8v9ew0FtVB4v7EifQ9n41wh+yCj0CjcHBPEBbQU0P6mNTxJu/RQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-hKNM0Ix0qMlAamPe0HUfaAhQVbZEL5uK6Iw8v9ew0FtVB4v7EifQ9n41wh+yCj0CjcHBPEBbQU0P6mNTxJu/RQ==, + } + engines: { node: '>=10' } cpu: [x64] os: [darwin] requiresBuild: true @@ -1781,8 +1795,11 @@ packages: optional: true /@swc/core-linux-arm-gnueabihf@1.3.90: - resolution: {integrity: sha512-HumvtrqTWE8rlFuKt7If0ZL7145H/jVc4AeziVjcd+/ajpqub7IyfrLCYd5PmKMtfeSVDMsxjG0BJ0HLRxrTJA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-HumvtrqTWE8rlFuKt7If0ZL7145H/jVc4AeziVjcd+/ajpqub7IyfrLCYd5PmKMtfeSVDMsxjG0BJ0HLRxrTJA==, + } + engines: { node: '>=10' } cpu: [arm] os: [linux] requiresBuild: true @@ -1790,8 +1807,11 @@ packages: optional: true /@swc/core-linux-arm64-gnu@1.3.90: - resolution: {integrity: sha512-tA7DqCS7YCwngwXZQeqQhhMm8BbydpaABw8Z/EDQ7KPK1iZ1rNjZw+aWvSpmNmEGmH1RmQ9QDS9mGRDp0faAeg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-tA7DqCS7YCwngwXZQeqQhhMm8BbydpaABw8Z/EDQ7KPK1iZ1rNjZw+aWvSpmNmEGmH1RmQ9QDS9mGRDp0faAeg==, + } + engines: { node: '>=10' } cpu: [arm64] os: [linux] requiresBuild: true @@ -1799,8 +1819,11 @@ packages: optional: true /@swc/core-linux-arm64-musl@1.3.90: - resolution: {integrity: sha512-p2Vtid5BZA36fJkNUwk5HP+HJlKgTru+Ghna7pRe45ghKkkRIUk3fhkgudEvfKfhT+3AvP+GTVQ+T9k0gc9S8w==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-p2Vtid5BZA36fJkNUwk5HP+HJlKgTru+Ghna7pRe45ghKkkRIUk3fhkgudEvfKfhT+3AvP+GTVQ+T9k0gc9S8w==, + } + engines: { node: '>=10' } cpu: [arm64] os: [linux] requiresBuild: true @@ -1808,8 +1831,11 @@ packages: optional: true /@swc/core-linux-x64-gnu@1.3.90: - resolution: {integrity: sha512-J6pDtWaulYGXuANERuvv4CqmUbZOQrRZBCRQGZQJ6a86RWpesZqckBelnYx48wYmkgvMkF95Y3xbI3WTfoSHzw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-J6pDtWaulYGXuANERuvv4CqmUbZOQrRZBCRQGZQJ6a86RWpesZqckBelnYx48wYmkgvMkF95Y3xbI3WTfoSHzw==, + } + engines: { node: '>=10' } cpu: [x64] os: [linux] requiresBuild: true @@ -1817,8 +1843,11 @@ packages: optional: true /@swc/core-linux-x64-musl@1.3.90: - resolution: {integrity: sha512-3Gh6EA3+0K+l3MqnRON7h5bZ32xLmfcVM6QiHHJ9dBttq7YOEeEoMOCdIPMaQxJmK1VfLgZCsPYRd66MhvUSkw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-3Gh6EA3+0K+l3MqnRON7h5bZ32xLmfcVM6QiHHJ9dBttq7YOEeEoMOCdIPMaQxJmK1VfLgZCsPYRd66MhvUSkw==, + } + engines: { node: '>=10' } cpu: [x64] os: [linux] requiresBuild: true @@ -1826,8 +1855,11 @@ packages: optional: true /@swc/core-win32-arm64-msvc@1.3.90: - resolution: {integrity: sha512-BNaw/iJloDyaNOFV23Sr53ULlnbmzSoerTJ10v0TjSZOEIpsS0Rw6xOK1iI0voDJnRXeZeWRSxEC9DhefNtN/g==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-BNaw/iJloDyaNOFV23Sr53ULlnbmzSoerTJ10v0TjSZOEIpsS0Rw6xOK1iI0voDJnRXeZeWRSxEC9DhefNtN/g==, + } + engines: { node: '>=10' } cpu: [arm64] os: [win32] requiresBuild: true @@ -1835,8 +1867,11 @@ packages: optional: true /@swc/core-win32-ia32-msvc@1.3.90: - resolution: {integrity: sha512-SiyTethWAheE/JbxXCukAAciU//PLcmVZ2ME92MRuLMLmOhrwksjbaa7ukj9WEF3LWrherhSqTXnpj3VC1l/qw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-SiyTethWAheE/JbxXCukAAciU//PLcmVZ2ME92MRuLMLmOhrwksjbaa7ukj9WEF3LWrherhSqTXnpj3VC1l/qw==, + } + engines: { node: '>=10' } cpu: [ia32] os: [win32] requiresBuild: true @@ -1844,8 +1879,11 @@ packages: optional: true /@swc/core-win32-x64-msvc@1.3.90: - resolution: {integrity: sha512-OpWAW5ljKcPJ3SQ0pUuKqYfwXv7ssIhVgrH9XP9ONtdgXKWZRL9hqJQkcL55FARw/gDjKanoCM47wsTNQL+ZZA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-OpWAW5ljKcPJ3SQ0pUuKqYfwXv7ssIhVgrH9XP9ONtdgXKWZRL9hqJQkcL55FARw/gDjKanoCM47wsTNQL+ZZA==, + } + engines: { node: '>=10' } cpu: [x64] os: [win32] requiresBuild: true @@ -1853,8 +1891,11 @@ packages: optional: true /@swc/core@1.3.90: - resolution: {integrity: sha512-wptBxP4PldOnhmyDVj8qUcn++GRqyw1qc9wOTGtPNHz8cpuTfdfIgYGlhI4La0UYqecuaaIfLfokyuNePOMHPg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-wptBxP4PldOnhmyDVj8qUcn++GRqyw1qc9wOTGtPNHz8cpuTfdfIgYGlhI4La0UYqecuaaIfLfokyuNePOMHPg==, + } + engines: { node: '>=10' } requiresBuild: true peerDependencies: '@swc/helpers': ^0.5.0 @@ -1878,18 +1919,27 @@ packages: dev: true /@swc/counter@0.1.2: - resolution: {integrity: sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==} + resolution: + { + integrity: sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==, + } dev: true /@swc/helpers@0.5.2: - resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} + resolution: + { + integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==, + } dependencies: tslib: 2.6.2 dev: false /@swc/jest@0.2.29(@swc/core@1.3.90): - resolution: {integrity: sha512-8reh5RvHBsSikDC3WGCd5ZTd2BXKkyOdK7QwynrCH58jk2cQFhhHhFBg/jvnWZehUQe/EoOImLENc9/DwbBFow==} - engines: {npm: '>= 7.0.0'} + resolution: + { + integrity: sha512-8reh5RvHBsSikDC3WGCd5ZTd2BXKkyOdK7QwynrCH58jk2cQFhhHhFBg/jvnWZehUQe/EoOImLENc9/DwbBFow==, + } + engines: { npm: '>= 7.0.0' } peerDependencies: '@swc/core': '*' dependencies: @@ -1899,11 +1949,17 @@ packages: dev: true /@swc/types@0.1.5: - resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} + resolution: + { + integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==, + } dev: true /@theguild/remark-mermaid@0.0.5(react@18.2.0): - resolution: {integrity: sha512-e+ZIyJkEv9jabI4m7q29wZtZv+2iwPGsXJ2d46Zi7e+QcFudiyuqhLhHG/3gX3ZEB+hxTch+fpItyMS8jwbIcw==} + resolution: + { + integrity: sha512-e+ZIyJkEv9jabI4m7q29wZtZv+2iwPGsXJ2d46Zi7e+QcFudiyuqhLhHG/3gX3ZEB+hxTch+fpItyMS8jwbIcw==, + } peerDependencies: react: ^18.2.0 dependencies: @@ -1915,20 +1971,29 @@ packages: dev: false /@theguild/remark-npm2yarn@0.2.0: - resolution: {integrity: sha512-6NMsdxNQd0s+LBtsmLuZG0AFeGmRpqIyKkPA2FOt14ZFO8mXBkHY39+RWVrLIt/ltZCg78BvQPfJT7iF/sNvyg==} + resolution: + { + integrity: sha512-6NMsdxNQd0s+LBtsmLuZG0AFeGmRpqIyKkPA2FOt14ZFO8mXBkHY39+RWVrLIt/ltZCg78BvQPfJT7iF/sNvyg==, + } dependencies: npm-to-yarn: 2.1.0 unist-util-visit: 5.0.0 dev: false /@types/acorn@4.0.6: - resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + resolution: + { + integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==, + } dependencies: '@types/estree': 1.0.2 dev: false /@types/babel__core@7.20.2: - resolution: {integrity: sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==} + resolution: + { + integrity: sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==, + } dependencies: '@babel/parser': 7.23.0 '@babel/types': 7.23.0 @@ -1938,201 +2003,309 @@ packages: dev: true /@types/babel__generator@7.6.5: - resolution: {integrity: sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==} + resolution: + { + integrity: sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==, + } dependencies: '@babel/types': 7.23.0 dev: true /@types/babel__template@7.4.2: - resolution: {integrity: sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==} + resolution: + { + integrity: sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==, + } dependencies: '@babel/parser': 7.23.0 '@babel/types': 7.23.0 dev: true /@types/babel__traverse@7.20.2: - resolution: {integrity: sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==} + resolution: + { + integrity: sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==, + } dependencies: '@babel/types': 7.23.0 dev: true /@types/d3-scale-chromatic@3.0.0: - resolution: {integrity: sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==} + resolution: + { + integrity: sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==, + } dev: false /@types/d3-scale@4.0.5: - resolution: {integrity: sha512-w/C++3W394MHzcLKO2kdsIn5KKNTOqeQVzyPSGPLzQbkPw/jpeaGtSRlakcKevGgGsjJxGsbqS0fPrVFDbHrDA==} + resolution: + { + integrity: sha512-w/C++3W394MHzcLKO2kdsIn5KKNTOqeQVzyPSGPLzQbkPw/jpeaGtSRlakcKevGgGsjJxGsbqS0fPrVFDbHrDA==, + } dependencies: '@types/d3-time': 3.0.1 dev: false /@types/d3-time@3.0.1: - resolution: {integrity: sha512-5j/AnefKAhCw4HpITmLDTPlf4vhi8o/dES+zbegfPb7LaGfNyqkLxBR6E+4yvTAgnJLmhe80EXFMzUs38fw4oA==} + resolution: + { + integrity: sha512-5j/AnefKAhCw4HpITmLDTPlf4vhi8o/dES+zbegfPb7LaGfNyqkLxBR6E+4yvTAgnJLmhe80EXFMzUs38fw4oA==, + } dev: false /@types/debug@4.1.9: - resolution: {integrity: sha512-8Hz50m2eoS56ldRlepxSBa6PWEVCtzUo/92HgLc2qTMnotJNIm7xP+UZhyWoYsyOdd5dxZ+NZLb24rsKyFs2ow==} + resolution: + { + integrity: sha512-8Hz50m2eoS56ldRlepxSBa6PWEVCtzUo/92HgLc2qTMnotJNIm7xP+UZhyWoYsyOdd5dxZ+NZLb24rsKyFs2ow==, + } dependencies: '@types/ms': 0.7.32 dev: false /@types/estree-jsx@1.0.1: - resolution: {integrity: sha512-sHyakZlAezNFxmYRo0fopDZW+XvK6ipeZkkp5EAOLjdPfZp8VjZBJ67vSRI99RSCAoqXVmXOHS4fnWoxpuGQtQ==} + resolution: + { + integrity: sha512-sHyakZlAezNFxmYRo0fopDZW+XvK6ipeZkkp5EAOLjdPfZp8VjZBJ67vSRI99RSCAoqXVmXOHS4fnWoxpuGQtQ==, + } dependencies: '@types/estree': 1.0.2 dev: false /@types/estree@1.0.2: - resolution: {integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==} + resolution: + { + integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==, + } dev: false /@types/graceful-fs@4.1.7: - resolution: {integrity: sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==} + resolution: + { + integrity: sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==, + } dependencies: - '@types/node': 20.8.0 + '@types/node': 18.14.6 dev: true /@types/hast@2.3.6: - resolution: {integrity: sha512-47rJE80oqPmFdVDCD7IheXBrVdwuBgsYwoczFvKmwfo2Mzsnt+V9OONsYauFmICb6lQPpCuXYJWejBNs4pDJRg==} + resolution: + { + integrity: sha512-47rJE80oqPmFdVDCD7IheXBrVdwuBgsYwoczFvKmwfo2Mzsnt+V9OONsYauFmICb6lQPpCuXYJWejBNs4pDJRg==, + } dependencies: '@types/unist': 2.0.8 dev: false /@types/hast@3.0.1: - resolution: {integrity: sha512-hs/iBJx2aydugBQx5ETV3ZgeSS0oIreQrFJ4bjBl0XvM4wAmDjFEALY7p0rTSLt2eL+ibjRAAs9dTPiCLtmbqQ==} + resolution: + { + integrity: sha512-hs/iBJx2aydugBQx5ETV3ZgeSS0oIreQrFJ4bjBl0XvM4wAmDjFEALY7p0rTSLt2eL+ibjRAAs9dTPiCLtmbqQ==, + } dependencies: '@types/unist': 3.0.0 dev: false /@types/istanbul-lib-coverage@2.0.4: - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + resolution: + { + integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==, + } dev: true /@types/istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==} + resolution: + { + integrity: sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==, + } dependencies: '@types/istanbul-lib-coverage': 2.0.4 dev: true /@types/istanbul-reports@3.0.2: - resolution: {integrity: sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==} + resolution: + { + integrity: sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==, + } dependencies: '@types/istanbul-lib-report': 3.0.1 dev: true /@types/jest@29.5.5: - resolution: {integrity: sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==} + resolution: + { + integrity: sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==, + } dependencies: expect: 29.7.0 pretty-format: 29.7.0 dev: true /@types/js-yaml@4.0.6: - resolution: {integrity: sha512-ACTuifTSIIbyksx2HTon3aFtCKWcID7/h3XEmRpDYdMCXxPbl+m9GteOJeaAkiAta/NJaSFuA7ahZ0NkwajDSw==} + resolution: + { + integrity: sha512-ACTuifTSIIbyksx2HTon3aFtCKWcID7/h3XEmRpDYdMCXxPbl+m9GteOJeaAkiAta/NJaSFuA7ahZ0NkwajDSw==, + } dev: false /@types/json-schema@7.0.13: - resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} + resolution: + { + integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==, + } + dev: false + + /@types/json5@0.0.29: + resolution: + { + integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==, + } dev: true /@types/katex@0.16.3: - resolution: {integrity: sha512-CeVMX9EhVUW8MWnei05eIRks4D5Wscw/W9Byz1s3PA+yJvcdvq9SaDjiUKvRvEgjpdTyJMjQA43ae4KTwsvOPg==} + resolution: + { + integrity: sha512-CeVMX9EhVUW8MWnei05eIRks4D5Wscw/W9Byz1s3PA+yJvcdvq9SaDjiUKvRvEgjpdTyJMjQA43ae4KTwsvOPg==, + } dev: false /@types/mdast@3.0.13: - resolution: {integrity: sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==} + resolution: + { + integrity: sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==, + } dependencies: '@types/unist': 2.0.8 dev: false /@types/mdast@4.0.1: - resolution: {integrity: sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==} + resolution: + { + integrity: sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==, + } dependencies: '@types/unist': 3.0.0 dev: false /@types/mdx@2.0.8: - resolution: {integrity: sha512-r7/zWe+f9x+zjXqGxf821qz++ld8tp6Z4jUS6qmPZUXH6tfh4riXOhAqb12tWGWAevCFtMt1goLWkQMqIJKpsA==} + resolution: + { + integrity: sha512-r7/zWe+f9x+zjXqGxf821qz++ld8tp6Z4jUS6qmPZUXH6tfh4riXOhAqb12tWGWAevCFtMt1goLWkQMqIJKpsA==, + } dev: false - /@types/minimist@1.2.3: - resolution: {integrity: sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==} - dev: true - /@types/ms@0.7.32: - resolution: {integrity: sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==} + resolution: + { + integrity: sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==, + } dev: false /@types/node@18.14.6: - resolution: {integrity: sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==} + resolution: + { + integrity: sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==, + } dev: true - /@types/node@20.8.0: - resolution: {integrity: sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ==} - dev: true + /@types/prop-types@15.7.7: + resolution: + { + integrity: sha512-FbtmBWCcSa2J4zL781Zf1p5YUBXQomPEcep9QZCfRfQgTxz3pJWiDFLebohZ9fFntX5ibzOkSsrJ0TEew8cAog==, + } - /@types/normalize-package-data@2.4.2: - resolution: {integrity: sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==} + /@types/react-dom@18.0.11: + resolution: + { + integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==, + } + dependencies: + '@types/react': 18.2.24 dev: true - /@types/prop-types@15.7.7: - resolution: {integrity: sha512-FbtmBWCcSa2J4zL781Zf1p5YUBXQomPEcep9QZCfRfQgTxz3pJWiDFLebohZ9fFntX5ibzOkSsrJ0TEew8cAog==} - /@types/react-dom@18.2.8: - resolution: {integrity: sha512-bAIvO5lN/U8sPGvs1Xm61rlRHHaq5rp5N3kp9C+NJ/Q41P8iqjkXSu0+/qu8POsjH9pNWb0OYabFez7taP7omw==} + resolution: + { + integrity: sha512-bAIvO5lN/U8sPGvs1Xm61rlRHHaq5rp5N3kp9C+NJ/Q41P8iqjkXSu0+/qu8POsjH9pNWb0OYabFez7taP7omw==, + } dependencies: - '@types/react': 18.2.23 + '@types/react': 18.2.24 dev: true - /@types/react@18.2.23: - resolution: {integrity: sha512-qHLW6n1q2+7KyBEYnrZpcsAmU/iiCh9WGCKgXvMxx89+TYdJWRjZohVIo9XTcoLhfX3+/hP0Pbulu3bCZQ9PSA==} + /@types/react@18.2.24: + resolution: + { + integrity: sha512-Ee0Jt4sbJxMu1iDcetZEIKQr99J1Zfb6D4F3qfUWoR1JpInkY1Wdg4WwCyBjL257D0+jGqSl1twBjV8iCaC0Aw==, + } dependencies: '@types/prop-types': 15.7.7 '@types/scheduler': 0.16.4 csstype: 3.1.2 /@types/scheduler@0.16.4: - resolution: {integrity: sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==} + resolution: + { + integrity: sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==, + } /@types/semver@7.5.3: - resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} - dev: true + resolution: + { + integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==, + } + dev: false /@types/stack-utils@2.0.1: - resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} + resolution: + { + integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==, + } dev: true /@types/unist@2.0.8: - resolution: {integrity: sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==} + resolution: + { + integrity: sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==, + } dev: false /@types/unist@3.0.0: - resolution: {integrity: sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==} + resolution: + { + integrity: sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==, + } dev: false - /@types/use-sync-external-store@0.0.4: - resolution: {integrity: sha512-DMBc2WDEfaGsWXqH/Sk2oBaUkvlUwqgt/YEygpqX0MaiEjqR7afd1QgE4Pq2zBr/TRz0Mpu92eBBo5UQjtTD5Q==} - dev: true - /@types/yargs-parser@21.0.1: - resolution: {integrity: sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==} + resolution: + { + integrity: sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==, + } dev: true /@types/yargs@16.0.6: - resolution: {integrity: sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A==} + resolution: + { + integrity: sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A==, + } dependencies: '@types/yargs-parser': 21.0.1 dev: true /@types/yargs@17.0.26: - resolution: {integrity: sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw==} + resolution: + { + integrity: sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw==, + } dependencies: '@types/yargs-parser': 21.0.1 dev: true /@typescript-eslint/eslint-plugin@6.7.3(@typescript-eslint/parser@6.7.3)(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==} - engines: {node: ^16.0.0 || >=18.0.0} + resolution: + { + integrity: sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==, + } + engines: { node: ^16.0.0 || >=18.0.0 } peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha eslint: ^7.0.0 || ^8.0.0 @@ -2157,11 +2330,14 @@ packages: typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true + dev: false /@typescript-eslint/parser@6.7.3(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==} - engines: {node: ^16.0.0 || >=18.0.0} + resolution: + { + integrity: sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==, + } + engines: { node: ^16.0.0 || >=18.0.0 } peerDependencies: eslint: ^7.0.0 || ^8.0.0 typescript: '*' @@ -2178,19 +2354,23 @@ packages: typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true /@typescript-eslint/scope-manager@6.7.3: - resolution: {integrity: sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==} - engines: {node: ^16.0.0 || >=18.0.0} + resolution: + { + integrity: sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==, + } + engines: { node: ^16.0.0 || >=18.0.0 } dependencies: '@typescript-eslint/types': 6.7.3 '@typescript-eslint/visitor-keys': 6.7.3 - dev: true /@typescript-eslint/type-utils@6.7.3(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw==} - engines: {node: ^16.0.0 || >=18.0.0} + resolution: + { + integrity: sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw==, + } + engines: { node: ^16.0.0 || >=18.0.0 } peerDependencies: eslint: ^7.0.0 || ^8.0.0 typescript: '*' @@ -2206,16 +2386,21 @@ packages: typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true + dev: false /@typescript-eslint/types@6.7.3: - resolution: {integrity: sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true + resolution: + { + integrity: sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==, + } + engines: { node: ^16.0.0 || >=18.0.0 } /@typescript-eslint/typescript-estree@6.7.3(typescript@5.2.2): - resolution: {integrity: sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==} - engines: {node: ^16.0.0 || >=18.0.0} + resolution: + { + integrity: sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==, + } + engines: { node: ^16.0.0 || >=18.0.0 } peerDependencies: typescript: '*' peerDependenciesMeta: @@ -2232,11 +2417,13 @@ packages: typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true /@typescript-eslint/utils@6.7.3(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg==} - engines: {node: ^16.0.0 || >=18.0.0} + resolution: + { + integrity: sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg==, + } + engines: { node: ^16.0.0 || >=18.0.0 } peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: @@ -2251,186 +2438,258 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true + dev: false /@typescript-eslint/visitor-keys@6.7.3: - resolution: {integrity: sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==} - engines: {node: ^16.0.0 || >=18.0.0} + resolution: + { + integrity: sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==, + } + engines: { node: ^16.0.0 || >=18.0.0 } dependencies: '@typescript-eslint/types': 6.7.3 eslint-visitor-keys: 3.4.3 - dev: true /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + resolution: + { + integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==, + } dev: false - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - dev: true - /acorn-jsx@5.3.2(acorn@8.10.0): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + resolution: + { + integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, + } peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.10.0 - - /acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - - /agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - dev: true - - /aggregate-error@4.0.1: - resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} - engines: {node: '>=12'} + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - clean-stack: 4.2.0 - indent-string: 5.0.0 - dev: true + acorn: 8.10.0 - /aggregate-error@5.0.0: - resolution: {integrity: sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==} - engines: {node: '>=18'} - dependencies: - clean-stack: 5.2.0 - indent-string: 5.0.0 - dev: true + /acorn@8.10.0: + resolution: + { + integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==, + } + engines: { node: '>=0.4.0' } + hasBin: true /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + 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: true /anser@2.1.1: - resolution: {integrity: sha512-nqLm4HxOTpeLOxcmB3QWmV5TcDFhW9y/fyQ+hivtDFcK4OQ+pQ5fzPnXHM1Mfcm0VkLtvVi1TCPr++Qy0Q/3EQ==} + resolution: + { + integrity: sha512-nqLm4HxOTpeLOxcmB3QWmV5TcDFhW9y/fyQ+hivtDFcK4OQ+pQ5fzPnXHM1Mfcm0VkLtvVi1TCPr++Qy0Q/3EQ==, + } dev: false /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, + } + engines: { node: '>=8' } dependencies: type-fest: 0.21.3 dev: true - /ansi-escapes@6.2.0: - resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} - engines: {node: '>=14.16'} - dependencies: - type-fest: 3.13.1 - dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + resolution: + { + integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, + } + engines: { node: '>=8' } /ansi-sequence-parser@1.1.1: - resolution: {integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==} + resolution: + { + integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==, + } dev: false /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, + } + engines: { node: '>=4' } dependencies: color-convert: 1.9.3 /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, + } + engines: { node: '>=8' } dependencies: color-convert: 2.0.1 - dev: true /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true - - /ansicolors@0.3.2: - resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + resolution: + { + integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, + } + engines: { node: '>=10' } dev: true /any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + resolution: + { + integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==, + } dev: true /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, + } + engines: { node: '>= 8' } dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 dev: true /arch@2.2.0: - resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + resolution: + { + integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==, + } dev: false /arg@1.0.0: - resolution: {integrity: sha512-Wk7TEzl1KqvTGs/uyhmHO/3XLd3t1UeU4IstvPXVzGPM522cTjqjNZ99esCkcL52sjqjo8e8CTBcWhkxvGzoAw==} + resolution: + { + integrity: sha512-Wk7TEzl1KqvTGs/uyhmHO/3XLd3t1UeU4IstvPXVzGPM522cTjqjNZ99esCkcL52sjqjo8e8CTBcWhkxvGzoAw==, + } dev: false /arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + resolution: + { + integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==, + } dev: true /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + resolution: + { + integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, + } dependencies: sprintf-js: 1.0.3 /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + resolution: + { + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, + } - /argv-formatter@1.0.0: - resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==} + /aria-query@5.3.0: + resolution: + { + integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==, + } + dependencies: + dequal: 2.0.3 dev: true /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + resolution: + { + integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==, + } dependencies: call-bind: 1.0.2 is-array-buffer: 3.0.2 - dev: true - /array-ify@1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - dev: true + /array-includes@3.1.7: + resolution: + { + integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==, + } + engines: { node: '>= 0.4' } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + get-intrinsic: 1.2.1 + is-string: 1.0.7 /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, + } + engines: { node: '>=8' } + + /array.prototype.findlastindex@1.2.3: + resolution: + { + integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==, + } + engines: { node: '>= 0.4' } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.1 dev: true + /array.prototype.flat@1.3.2: + resolution: + { + integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==, + } + engines: { node: '>= 0.4' } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + es-shim-unscopables: 1.0.0 + + /array.prototype.flatmap@1.3.2: + resolution: + { + integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==, + } + engines: { node: '>= 0.4' } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + es-shim-unscopables: 1.0.0 + + /array.prototype.tosorted@1.1.2: + resolution: + { + integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==, + } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + es-shim-unscopables: 1.0.0 + get-intrinsic: 1.2.1 + /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==, + } + engines: { node: '>= 0.4' } dependencies: array-buffer-byte-length: 1.0.0 call-bind: 1.0.2 @@ -2439,26 +2698,60 @@ packages: get-intrinsic: 1.2.1 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 - dev: true - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} + /ast-types-flow@0.0.7: + resolution: + { + integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==, + } dev: true /astring@1.8.6: - resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} + resolution: + { + integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==, + } hasBin: true dev: false + /asynciterator.prototype@1.0.0: + resolution: + { + integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==, + } + dependencies: + has-symbols: 1.0.3 + /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==, + } + engines: { node: '>= 0.4' } + + /axe-core@4.8.2: + resolution: + { + integrity: sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==, + } + engines: { node: '>=4' } + dev: true + + /axobject-query@3.2.1: + resolution: + { + integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==, + } + dependencies: + dequal: 2.0.3 dev: true /babel-jest@29.7.0(@babel/core@7.23.0): - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } peerDependencies: '@babel/core': ^7.8.0 dependencies: @@ -2475,8 +2768,11 @@ packages: dev: true /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==, + } + engines: { node: '>=8' } dependencies: '@babel/helper-plugin-utils': 7.22.5 '@istanbuljs/load-nyc-config': 1.1.0 @@ -2488,8 +2784,11 @@ packages: dev: true /babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@babel/template': 7.22.15 '@babel/types': 7.23.0 @@ -2498,7 +2797,10 @@ packages: dev: true /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.0): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + resolution: + { + integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==, + } peerDependencies: '@babel/core': ^7.0.0 dependencies: @@ -2518,8 +2820,11 @@ packages: dev: true /babel-preset-jest@29.6.3(@babel/core@7.23.0): - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } peerDependencies: '@babel/core': ^7.0.0 dependencies: @@ -2529,147 +2834,160 @@ packages: dev: true /bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + resolution: + { + integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==, + } dev: false /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + resolution: + { + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, + } /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + resolution: + { + integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, + } dev: false - /before-after-hook@2.2.3: - resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true - - /bottleneck@2.19.5: - resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} + resolution: + { + integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, + } + engines: { node: '>=8' } dev: true /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + resolution: + { + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, + } dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, + } + engines: { node: '>=8' } dependencies: fill-range: 7.0.1 - dev: true /browserslist@4.22.1: - resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + resolution: + { + integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==, + } + engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } hasBin: true dependencies: caniuse-lite: 1.0.30001541 electron-to-chromium: 1.4.537 node-releases: 2.0.13 update-browserslist-db: 1.0.13(browserslist@4.22.1) + dev: true /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + resolution: + { + integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==, + } dependencies: node-int64: 0.4.0 dev: true /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + resolution: + { + integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, + } dev: true /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + resolution: + { + integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==, + } dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: false - /bundle-require@4.0.2(esbuild@0.18.20): - resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - peerDependencies: - esbuild: '>=0.17' - dependencies: - esbuild: 0.18.20 - load-tsconfig: 0.2.5 - dev: true - /busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} + resolution: + { + integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==, + } + engines: { node: '>=10.16.0' } dependencies: streamsearch: 1.1.0 dev: false - /cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - dev: true - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + resolution: + { + integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==, + } dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.1 - dev: true /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + resolution: + { + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, + } + engines: { node: '>=6' } /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: true - - /camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - map-obj: 4.3.0 - quick-lru: 4.0.1 + resolution: + { + integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==, + } + engines: { node: '>= 6' } dev: true /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, + } + engines: { node: '>=6' } dev: true /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, + } + engines: { node: '>=10' } dev: true /caniuse-lite@1.0.30001541: - resolution: {integrity: sha512-bLOsqxDgTqUBkzxbNlSBt8annkDpQB9NdzdTbO2ooJ+eC/IQcvDspDc058g84ejCelF7vHUx57KIOjEecOHXaw==} - - /cardinal@2.1.1: - resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} - hasBin: true - dependencies: - ansicolors: 0.3.2 - redeyed: 2.1.1 - dev: true + resolution: + { + integrity: sha512-bLOsqxDgTqUBkzxbNlSBt8annkDpQB9NdzdTbO2ooJ+eC/IQcvDspDc058g84ejCelF7vHUx57KIOjEecOHXaw==, + } /ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + resolution: + { + integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==, + } dev: false /chalk@2.3.0: - resolution: {integrity: sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==, + } + engines: { node: '>=4' } dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 @@ -2677,50 +2995,69 @@ packages: dev: false /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + 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: true /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, + } + engines: { node: '>=10' } dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true /char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==, + } + engines: { node: '>=10' } dev: true /character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + resolution: + { + integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==, + } dev: false /character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + resolution: + { + integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==, + } dev: false /character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + resolution: + { + integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==, + } dev: false /character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + resolution: + { + integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==, + } dev: false /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + resolution: + { + integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, + } + engines: { node: '>= 8.10.0' } dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -2734,61 +3071,51 @@ packages: dev: true /ci-info@3.8.0: - resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==, + } + engines: { node: '>=8' } dev: true /cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + resolution: + { + integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==, + } dev: true /clean-set@1.1.2: - resolution: {integrity: sha512-cA8uCj0qSoG9e0kevyOWXwPaELRPVg5Pxp6WskLMwerx257Zfnh8Nl0JBH59d7wQzij2CK7qEfJQK3RjuKKIug==} + resolution: + { + integrity: sha512-cA8uCj0qSoG9e0kevyOWXwPaELRPVg5Pxp6WskLMwerx257Zfnh8Nl0JBH59d7wQzij2CK7qEfJQK3RjuKKIug==, + } dev: false - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true - - /clean-stack@4.2.0: - resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} - engines: {node: '>=12'} - dependencies: - escape-string-regexp: 5.0.0 - dev: true - - /clean-stack@5.2.0: - resolution: {integrity: sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==} - engines: {node: '>=14.16'} - dependencies: - escape-string-regexp: 5.0.0 - dev: true - - /cli-table3@0.6.3: - resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} - engines: {node: 10.* || >= 12.*} - dependencies: - string-width: 4.2.3 - optionalDependencies: - '@colors/colors': 1.5.0 - dev: true - /client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + resolution: + { + integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==, + } dev: false /clipboardy@1.2.2: - resolution: {integrity: sha512-16KrBOV7bHmHdxcQiCvfUFYVFyEah4FI8vYT1Fr7CGSA4G+xBWMEfUEQJS1hxeHGtI9ju1Bzs9uXSbj5HZKArw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-16KrBOV7bHmHdxcQiCvfUFYVFyEah4FI8vYT1Fr7CGSA4G+xBWMEfUEQJS1hxeHGtI9ju1Bzs9uXSbj5HZKArw==, + } + engines: { node: '>=4' } dependencies: arch: 2.2.0 execa: 0.8.0 dev: false /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, + } + engines: { node: '>=12' } dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 @@ -2796,177 +3123,153 @@ packages: dev: true /clsx@2.0.0: - resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==, + } + engines: { node: '>=6' } dev: false /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + resolution: + { + integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==, + } + engines: { iojs: '>= 1.0.0', node: '>= 0.12.0' } dev: true /codesandbox-import-util-types@2.2.3: - resolution: {integrity: sha512-Qj00p60oNExthP2oR3vvXmUGjukij+rxJGuiaKM6tyUmSyimdZsqHI/TUvFFClAffk9s7hxGnQgWQ8KCce27qQ==} + resolution: + { + integrity: sha512-Qj00p60oNExthP2oR3vvXmUGjukij+rxJGuiaKM6tyUmSyimdZsqHI/TUvFFClAffk9s7hxGnQgWQ8KCce27qQ==, + } dev: false /collect-v8-coverage@1.0.2: - resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + resolution: + { + integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==, + } dev: true /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + resolution: + { + integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, + } dependencies: color-name: 1.1.3 /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + resolution: + { + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, + } + engines: { node: '>=7.0.0' } dependencies: color-name: 1.1.4 - dev: true /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + resolution: + { + integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, + } /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + resolution: + { + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, + } /comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + resolution: + { + integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==, + } dev: false /commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==, + } + engines: { node: '>= 6' } dev: true /commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} + 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'} + resolution: + { + integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==, + } + engines: { node: '>= 12' } dev: false - /compare-func@2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} - dependencies: - array-ify: 1.0.0 - dot-prop: 5.3.0 - dev: true - /compute-scroll-into-view@3.1.0: - resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==} + resolution: + { + integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==, + } dev: false /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /config-chain@1.1.13: - resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - dependencies: - ini: 1.3.8 - proto-list: 1.2.4 - dev: true - - /conventional-changelog-angular@6.0.0: - resolution: {integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==} - engines: {node: '>=14'} - dependencies: - compare-func: 2.0.0 - dev: true - - /conventional-changelog-writer@6.0.1: - resolution: {integrity: sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==} - engines: {node: '>=14'} - hasBin: true - dependencies: - conventional-commits-filter: 3.0.0 - dateformat: 3.0.3 - handlebars: 4.7.8 - json-stringify-safe: 5.0.1 - meow: 8.1.2 - semver: 7.5.4 - split: 1.0.1 - dev: true - - /conventional-commits-filter@3.0.0: - resolution: {integrity: sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==} - engines: {node: '>=14'} - dependencies: - lodash.ismatch: 4.4.0 - modify-values: 1.0.1 - dev: true - - /conventional-commits-filter@4.0.0: - resolution: {integrity: sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==} - engines: {node: '>=16'} - dev: true - - /conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} - engines: {node: '>=16'} - hasBin: true - dependencies: - JSONStream: 1.3.5 - is-text-path: 2.0.0 - meow: 12.1.1 - split2: 4.2.0 - dev: true + resolution: + { + integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, + } /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + resolution: + { + integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==, + } dev: true /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + resolution: + { + integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, + } dev: true /cose-base@1.0.3: - resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} + resolution: + { + integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==, + } dependencies: layout-base: 1.0.2 dev: false /cose-base@2.2.0: - resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} + resolution: + { + integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==, + } dependencies: layout-base: 2.0.1 dev: false - /cosmiconfig@8.3.6(typescript@5.2.2): - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - import-fresh: 3.3.0 - js-yaml: 4.1.0 - parse-json: 5.2.0 - path-type: 4.0.0 - typescript: 5.2.2 - dev: true - /create-jest@29.7.0: - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } hasBin: true dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.8.0) + jest-config: 29.7.0(@types/node@18.14.6) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -2977,11 +3280,17 @@ packages: dev: true /crelt@1.0.6: - resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + resolution: + { + integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==, + } dev: false /cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + resolution: + { + integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==, + } dependencies: lru-cache: 4.1.5 shebang-command: 1.2.0 @@ -2989,8 +3298,11 @@ packages: dev: false /cross-spawn@6.0.5: - resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} - engines: {node: '>=4.8'} + resolution: + { + integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==, + } + engines: { node: '>=4.8' } dependencies: nice-try: 1.0.5 path-key: 2.0.1 @@ -3000,32 +3312,36 @@ packages: dev: true /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, + } + engines: { node: '>= 8' } dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - - /crypto-random-string@4.0.0: - resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} - engines: {node: '>=12'} - dependencies: - type-fest: 1.4.0 - dev: true /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, + } + engines: { node: '>=4' } hasBin: true dev: true /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + resolution: + { + integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==, + } /cytoscape-cose-bilkent@4.1.0(cytoscape@3.26.0): - resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} + resolution: + { + integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==, + } peerDependencies: cytoscape: ^3.2.0 dependencies: @@ -3034,7 +3350,10 @@ packages: dev: false /cytoscape-fcose@2.2.0(cytoscape@3.26.0): - resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} + resolution: + { + integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==, + } peerDependencies: cytoscape: ^3.2.0 dependencies: @@ -3043,34 +3362,49 @@ packages: dev: false /cytoscape@3.26.0: - resolution: {integrity: sha512-IV+crL+KBcrCnVVUCZW+zRRRFUZQcrtdOPXki+o4CFUWLdAEYvuZLcBSJC9EBK++suamERKzeY7roq2hdovV3w==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-IV+crL+KBcrCnVVUCZW+zRRRFUZQcrtdOPXki+o4CFUWLdAEYvuZLcBSJC9EBK++suamERKzeY7roq2hdovV3w==, + } + engines: { node: '>=0.10' } dependencies: heap: 0.2.7 lodash: 4.17.21 dev: false /d3-array@2.12.1: - resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + resolution: + { + integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==, + } dependencies: internmap: 1.0.1 dev: false /d3-array@3.2.4: - resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==, + } + engines: { node: '>=12' } dependencies: internmap: 2.0.3 dev: false /d3-axis@3.0.0: - resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==, + } + engines: { node: '>=12' } dev: false /d3-brush@3.0.0: - resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==, + } + engines: { node: '>=12' } dependencies: d3-dispatch: 3.0.1 d3-drag: 3.0.0 @@ -3080,47 +3414,68 @@ packages: dev: false /d3-chord@3.0.1: - resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==, + } + engines: { node: '>=12' } dependencies: d3-path: 3.1.0 dev: false /d3-color@3.1.0: - resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==, + } + engines: { node: '>=12' } dev: false /d3-contour@4.0.2: - resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==, + } + engines: { node: '>=12' } dependencies: d3-array: 3.2.4 dev: false /d3-delaunay@6.0.4: - resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==, + } + engines: { node: '>=12' } dependencies: delaunator: 5.0.0 dev: false /d3-dispatch@3.0.1: - resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==, + } + engines: { node: '>=12' } dev: false /d3-drag@3.0.0: - resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==, + } + engines: { node: '>=12' } dependencies: d3-dispatch: 3.0.1 d3-selection: 3.0.0 dev: false /d3-dsv@3.0.1: - resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==, + } + engines: { node: '>=12' } hasBin: true dependencies: commander: 7.2.0 @@ -3129,20 +3484,29 @@ packages: dev: false /d3-ease@3.0.1: - resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==, + } + engines: { node: '>=12' } dev: false /d3-fetch@3.0.1: - resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==, + } + engines: { node: '>=12' } dependencies: d3-dsv: 3.0.1 dev: false /d3-force@3.0.0: - resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==, + } + engines: { node: '>=12' } dependencies: d3-dispatch: 3.0.1 d3-quadtree: 3.0.1 @@ -3150,71 +3514,107 @@ packages: dev: false /d3-format@3.1.0: - resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==, + } + engines: { node: '>=12' } dev: false /d3-geo@3.1.0: - resolution: {integrity: sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==, + } + engines: { node: '>=12' } dependencies: d3-array: 3.2.4 dev: false /d3-hierarchy@3.1.2: - resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==, + } + engines: { node: '>=12' } dev: false /d3-interpolate@3.0.1: - resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==, + } + engines: { node: '>=12' } dependencies: d3-color: 3.1.0 dev: false /d3-path@1.0.9: - resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + resolution: + { + integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==, + } dev: false /d3-path@3.1.0: - resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==, + } + engines: { node: '>=12' } dev: false /d3-polygon@3.0.1: - resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==, + } + engines: { node: '>=12' } dev: false /d3-quadtree@3.0.1: - resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==, + } + engines: { node: '>=12' } dev: false /d3-random@3.0.1: - resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==, + } + engines: { node: '>=12' } dev: false /d3-sankey@0.12.3: - resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + resolution: + { + integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==, + } dependencies: d3-array: 2.12.1 d3-shape: 1.3.7 dev: false /d3-scale-chromatic@3.0.0: - resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==, + } + engines: { node: '>=12' } dependencies: d3-color: 3.1.0 d3-interpolate: 3.0.1 dev: false /d3-scale@4.0.2: - resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==, + } + engines: { node: '>=12' } dependencies: d3-array: 3.2.4 d3-format: 3.1.0 @@ -3224,45 +3624,66 @@ packages: dev: false /d3-selection@3.0.0: - resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==, + } + engines: { node: '>=12' } dev: false /d3-shape@1.3.7: - resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + resolution: + { + integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==, + } dependencies: d3-path: 1.0.9 dev: false /d3-shape@3.2.0: - resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==, + } + engines: { node: '>=12' } dependencies: d3-path: 3.1.0 dev: false /d3-time-format@4.1.0: - resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==, + } + engines: { node: '>=12' } dependencies: d3-time: 3.1.0 dev: false /d3-time@3.1.0: - resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==, + } + engines: { node: '>=12' } dependencies: d3-array: 3.2.4 dev: false /d3-timer@3.0.1: - resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==, + } + engines: { node: '>=12' } dev: false /d3-transition@3.0.1(d3-selection@3.0.0): - resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==, + } + engines: { node: '>=12' } peerDependencies: d3-selection: 2 - 3 dependencies: @@ -3275,8 +3696,11 @@ packages: dev: false /d3-zoom@3.0.0: - resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==, + } + engines: { node: '>=12' } dependencies: d3-dispatch: 3.0.1 d3-drag: 3.0.0 @@ -3286,8 +3710,11 @@ packages: dev: false /d3@7.8.5: - resolution: {integrity: sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==, + } + engines: { node: '>=12' } dependencies: d3-array: 3.2.4 d3-axis: 3.0.0 @@ -3322,30 +3749,44 @@ packages: dev: false /d@1.0.1: - resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} + resolution: + { + integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==, + } dependencies: es5-ext: 0.10.62 type: 1.2.0 dev: false /dagre-d3-es@7.0.10: - resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==} + resolution: + { + integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==, + } dependencies: d3: 7.8.5 lodash-es: 4.17.21 dev: false - /dateformat@3.0.3: - resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} + /damerau-levenshtein@1.0.8: + resolution: + { + integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==, + } dev: true /dayjs@1.11.10: - resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + resolution: + { + integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==, + } dev: false - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} + /debug@3.2.7: + resolution: + { + integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, + } peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -3353,28 +3794,36 @@ packages: optional: true dependencies: ms: 2.1.2 - - /decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} - dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 dev: true - /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: true + /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 /decode-named-character-reference@1.0.2: - resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + resolution: + { + integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==, + } dependencies: character-entities: 2.0.2 dev: false /dedent@1.5.1: - resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + resolution: + { + integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==, + } peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -3382,156 +3831,217 @@ packages: optional: true dev: true - /deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - dev: true - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + resolution: + { + integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, + } /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, + } + engines: { node: '>=0.10.0' } dev: true /define-data-property@1.1.0: - resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==, + } + engines: { node: '>= 0.4' } dependencies: get-intrinsic: 1.2.1 gopd: 1.0.1 has-property-descriptors: 1.0.0 - dev: true /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, + } + engines: { node: '>= 0.4' } dependencies: define-data-property: 1.1.0 has-property-descriptors: 1.0.0 object-keys: 1.1.1 - dev: true /delaunator@5.0.0: - resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==} + resolution: + { + integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==, + } dependencies: robust-predicates: 3.0.2 dev: false - /deprecation@2.3.1: - resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} - dev: true - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - dev: false + resolution: + { + integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, + } + engines: { node: '>=6' } /detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==, + } + engines: { node: '>=8' } dev: true /devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + resolution: + { + integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==, + } dependencies: dequal: 2.0.3 dev: false /didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + resolution: + { + integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==, + } dev: true /diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dev: true /diff@5.1.0: - resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} - engines: {node: '>=0.3.1'} + resolution: + { + integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==, + } + engines: { node: '>=0.3.1' } dev: false /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, + } + engines: { node: '>=8' } dependencies: path-type: 4.0.0 - dev: true /dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + resolution: + { + integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==, + } dev: true + /doctrine@2.1.0: + resolution: + { + integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==, + } + engines: { node: '>=0.10.0' } + dependencies: + esutils: 2.0.3 + /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, + } + engines: { node: '>=6.0.0' } dependencies: esutils: 2.0.3 - dev: true /dompurify@3.0.6: - resolution: {integrity: sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==} + resolution: + { + integrity: sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==, + } dev: false - /dot-prop@5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} - dependencies: - is-obj: 2.0.0 - dev: true - /dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==, + } + engines: { node: '>=12' } dev: false - /duplexer2@0.1.4: - resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} - dependencies: - readable-stream: 2.3.8 - dev: true - /electron-to-chromium@1.4.537: - resolution: {integrity: sha512-W1+g9qs9hviII0HAwOdehGYkr+zt7KKdmCcJcjH0mYg6oL8+ioT3Skjmt7BLoAQqXhjf40AXd+HlR4oAWMlXjA==} + resolution: + { + integrity: sha512-W1+g9qs9hviII0HAwOdehGYkr+zt7KKdmCcJcjH0mYg6oL8+ioT3Skjmt7BLoAQqXhjf40AXd+HlR4oAWMlXjA==, + } + dev: true /elkjs@0.8.2: - resolution: {integrity: sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==} + resolution: + { + integrity: sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==, + } dev: false /emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==, + } + engines: { node: '>=12' } dev: true /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + resolution: + { + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, + } dev: true - /entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - dev: false + /emoji-regex@9.2.2: + resolution: + { + integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, + } + dev: true - /env-ci@9.1.1: - resolution: {integrity: sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw==} - engines: {node: ^16.14 || >=18} + /enhanced-resolve@5.15.0: + resolution: + { + integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==, + } + engines: { node: '>=10.13.0' } dependencies: - execa: 7.2.0 - java-properties: 1.0.2 + graceful-fs: 4.2.11 + tapable: 2.2.1 dev: true + /entities@4.5.0: + resolution: + { + integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, + } + engines: { node: '>=0.12' } + dev: false + /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + resolution: + { + integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, + } dependencies: is-arrayish: 0.2.1 dev: true /es-abstract@1.22.2: - resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==, + } + engines: { node: '>= 0.4' } dependencies: array-buffer-byte-length: 1.0.0 arraybuffer.prototype.slice: 1.0.2 @@ -3572,29 +4082,64 @@ packages: typed-array-length: 1.0.4 unbox-primitive: 1.0.2 which-typed-array: 1.1.11 - dev: true + + /es-iterator-helpers@1.0.15: + resolution: + { + integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==, + } + dependencies: + asynciterator.prototype: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + es-set-tostringtag: 2.0.1 + function-bind: 1.1.1 + get-intrinsic: 1.2.1 + globalthis: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + iterator.prototype: 1.1.2 + safe-array-concat: 1.0.1 /es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==, + } + engines: { node: '>= 0.4' } dependencies: get-intrinsic: 1.2.1 has: 1.0.3 has-tostringtag: 1.0.0 - dev: true + + /es-shim-unscopables@1.0.0: + resolution: + { + integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==, + } + dependencies: + has: 1.0.3 /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + 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: true /es5-ext@0.10.62: - resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==, + } + engines: { node: '>=0.10' } requiresBuild: true dependencies: es6-iterator: 2.0.3 @@ -3603,7 +4148,10 @@ packages: dev: false /es6-iterator@2.0.3: - resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + resolution: + { + integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==, + } dependencies: d: 1.0.1 es5-ext: 0.10.62 @@ -3611,84 +4159,287 @@ packages: dev: false /es6-symbol@3.1.3: - resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} + resolution: + { + integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==, + } + dependencies: + d: 1.0.1 + ext: 1.7.0 + dev: false + + /escalade@3.1.1: + resolution: + { + integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, + } + engines: { node: '>=6' } + dev: true + + /escape-carriage@1.3.1: + resolution: + { + integrity: sha512-GwBr6yViW3ttx1kb7/Oh+gKQ1/TrhYwxKqVmg5gS+BK+Qe2KrOa/Vh7w3HPBvgGf0LfcDGoY9I6NHKoA5Hozhw==, + } + dev: false + + /escape-string-regexp@1.0.5: + resolution: + { + integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, + } + engines: { node: '>=0.8.0' } + + /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==, + } + engines: { node: '>=10' } + + /escape-string-regexp@5.0.0: + resolution: + { + integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==, + } + engines: { node: '>=12' } + dev: false + + /eslint-config-next@13.5.4(eslint@8.50.0)(typescript@5.2.2): + resolution: + { + integrity: sha512-FzQGIj4UEszRX7fcRSJK6L1LrDiVZvDFW320VVntVKh3BSU8Fb9kpaoxQx0cdFgf3MQXdeSbrCXJ/5Z/NndDkQ==, + } + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@next/eslint-plugin-next': 13.5.4 + '@rushstack/eslint-patch': 1.5.1 + '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + eslint: 8.50.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.50.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.50.0) + eslint-plugin-react: 7.33.2(eslint@8.50.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.50.0) + typescript: 5.2.2 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: + { + integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==, + } + dependencies: + debug: 3.2.7 + is-core-module: 2.13.0 + resolve: 1.22.6 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.50.0): + resolution: + { + integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==, + } + engines: { node: ^14.18.0 || >=16.0.0 } + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + dependencies: + debug: 4.3.4 + enhanced-resolve: 5.15.0 + eslint: 8.50.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) + fast-glob: 3.3.1 + get-tsconfig: 4.7.2 + is-core-module: 2.13.0 + is-glob: 4.0.3 + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0): + resolution: + { + integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==, + } + 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: - d: 1.0.1 - ext: 1.7.0 - dev: false - - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 + '@typescript-eslint/parser': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + debug: 3.2.7 + eslint: 8.50.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.50.0) + transitivePeerDependencies: + - supports-color dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - - /escape-carriage@1.3.1: - resolution: {integrity: sha512-GwBr6yViW3ttx1kb7/Oh+gKQ1/TrhYwxKqVmg5gS+BK+Qe2KrOa/Vh7w3HPBvgGf0LfcDGoY9I6NHKoA5Hozhw==} - dev: false - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} + /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0): + resolution: + { + integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==, + } + 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': 6.7.3(eslint@8.50.0)(typescript@5.2.2) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.50.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.3)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.50.0) + has: 1.0.3 + is-core-module: 2.13.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color dev: true - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + /eslint-plugin-jsx-a11y@6.7.1(eslint@8.50.0): + resolution: + { + integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==, + } + engines: { node: '>=4.0' } + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.23.1 + aria-query: 5.3.0 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.7 + axe-core: 4.8.2 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.50.0 + has: 1.0.3 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + semver: 6.3.1 dev: true - /escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} + /eslint-plugin-react-hooks@4.6.0(eslint@8.50.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.50.0 + + /eslint-plugin-react@7.33.2(eslint@8.50.0): + resolution: + { + integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==, + } + engines: { node: '>=4' } + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.2 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.15 + eslint: 8.50.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 + prop-types: 15.8.1 + resolve: 2.0.0-next.4 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + resolution: + { + integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } /eslint@8.50.0: - resolution: {integrity: sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) @@ -3730,49 +4481,65 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } dependencies: acorn: 8.10.0 acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.3 - dev: true /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, + } + engines: { node: '>=4' } hasBin: true /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==, + } + engines: { node: '>=0.10' } dependencies: estraverse: 5.3.0 - dev: true /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, + } + engines: { node: '>=4.0' } dependencies: estraverse: 5.3.0 - dev: true /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + resolution: + { + integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, + } + engines: { node: '>=4.0' } /estree-util-attach-comments@2.1.1: - resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} + resolution: + { + integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==, + } dependencies: '@types/estree': 1.0.2 dev: false /estree-util-build-jsx@2.2.2: - resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==} + resolution: + { + integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==, + } dependencies: '@types/estree-jsx': 1.0.1 estree-util-is-identifier-name: 2.1.0 @@ -3780,11 +4547,17 @@ packages: dev: false /estree-util-is-identifier-name@2.1.0: - resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} + resolution: + { + integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==, + } dev: false /estree-util-to-js@1.2.0: - resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} + resolution: + { + integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==, + } dependencies: '@types/estree-jsx': 1.0.1 astring: 1.8.6 @@ -3792,33 +4565,47 @@ packages: dev: false /estree-util-value-to-estree@1.3.0: - resolution: {integrity: sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==, + } + engines: { node: '>=12.0.0' } dependencies: is-plain-obj: 3.0.0 dev: false /estree-util-visit@1.2.1: - resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} + resolution: + { + integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==, + } dependencies: '@types/estree-jsx': 1.0.1 '@types/unist': 2.0.8 dev: false /estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + resolution: + { + integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, + } dependencies: '@types/estree': 1.0.2 dev: false /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + resolution: + { + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, + } + engines: { node: '>=0.10.0' } /execa@0.8.0: - resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==, + } + engines: { node: '>=4' } dependencies: cross-spawn: 5.1.0 get-stream: 3.0.0 @@ -3830,8 +4617,11 @@ packages: dev: false /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, + } + engines: { node: '>=10' } dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -3844,44 +4634,20 @@ packages: strip-final-newline: 2.0.0 dev: true - /execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.1 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 3.0.7 - strip-final-newline: 3.0.0 - dev: true - - /execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - dev: true - /exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==, + } + engines: { node: '>= 0.8.0' } dev: true /expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/expect-utils': 29.7.0 jest-get-type: 29.6.3 @@ -3891,296 +4657,324 @@ packages: dev: true /ext@1.7.0: - resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + resolution: + { + integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==, + } dependencies: type: 2.7.2 dev: false /extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==, + } + engines: { node: '>=0.10.0' } dependencies: is-extendable: 0.1.1 dev: false /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + resolution: + { + integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==, + } dev: false /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + resolution: + { + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, + } /fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} + resolution: + { + integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==, + } + 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: true /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + resolution: + { + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, + } /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + resolution: + { + integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, + } /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + resolution: + { + integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==, + } dependencies: reusify: 1.0.4 - dev: true /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + resolution: + { + integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==, + } dependencies: bser: 2.1.1 dev: true - /figures@2.0.0: - resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} - engines: {node: '>=4'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - - /figures@5.0.0: - resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} - engines: {node: '>=14'} - dependencies: - escape-string-regexp: 5.0.0 - is-unicode-supported: 1.3.0 - dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + resolution: + { + integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==, + } + engines: { node: ^10.12.0 || >=12.0.0 } dependencies: flat-cache: 3.1.0 - dev: true /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, + } + engines: { node: '>=8' } dependencies: to-regex-range: 5.0.1 - dev: true - - /find-up@2.1.0: - resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} - engines: {node: '>=4'} - dependencies: - locate-path: 2.0.0 - dev: true /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, + } + engines: { node: '>=8' } dependencies: locate-path: 5.0.0 path-exists: 4.0.0 dev: true /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, + } + engines: { node: '>=10' } dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - - /find-up@6.3.0: - resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - dev: true - - /find-versions@5.1.0: - resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==} - engines: {node: '>=12'} - dependencies: - semver-regex: 4.0.5 - dev: true /flat-cache@3.1.0: - resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} - engines: {node: '>=12.0.0'} + resolution: + { + integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==, + } + engines: { node: '>=12.0.0' } dependencies: flatted: 3.2.9 keyv: 4.5.3 rimraf: 3.0.2 - dev: true /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: true + resolution: + { + integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==, + } /flexsearch@0.7.31: - resolution: {integrity: sha512-XGozTsMPYkm+6b5QL3Z9wQcJjNYxp0CYn3U1gO7dwD6PAqU1SVWZxI9CCg3z+ml3YfqdPnrBehaBrnH2AGKbNA==} + resolution: + { + integrity: sha512-XGozTsMPYkm+6b5QL3Z9wQcJjNYxp0CYn3U1gO7dwD6PAqU1SVWZxI9CCg3z+ml3YfqdPnrBehaBrnH2AGKbNA==, + } dev: false /focus-visible@5.2.0: - resolution: {integrity: sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ==} + resolution: + { + integrity: sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ==, + } dev: false /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + resolution: + { + integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==, + } dependencies: is-callable: 1.2.7 - dev: true - - /from2@2.3.0: - resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} - dependencies: - inherits: 2.0.4 - readable-stream: 2.3.8 - dev: true - - /fs-extra@11.1.1: - resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} - engines: {node: '>=14.14'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: true /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + resolution: + { + integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, + } /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + resolution: + { + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, + } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } os: [darwin] requiresBuild: true dev: true optional: true /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true + resolution: + { + integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, + } /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==, + } + engines: { node: '>= 0.4' } dependencies: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 functions-have-names: 1.2.3 - dev: true /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true + resolution: + { + integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, + } /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} + resolution: + { + integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, + } + engines: { node: '>=6.9.0' } + dev: true /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + resolution: + { + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, + } + engines: { node: 6.* || 8.* || >= 10.* } dev: true /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + resolution: + { + integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==, + } dependencies: function-bind: 1.1.1 has: 1.0.3 has-proto: 1.0.1 has-symbols: 1.0.3 - dev: true /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} + resolution: + { + integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==, + } + engines: { node: '>=8.0.0' } dev: true /get-stream@3.0.0: - resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==, + } + engines: { node: '>=4' } dev: false /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true - - /get-stream@7.0.1: - resolution: {integrity: sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==} - engines: {node: '>=16'} - dev: true - - /get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, + } + engines: { node: '>=10' } dev: true /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==, + } + engines: { node: '>= 0.4' } dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 - dev: true - /git-log-parser@1.2.0: - resolution: {integrity: sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==} + /get-tsconfig@4.7.2: + resolution: + { + integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==, + } dependencies: - argv-formatter: 1.0.0 - spawn-error-forwarder: 1.0.0 - split2: 1.0.0 - stream-combiner2: 1.1.1 - through2: 2.0.5 - traverse: 0.6.7 + resolve-pkg-maps: 1.0.0 dev: true /git-up@7.0.0: - resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} + resolution: + { + integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==, + } dependencies: is-ssh: 1.4.0 parse-url: 8.1.0 dev: false /git-url-parse@13.1.0: - resolution: {integrity: sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==} + resolution: + { + integrity: sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==, + } dependencies: git-up: 7.0.0 dev: false /github-slugger@2.0.0: - resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + resolution: + { + integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==, + } dev: false /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, + } + engines: { node: '>= 6' } dependencies: is-glob: 4.0.3 - dev: true /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + resolution: + { + integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, + } + engines: { node: '>=10.13.0' } dependencies: is-glob: 4.0.3 - dev: true /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + resolution: + { + integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, + } dev: false /glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + resolution: + { + integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==, + } dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -4190,8 +4984,11 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + /glob@7.1.7: + resolution: + { + integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==, + } dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -4201,27 +4998,51 @@ packages: path-is-absolute: 1.0.1 dev: true + /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 + /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, + } + engines: { node: '>=4' } + dev: true /globals@13.22.0: - resolution: {integrity: sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==, + } + engines: { node: '>=8' } dependencies: type-fest: 0.20.2 - dev: true /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==, + } + engines: { node: '>= 0.4' } dependencies: define-properties: 1.2.1 - dev: true /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, + } + engines: { node: '>=10' } dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -4229,39 +5050,33 @@ packages: ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 - dev: true - - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 - merge2: 1.4.1 - slash: 4.0.0 - dev: true /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + resolution: + { + integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==, + } dependencies: get-intrinsic: 1.2.1 - dev: true - - /graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - dev: true /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + resolution: + { + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, + } /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + resolution: + { + integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, + } /gray-matter@4.0.3: - resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==, + } + engines: { node: '>=6.0' } dependencies: js-yaml: 3.14.1 kind-of: 6.0.3 @@ -4269,75 +5084,81 @@ packages: strip-bom-string: 1.0.0 dev: false - /handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.17.4 - dev: true - - /hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - dev: true - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + resolution: + { + integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==, + } /has-flag@2.0.0: - resolution: {integrity: sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==, + } + engines: { node: '>=0.10.0' } dev: false /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, + } + engines: { node: '>=4' } + dev: true /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + resolution: + { + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, + } + engines: { node: '>=8' } /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + resolution: + { + integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==, + } dependencies: get-intrinsic: 1.2.1 - dev: true /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: true + resolution: + { + integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==, + } + engines: { node: '>= 0.4' } /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + resolution: + { + integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, + } + engines: { node: '>= 0.4' } /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==, + } + engines: { node: '>= 0.4' } dependencies: has-symbols: 1.0.3 - dev: true /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} + resolution: + { + integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, + } + engines: { node: '>= 0.4.0' } dependencies: function-bind: 1.1.1 - dev: true /hash-obj@4.0.0: - resolution: {integrity: sha512-FwO1BUVWkyHasWDW4S8o0ssQXjvyghLV2rfVhnN36b2bbcj45eGiuzdn9XOvOpjV3TKQD7Gm2BWNXdE9V4KKYg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-FwO1BUVWkyHasWDW4S8o0ssQXjvyghLV2rfVhnN36b2bbcj45eGiuzdn9XOvOpjV3TKQD7Gm2BWNXdE9V4KKYg==, + } + engines: { node: '>=12' } dependencies: is-obj: 3.0.0 sort-keys: 5.0.0 @@ -4345,7 +5166,10 @@ packages: dev: false /hast-util-from-dom@5.0.0: - resolution: {integrity: sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==} + resolution: + { + integrity: sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==, + } dependencies: '@types/hast': 3.0.1 hastscript: 8.0.0 @@ -4353,7 +5177,10 @@ packages: dev: false /hast-util-from-html-isomorphic@2.0.0: - resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + resolution: + { + integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==, + } dependencies: '@types/hast': 3.0.1 hast-util-from-dom: 5.0.0 @@ -4362,7 +5189,10 @@ packages: dev: false /hast-util-from-html@2.0.1: - resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==} + resolution: + { + integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==, + } dependencies: '@types/hast': 3.0.1 devlop: 1.1.0 @@ -4373,7 +5203,10 @@ packages: dev: false /hast-util-from-parse5@8.0.1: - resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} + resolution: + { + integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==, + } dependencies: '@types/hast': 3.0.1 '@types/unist': 3.0.0 @@ -4386,19 +5219,28 @@ packages: dev: false /hast-util-is-element@3.0.0: - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + resolution: + { + integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==, + } dependencies: '@types/hast': 3.0.1 dev: false /hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + resolution: + { + integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==, + } dependencies: '@types/hast': 3.0.1 dev: false /hast-util-raw@9.0.1: - resolution: {integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==} + resolution: + { + integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==, + } dependencies: '@types/hast': 3.0.1 '@types/unist': 3.0.0 @@ -4416,7 +5258,10 @@ packages: dev: false /hast-util-to-estree@2.3.3: - resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} + resolution: + { + integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==, + } dependencies: '@types/estree': 1.0.2 '@types/estree-jsx': 1.0.1 @@ -4438,7 +5283,10 @@ packages: dev: false /hast-util-to-parse5@8.0.0: - resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + resolution: + { + integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==, + } dependencies: '@types/hast': 3.0.1 comma-separated-tokens: 2.0.3 @@ -4450,7 +5298,10 @@ packages: dev: false /hast-util-to-text@4.0.0: - resolution: {integrity: sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w==} + resolution: + { + integrity: sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w==, + } dependencies: '@types/hast': 3.0.1 '@types/unist': 3.0.0 @@ -4459,11 +5310,17 @@ packages: dev: false /hast-util-whitespace@2.0.1: - resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + resolution: + { + integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==, + } dev: false /hastscript@8.0.0: - resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} + resolution: + { + integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==, + } dependencies: '@types/hast': 3.0.1 comma-separated-tokens: 2.0.3 @@ -4473,107 +5330,81 @@ packages: dev: false /heap@0.2.7: - resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} + resolution: + { + integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==, + } dev: false - /hook-std@3.0.0: - resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true - - /hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - dependencies: - lru-cache: 6.0.0 - dev: true - - /hosted-git-info@7.0.1: - resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==} - engines: {node: ^16.14.0 || >=18.0.0} - dependencies: - lru-cache: 10.0.1 + resolution: + { + integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, + } dev: true /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + resolution: + { + integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==, + } dev: true /html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + resolution: + { + integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==, + } dev: false - /http-proxy-agent@7.0.0: - resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.0 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /https-proxy-agent@7.0.2: - resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.0 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true - - /human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - dev: true - - /human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} + resolution: + { + integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, + } + engines: { node: '>=10.17.0' } dev: true /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, + } + engines: { node: '>=0.10.0' } dependencies: safer-buffer: 2.1.2 dev: false /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + resolution: + { + integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, + } dev: false /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - dev: true + resolution: + { + integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==, + } + engines: { node: '>= 4' } /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, + } + engines: { node: '>=6' } dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - - /import-from@4.0.0: - resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} - engines: {node: '>=12.2'} - dev: true /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==, + } + engines: { node: '>=8' } hasBin: true dependencies: pkg-dir: 4.2.0 @@ -4581,337 +5412,442 @@ packages: dev: true /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true - - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true - - /indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} - engines: {node: '>=12'} - dev: true + resolution: + { + integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, + } + engines: { node: '>=0.8.19' } /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + resolution: + { + integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, + } dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true + resolution: + { + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, + } /inline-style-parser@0.1.1: - resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + resolution: + { + integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==, + } dev: false /internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==, + } + engines: { node: '>= 0.4' } dependencies: get-intrinsic: 1.2.1 has: 1.0.3 side-channel: 1.0.4 - dev: true /internmap@1.0.1: - resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + resolution: + { + integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==, + } dev: false /internmap@2.0.3: - resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==, + } + engines: { node: '>=12' } dev: false /intersection-observer@0.10.0: - resolution: {integrity: sha512-fn4bQ0Xq8FTej09YC/jqKZwtijpvARlRp6wxL5WTA6yPe2YWSJ5RJh7Nm79rK2qB0wr6iDQzH60XGq5V/7u8YQ==} + resolution: + { + integrity: sha512-fn4bQ0Xq8FTej09YC/jqKZwtijpvARlRp6wxL5WTA6yPe2YWSJ5RJh7Nm79rK2qB0wr6iDQzH60XGq5V/7u8YQ==, + } dev: false /intersection-observer@0.12.2: - resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} + resolution: + { + integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==, + } dev: false - /into-stream@7.0.0: - resolution: {integrity: sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==} - engines: {node: '>=12'} - dependencies: - from2: 2.3.0 - p-is-promise: 3.0.0 - dev: true - /is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + resolution: + { + integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==, + } dev: false /is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + resolution: + { + integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==, + } dependencies: is-alphabetical: 2.0.1 is-decimal: 2.0.1 dev: false /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + resolution: + { + integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==, + } dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-typed-array: 1.1.12 - dev: true /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + resolution: + { + integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, + } dev: true + /is-async-function@2.0.0: + resolution: + { + integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==, + } + engines: { node: '>= 0.4' } + dependencies: + has-tostringtag: 1.0.0 + /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + resolution: + { + integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, + } dependencies: has-bigints: 1.0.2 - dev: true /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, + } + engines: { node: '>=8' } dependencies: binary-extensions: 2.2.0 dev: true /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, + } + engines: { node: '>= 0.4' } dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true /is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==, + } + engines: { node: '>=4' } dev: false /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + resolution: + { + integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, + } + engines: { node: '>= 0.4' } /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + resolution: + { + integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==, + } dependencies: has: 1.0.3 - dev: true /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, + } + engines: { node: '>= 0.4' } dependencies: has-tostringtag: 1.0.0 - dev: true /is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + resolution: + { + integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==, + } dev: false /is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==, + } + engines: { node: '>=0.10.0' } dev: false /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + } + engines: { node: '>=0.10.0' } + + /is-finalizationregistry@1.0.2: + resolution: + { + integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==, + } + dependencies: + call-bind: 1.0.2 /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, + } + engines: { node: '>=8' } dev: true /is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==, + } + engines: { node: '>=6' } dev: true + /is-generator-function@1.0.10: + resolution: + { + integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==, + } + engines: { node: '>= 0.4' } + dependencies: + has-tostringtag: 1.0.0 + /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + } + engines: { node: '>=0.10.0' } dependencies: is-extglob: 2.1.1 - dev: true /is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + resolution: + { + integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==, + } dev: false + /is-map@2.0.2: + resolution: + { + integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==, + } + /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true + resolution: + { + integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==, + } + engines: { node: '>= 0.4' } /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==, + } + engines: { node: '>= 0.4' } dependencies: has-tostringtag: 1.0.0 - dev: true /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - dev: true + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + } + engines: { node: '>=0.12.0' } /is-obj@3.0.0: - resolution: {integrity: sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==, + } + engines: { node: '>=12' } dev: false /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true - - /is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - dev: true + resolution: + { + integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==, + } + engines: { node: '>=8' } /is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==, + } + engines: { node: '>=10' } dev: false /is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==, + } + engines: { node: '>=12' } dev: false - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: true - /is-reference@3.0.2: - resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} + resolution: + { + integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==, + } dependencies: '@types/estree': 1.0.2 dev: false /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, + } + engines: { node: '>= 0.4' } dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true + + /is-set@2.0.2: + resolution: + { + integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==, + } /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + resolution: + { + integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==, + } dependencies: call-bind: 1.0.2 - dev: true /is-ssh@1.4.0: - resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} + resolution: + { + integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==, + } dependencies: protocols: 2.0.1 dev: false /is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==, + } + engines: { node: '>=0.10.0' } dev: false /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true - - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, + } + engines: { node: '>=8' } dev: true /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, + } + 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'} + resolution: + { + integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, + } + engines: { node: '>= 0.4' } dependencies: has-symbols: 1.0.3 - dev: true - - /is-text-path@2.0.0: - resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} - engines: {node: '>=8'} - dependencies: - text-extensions: 2.4.0 - dev: true /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==, + } + engines: { node: '>= 0.4' } dependencies: which-typed-array: 1.1.11 - dev: true - /is-unicode-supported@1.3.0: - resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} - engines: {node: '>=12'} - dev: true + /is-weakmap@2.0.1: + resolution: + { + integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==, + } /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + resolution: + { + integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==, + } dependencies: call-bind: 1.0.2 - dev: true - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true + /is-weakset@2.0.2: + resolution: + { + integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==, + } + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + resolution: + { + integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, + } /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - /issue-parser@6.0.0: - resolution: {integrity: sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==} - engines: {node: '>=10.13'} - dependencies: - lodash.capitalize: 4.2.1 - lodash.escaperegexp: 4.1.2 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.uniqby: 4.7.0 - dev: true + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, + } /istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==, + } + engines: { node: '>=8' } dev: true /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==, + } + engines: { node: '>=8' } dependencies: '@babel/core': 7.23.0 '@babel/parser': 7.23.0 @@ -4923,8 +5859,11 @@ packages: dev: true /istanbul-lib-instrument@6.0.0: - resolution: {integrity: sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==, + } + engines: { node: '>=10' } dependencies: '@babel/core': 7.23.0 '@babel/parser': 7.23.0 @@ -4936,8 +5875,11 @@ packages: dev: true /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==, + } + engines: { node: '>=10' } dependencies: istanbul-lib-coverage: 3.2.0 make-dir: 4.0.0 @@ -4945,8 +5887,11 @@ packages: dev: true /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==, + } + engines: { node: '>=10' } dependencies: debug: 4.3.4 istanbul-lib-coverage: 3.2.0 @@ -4956,21 +5901,34 @@ packages: dev: true /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==, + } + engines: { node: '>=8' } dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 dev: true - /java-properties@1.0.2: - resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} - engines: {node: '>= 0.6.0'} - dev: true + /iterator.prototype@1.1.2: + resolution: + { + integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==, + } + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.4 + set-function-name: 2.0.1 /jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: execa: 5.1.1 jest-util: 29.7.0 @@ -4978,14 +5936,17 @@ packages: dev: true /jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.0 + '@types/node': 18.14.6 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -5007,8 +5968,11 @@ packages: dev: true /jest-cli@29.7.0: - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -5023,7 +5987,7 @@ packages: create-jest: 29.7.0 exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.8.0) + jest-config: 29.7.0(@types/node@18.14.6) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -5034,9 +5998,12 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.8.0): - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /jest-config@29.7.0(@types/node@18.14.6): + resolution: + { + integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } peerDependencies: '@types/node': '*' ts-node: '>=9.0.0' @@ -5049,7 +6016,7 @@ packages: '@babel/core': 7.23.0 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.0 + '@types/node': 18.14.6 babel-jest: 29.7.0(@babel/core@7.23.0) chalk: 4.1.2 ci-info: 3.8.0 @@ -5075,8 +6042,11 @@ packages: dev: true /jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: chalk: 4.1.2 diff-sequences: 29.6.3 @@ -5085,15 +6055,21 @@ packages: dev: true /jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: detect-newline: 3.1.0 dev: true /jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 @@ -5103,29 +6079,38 @@ packages: dev: true /jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.0 + '@types/node': 18.14.6 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true /jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dev: true /jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.7 - '@types/node': 20.8.0 + '@types/node': 18.14.6 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -5139,16 +6124,22 @@ packages: dev: true /jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: jest-get-type: 29.6.3 pretty-format: 29.7.0 dev: true /jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: chalk: 4.1.2 jest-diff: 29.7.0 @@ -5157,8 +6148,11 @@ packages: dev: true /jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@babel/code-frame': 7.22.13 '@jest/types': 29.6.3 @@ -5172,17 +6166,23 @@ packages: dev: true /jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/types': 29.6.3 - '@types/node': 20.8.0 + '@types/node': 18.14.6 jest-util: 29.7.0 dev: true /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==, + } + engines: { node: '>=6' } peerDependencies: jest-resolve: '*' peerDependenciesMeta: @@ -5193,13 +6193,19 @@ packages: dev: true /jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dev: true /jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: jest-regex-util: 29.6.3 jest-snapshot: 29.7.0 @@ -5208,8 +6214,11 @@ packages: dev: true /jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 @@ -5223,15 +6232,18 @@ packages: dev: true /jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/console': 29.7.0 '@jest/environment': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.0 + '@types/node': 18.14.6 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -5252,8 +6264,11 @@ packages: dev: true /jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 @@ -5262,7 +6277,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.0 + '@types/node': 18.14.6 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -5282,8 +6297,11 @@ packages: dev: true /jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@babel/core': 7.23.0 '@babel/generator': 7.23.0 @@ -5310,11 +6328,14 @@ packages: dev: true /jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/types': 29.6.3 - '@types/node': 20.8.0 + '@types/node': 18.14.6 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -5322,8 +6343,11 @@ packages: dev: true /jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/types': 29.6.3 camelcase: 6.3.0 @@ -5334,12 +6358,15 @@ packages: dev: true /jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.0 + '@types/node': 18.14.6 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -5348,18 +6375,24 @@ packages: dev: true /jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: - '@types/node': 20.8.0 + '@types/node': 18.14.6 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true /jest@29.7.0: - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -5379,155 +6412,234 @@ packages: dev: true /jiti@1.20.0: - resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} + resolution: + { + integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==, + } hasBin: true dev: true - /joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} - dev: true - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, + } /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + resolution: + { + integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, + } hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + resolution: + { + integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, + } hasBin: true dependencies: argparse: 2.0.1 /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, + } + engines: { node: '>=4' } hasBin: true + dev: true /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + resolution: + { + integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, + } /json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + resolution: + { + integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==, + } dev: true /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true - - /json-parse-even-better-errors@3.0.0: - resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + resolution: + { + integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, + } dev: true /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + resolution: + { + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, + } /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true - - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + resolution: + { + integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, + } + + /json5@1.0.2: + resolution: + { + integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==, + } + hasBin: true + dependencies: + minimist: 1.2.8 dev: true /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, + } + engines: { node: '>=6' } hasBin: true - - /jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} - - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - dependencies: - universalify: 2.0.0 - optionalDependencies: - graceful-fs: 4.2.11 dev: true - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true + /jsonc-parser@3.2.0: + resolution: + { + integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==, + } + + /jsx-ast-utils@3.3.5: + resolution: + { + integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==, + } + engines: { node: '>=4.0' } + dependencies: + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 + object.assign: 4.1.4 + object.values: 1.1.7 /katex@0.16.8: - resolution: {integrity: sha512-ftuDnJbcbOckGY11OO+zg3OofESlbR5DRl2cmN8HeWeeFIV7wTXvAOx8kEjZjobhA+9wh2fbKeO6cdcA9Mnovg==} + resolution: + { + integrity: sha512-ftuDnJbcbOckGY11OO+zg3OofESlbR5DRl2cmN8HeWeeFIV7wTXvAOx8kEjZjobhA+9wh2fbKeO6cdcA9Mnovg==, + } hasBin: true dependencies: commander: 8.3.0 dev: false /keyv@4.5.3: - resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} + resolution: + { + integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==, + } dependencies: json-buffer: 3.0.1 - dev: true /khroma@2.0.0: - resolution: {integrity: sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==} + resolution: + { + integrity: sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==, + } dev: false /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} + 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'} + resolution: + { + integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, + } + engines: { node: '>=6' } dev: true /kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==, + } + engines: { node: '>=6' } dev: false + /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 + /layout-base@1.0.2: - resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + resolution: + { + integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==, + } dev: false /layout-base@2.0.1: - resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} + resolution: + { + integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==, + } dev: false /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, + } + engines: { node: '>=6' } dev: true /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + 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: true /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, + } + engines: { node: '>=10' } dev: true /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true - - /lines-and-columns@2.0.3: - resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, + } dev: true /load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==, + } + engines: { node: '>=4' } dependencies: graceful-fs: 4.2.11 parse-json: 4.0.0 @@ -5535,183 +6647,153 @@ packages: strip-bom: 3.0.0 dev: true - /load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - - /locate-path@2.0.0: - resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} - engines: {node: '>=4'} - dependencies: - p-locate: 2.0.0 - path-exists: 3.0.0 - dev: true - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, + } + engines: { node: '>=8' } dependencies: p-locate: 4.1.0 dev: true /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, + } + engines: { node: '>=10' } dependencies: p-locate: 5.0.0 - dev: true - - /locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - p-locate: 6.0.0 - dev: true /lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - - /lodash.capitalize@4.2.1: - resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} - dev: true - - /lodash.escaperegexp@4.1.2: - resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} - dev: true + resolution: + { + integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==, + } + dev: false /lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + resolution: + { + integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==, + } dev: false - /lodash.ismatch@4.4.0: - resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==} - dev: true - - /lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: true - - /lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - dev: true - /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.uniqby@4.7.0: - resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} - dev: true + resolution: + { + integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, + } /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + resolution: + { + integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, + } + dev: false /longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + resolution: + { + integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==, + } dev: false /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + resolution: + { + integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, + } hasBin: true dependencies: js-tokens: 4.0.0 - /lru-cache@10.0.1: - resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} - engines: {node: 14 || >=16.14} - dev: true - /lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + resolution: + { + integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==, + } dependencies: pseudomap: 1.0.2 yallist: 2.1.2 dev: false /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + resolution: + { + integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, + } dependencies: yallist: 3.1.1 + dev: true /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, + } + engines: { node: '>=10' } dependencies: yallist: 4.0.0 - dev: true /lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + resolution: + { + integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==, + } hasBin: true dev: false /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==, + } + engines: { node: '>=10' } dependencies: semver: 7.5.4 dev: true /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + resolution: + { + integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==, + } dependencies: tmpl: 1.0.5 dev: true - /map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - dev: true - - /map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - dev: true - /markdown-extensions@1.1.1: - resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==, + } + engines: { node: '>=0.10.0' } dev: false /markdown-table@3.0.3: - resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + resolution: + { + integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==, + } dev: false - /marked-terminal@5.2.0(marked@5.1.2): - resolution: {integrity: sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==} - engines: {node: '>=14.13.1 || >=16.0.0'} - peerDependencies: - marked: ^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 - dependencies: - ansi-escapes: 6.2.0 - cardinal: 2.1.1 - chalk: 5.3.0 - cli-table3: 0.6.3 - marked: 5.1.2 - node-emoji: 1.11.0 - supports-hyperlinks: 2.3.0 - dev: true - - /marked@5.1.2: - resolution: {integrity: sha512-ahRPGXJpjMjwSOlBoTMZAK7ATXkli5qCPxZ21TG44rx1KEo44bii4ekgTDQPNRQ4Kh7JMb9Ub1PVk1NxRSsorg==} - engines: {node: '>= 16'} - hasBin: true - dev: true - /match-sorter@6.3.1: - resolution: {integrity: sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==} + resolution: + { + integrity: sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==, + } dependencies: '@babel/runtime': 7.23.1 remove-accents: 0.4.2 dev: false /mdast-util-definitions@5.1.2: - resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} + resolution: + { + integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==, + } dependencies: '@types/mdast': 3.0.13 '@types/unist': 2.0.8 @@ -5719,7 +6801,10 @@ packages: dev: false /mdast-util-find-and-replace@2.2.2: - resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} + resolution: + { + integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==, + } dependencies: '@types/mdast': 3.0.13 escape-string-regexp: 5.0.0 @@ -5728,7 +6813,10 @@ packages: dev: false /mdast-util-from-markdown@1.3.1: - resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + resolution: + { + integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==, + } dependencies: '@types/mdast': 3.0.13 '@types/unist': 2.0.8 @@ -5747,7 +6835,10 @@ packages: dev: false /mdast-util-from-markdown@2.0.0: - resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} + resolution: + { + integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==, + } dependencies: '@types/mdast': 4.0.1 '@types/unist': 3.0.0 @@ -5766,7 +6857,10 @@ packages: dev: false /mdast-util-gfm-autolink-literal@1.0.3: - resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} + resolution: + { + integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==, + } dependencies: '@types/mdast': 3.0.13 ccount: 2.0.1 @@ -5775,7 +6869,10 @@ packages: dev: false /mdast-util-gfm-footnote@1.0.2: - resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} + resolution: + { + integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==, + } dependencies: '@types/mdast': 3.0.13 mdast-util-to-markdown: 1.5.0 @@ -5783,14 +6880,20 @@ packages: dev: false /mdast-util-gfm-strikethrough@1.0.3: - resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} + resolution: + { + integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==, + } dependencies: '@types/mdast': 3.0.13 mdast-util-to-markdown: 1.5.0 dev: false /mdast-util-gfm-table@1.0.7: - resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} + resolution: + { + integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==, + } dependencies: '@types/mdast': 3.0.13 markdown-table: 3.0.3 @@ -5801,14 +6904,20 @@ packages: dev: false /mdast-util-gfm-task-list-item@1.0.2: - resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} + resolution: + { + integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==, + } dependencies: '@types/mdast': 3.0.13 mdast-util-to-markdown: 1.5.0 dev: false /mdast-util-gfm@2.0.2: - resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} + resolution: + { + integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==, + } dependencies: mdast-util-from-markdown: 1.3.1 mdast-util-gfm-autolink-literal: 1.0.3 @@ -5822,7 +6931,10 @@ packages: dev: false /mdast-util-math@3.0.0: - resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} + resolution: + { + integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==, + } dependencies: '@types/hast': 3.0.1 '@types/mdast': 4.0.1 @@ -5836,7 +6948,10 @@ packages: dev: false /mdast-util-mdx-expression@1.3.2: - resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} + resolution: + { + integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==, + } dependencies: '@types/estree-jsx': 1.0.1 '@types/hast': 2.3.6 @@ -5848,7 +6963,10 @@ packages: dev: false /mdast-util-mdx-jsx@2.1.4: - resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} + resolution: + { + integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==, + } dependencies: '@types/estree-jsx': 1.0.1 '@types/hast': 2.3.6 @@ -5867,7 +6985,10 @@ packages: dev: false /mdast-util-mdx@2.0.1: - resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} + resolution: + { + integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==, + } dependencies: mdast-util-from-markdown: 1.3.1 mdast-util-mdx-expression: 1.3.2 @@ -5879,7 +7000,10 @@ packages: dev: false /mdast-util-mdxjs-esm@1.3.1: - resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} + resolution: + { + integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==, + } dependencies: '@types/estree-jsx': 1.0.1 '@types/hast': 2.3.6 @@ -5891,21 +7015,30 @@ packages: dev: false /mdast-util-phrasing@3.0.1: - resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + resolution: + { + integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==, + } dependencies: '@types/mdast': 3.0.13 unist-util-is: 5.2.1 dev: false /mdast-util-phrasing@4.0.0: - resolution: {integrity: sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==} + resolution: + { + integrity: sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==, + } dependencies: '@types/mdast': 4.0.1 unist-util-is: 6.0.0 dev: false /mdast-util-to-hast@12.3.0: - resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} + resolution: + { + integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==, + } dependencies: '@types/hast': 2.3.6 '@types/mdast': 3.0.13 @@ -5918,7 +7051,10 @@ packages: dev: false /mdast-util-to-hast@13.0.2: - resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==} + resolution: + { + integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==, + } dependencies: '@types/hast': 3.0.1 '@types/mdast': 4.0.1 @@ -5931,7 +7067,10 @@ packages: dev: false /mdast-util-to-markdown@1.5.0: - resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + resolution: + { + integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==, + } dependencies: '@types/mdast': 3.0.13 '@types/unist': 2.0.8 @@ -5944,7 +7083,10 @@ packages: dev: false /mdast-util-to-markdown@2.1.0: - resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} + resolution: + { + integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==, + } dependencies: '@types/mdast': 4.0.1 '@types/unist': 3.0.0 @@ -5957,55 +7099,50 @@ packages: dev: false /mdast-util-to-string@3.2.0: - resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + resolution: + { + integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==, + } dependencies: '@types/mdast': 3.0.13 dev: false /mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + resolution: + { + integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==, + } dependencies: '@types/mdast': 4.0.1 dev: false /memorystream@0.3.1: - resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} - engines: {node: '>= 0.10.0'} - dev: true - - /meow@12.1.1: - resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} - engines: {node: '>=16.10'} - dev: true - - /meow@8.1.2: - resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} - engines: {node: '>=10'} - dependencies: - '@types/minimist': 1.2.3 - camelcase-keys: 6.2.2 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 3.0.3 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.18.1 - yargs-parser: 20.2.9 + resolution: + { + integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==, + } + engines: { node: '>= 0.10.0' } dev: true /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + resolution: + { + integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, + } dev: true /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + resolution: + { + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, + } + engines: { node: '>= 8' } /mermaid@10.4.0: - resolution: {integrity: sha512-4QCQLp79lvz7UZxow5HUX7uWTPJOaQBVExduo91tliXC7v78i6kssZOPHxLL+Xs30KU72cpPn3g3imw/xm/gaw==} + resolution: + { + integrity: sha512-4QCQLp79lvz7UZxow5HUX7uWTPJOaQBVExduo91tliXC7v78i6kssZOPHxLL+Xs30KU72cpPn3g3imw/xm/gaw==, + } dependencies: '@braintree/sanitize-url': 6.0.4 '@types/d3-scale': 4.0.5 @@ -6032,7 +7169,10 @@ packages: dev: false /micromark-core-commonmark@1.1.0: - resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + resolution: + { + integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==, + } dependencies: decode-named-character-reference: 1.0.2 micromark-factory-destination: 1.1.0 @@ -6053,7 +7193,10 @@ packages: dev: false /micromark-core-commonmark@2.0.0: - resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} + resolution: + { + integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==, + } dependencies: decode-named-character-reference: 1.0.2 devlop: 1.1.0 @@ -6074,7 +7217,10 @@ packages: dev: false /micromark-extension-gfm-autolink-literal@1.0.5: - resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} + resolution: + { + integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==, + } dependencies: micromark-util-character: 1.2.0 micromark-util-sanitize-uri: 1.2.0 @@ -6083,7 +7229,10 @@ packages: dev: false /micromark-extension-gfm-footnote@1.1.2: - resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} + resolution: + { + integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==, + } dependencies: micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -6096,7 +7245,10 @@ packages: dev: false /micromark-extension-gfm-strikethrough@1.0.7: - resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} + resolution: + { + integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==, + } dependencies: micromark-util-chunked: 1.1.0 micromark-util-classify-character: 1.1.0 @@ -6107,7 +7259,10 @@ packages: dev: false /micromark-extension-gfm-table@1.0.7: - resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} + resolution: + { + integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==, + } dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 @@ -6117,13 +7272,19 @@ packages: dev: false /micromark-extension-gfm-tagfilter@1.0.2: - resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} + resolution: + { + integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==, + } dependencies: micromark-util-types: 1.1.0 dev: false /micromark-extension-gfm-task-list-item@1.0.5: - resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} + resolution: + { + integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==, + } dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 @@ -6133,7 +7294,10 @@ packages: dev: false /micromark-extension-gfm@2.0.3: - resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} + resolution: + { + integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==, + } dependencies: micromark-extension-gfm-autolink-literal: 1.0.5 micromark-extension-gfm-footnote: 1.1.2 @@ -6146,7 +7310,10 @@ packages: dev: false /micromark-extension-math@3.0.0: - resolution: {integrity: sha512-iJ2Q28vBoEovLN5o3GO12CpqorQRYDPT+p4zW50tGwTfJB+iv/VnB6Ini+gqa24K97DwptMBBIvVX6Bjk49oyQ==} + resolution: + { + integrity: sha512-iJ2Q28vBoEovLN5o3GO12CpqorQRYDPT+p4zW50tGwTfJB+iv/VnB6Ini+gqa24K97DwptMBBIvVX6Bjk49oyQ==, + } dependencies: '@types/katex': 0.16.3 devlop: 1.1.0 @@ -6158,7 +7325,10 @@ packages: dev: false /micromark-extension-mdx-expression@1.0.8: - resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} + resolution: + { + integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==, + } dependencies: '@types/estree': 1.0.2 micromark-factory-mdx-expression: 1.0.9 @@ -6171,7 +7341,10 @@ packages: dev: false /micromark-extension-mdx-jsx@1.0.5: - resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} + resolution: + { + integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==, + } dependencies: '@types/acorn': 4.0.6 '@types/estree': 1.0.2 @@ -6186,13 +7359,19 @@ packages: dev: false /micromark-extension-mdx-md@1.0.1: - resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} + resolution: + { + integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==, + } dependencies: micromark-util-types: 1.1.0 dev: false /micromark-extension-mdxjs-esm@1.0.5: - resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} + resolution: + { + integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==, + } dependencies: '@types/estree': 1.0.2 micromark-core-commonmark: 1.1.0 @@ -6206,7 +7385,10 @@ packages: dev: false /micromark-extension-mdxjs@1.0.1: - resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} + resolution: + { + integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==, + } dependencies: acorn: 8.10.0 acorn-jsx: 5.3.2(acorn@8.10.0) @@ -6219,7 +7401,10 @@ packages: dev: false /micromark-factory-destination@1.1.0: - resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + resolution: + { + integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==, + } dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 @@ -6227,7 +7412,10 @@ packages: dev: false /micromark-factory-destination@2.0.0: - resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + resolution: + { + integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==, + } dependencies: micromark-util-character: 2.0.1 micromark-util-symbol: 2.0.0 @@ -6235,7 +7423,10 @@ packages: dev: false /micromark-factory-label@1.1.0: - resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + resolution: + { + integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==, + } dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 @@ -6244,7 +7435,10 @@ packages: dev: false /micromark-factory-label@2.0.0: - resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} + resolution: + { + integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==, + } dependencies: devlop: 1.1.0 micromark-util-character: 2.0.1 @@ -6253,7 +7447,10 @@ packages: dev: false /micromark-factory-mdx-expression@1.0.9: - resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} + resolution: + { + integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==, + } dependencies: '@types/estree': 1.0.2 micromark-util-character: 1.2.0 @@ -6266,21 +7463,30 @@ packages: dev: false /micromark-factory-space@1.1.0: - resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + resolution: + { + integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==, + } dependencies: micromark-util-character: 1.2.0 micromark-util-types: 1.1.0 dev: false /micromark-factory-space@2.0.0: - resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + resolution: + { + integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==, + } dependencies: micromark-util-character: 2.0.1 micromark-util-types: 2.0.0 dev: false /micromark-factory-title@1.1.0: - resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + resolution: + { + integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==, + } dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 @@ -6289,7 +7495,10 @@ packages: dev: false /micromark-factory-title@2.0.0: - resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + resolution: + { + integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==, + } dependencies: micromark-factory-space: 2.0.0 micromark-util-character: 2.0.1 @@ -6298,7 +7507,10 @@ packages: dev: false /micromark-factory-whitespace@1.1.0: - resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + resolution: + { + integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==, + } dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 @@ -6307,7 +7519,10 @@ packages: dev: false /micromark-factory-whitespace@2.0.0: - resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + resolution: + { + integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==, + } dependencies: micromark-factory-space: 2.0.0 micromark-util-character: 2.0.1 @@ -6316,33 +7531,48 @@ packages: dev: false /micromark-util-character@1.2.0: - resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + resolution: + { + integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==, + } dependencies: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 dev: false /micromark-util-character@2.0.1: - resolution: {integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==} + resolution: + { + integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==, + } dependencies: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 dev: false /micromark-util-chunked@1.1.0: - resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + resolution: + { + integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==, + } dependencies: micromark-util-symbol: 1.1.0 dev: false /micromark-util-chunked@2.0.0: - resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + resolution: + { + integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==, + } dependencies: micromark-util-symbol: 2.0.0 dev: false /micromark-util-classify-character@1.1.0: - resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + resolution: + { + integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==, + } dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 @@ -6350,7 +7580,10 @@ packages: dev: false /micromark-util-classify-character@2.0.0: - resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + resolution: + { + integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==, + } dependencies: micromark-util-character: 2.0.1 micromark-util-symbol: 2.0.0 @@ -6358,33 +7591,48 @@ packages: dev: false /micromark-util-combine-extensions@1.1.0: - resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + resolution: + { + integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==, + } dependencies: micromark-util-chunked: 1.1.0 micromark-util-types: 1.1.0 dev: false /micromark-util-combine-extensions@2.0.0: - resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + resolution: + { + integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==, + } dependencies: micromark-util-chunked: 2.0.0 micromark-util-types: 2.0.0 dev: false /micromark-util-decode-numeric-character-reference@1.1.0: - resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + resolution: + { + integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==, + } dependencies: micromark-util-symbol: 1.1.0 dev: false /micromark-util-decode-numeric-character-reference@2.0.0: - resolution: {integrity: sha512-pIgcsGxpHEtTG/rPJRz/HOLSqp5VTuIIjXlPI+6JSDlK2oljApusG6KzpS8AF0ENUMCHlC/IBb5B9xdFiVlm5Q==} + resolution: + { + integrity: sha512-pIgcsGxpHEtTG/rPJRz/HOLSqp5VTuIIjXlPI+6JSDlK2oljApusG6KzpS8AF0ENUMCHlC/IBb5B9xdFiVlm5Q==, + } dependencies: micromark-util-symbol: 2.0.0 dev: false /micromark-util-decode-string@1.1.0: - resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + resolution: + { + integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==, + } dependencies: decode-named-character-reference: 1.0.2 micromark-util-character: 1.2.0 @@ -6393,7 +7641,10 @@ packages: dev: false /micromark-util-decode-string@2.0.0: - resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + resolution: + { + integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==, + } dependencies: decode-named-character-reference: 1.0.2 micromark-util-character: 2.0.1 @@ -6402,15 +7653,24 @@ packages: dev: false /micromark-util-encode@1.1.0: - resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + resolution: + { + integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==, + } dev: false /micromark-util-encode@2.0.0: - resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + resolution: + { + integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==, + } dev: false /micromark-util-events-to-acorn@1.2.3: - resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} + resolution: + { + integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==, + } dependencies: '@types/acorn': 4.0.6 '@types/estree': 1.0.2 @@ -6423,39 +7683,60 @@ packages: dev: false /micromark-util-html-tag-name@1.2.0: - resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + resolution: + { + integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==, + } dev: false /micromark-util-html-tag-name@2.0.0: - resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + resolution: + { + integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==, + } dev: false /micromark-util-normalize-identifier@1.1.0: - resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + resolution: + { + integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==, + } dependencies: micromark-util-symbol: 1.1.0 dev: false /micromark-util-normalize-identifier@2.0.0: - resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + resolution: + { + integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==, + } dependencies: micromark-util-symbol: 2.0.0 dev: false /micromark-util-resolve-all@1.1.0: - resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + resolution: + { + integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==, + } dependencies: micromark-util-types: 1.1.0 dev: false /micromark-util-resolve-all@2.0.0: - resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + resolution: + { + integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==, + } dependencies: micromark-util-types: 2.0.0 dev: false /micromark-util-sanitize-uri@1.2.0: - resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + resolution: + { + integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==, + } dependencies: micromark-util-character: 1.2.0 micromark-util-encode: 1.1.0 @@ -6463,7 +7744,10 @@ packages: dev: false /micromark-util-sanitize-uri@2.0.0: - resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + resolution: + { + integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==, + } dependencies: micromark-util-character: 2.0.1 micromark-util-encode: 2.0.0 @@ -6471,7 +7755,10 @@ packages: dev: false /micromark-util-subtokenize@1.1.0: - resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + resolution: + { + integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==, + } dependencies: micromark-util-chunked: 1.1.0 micromark-util-symbol: 1.1.0 @@ -6480,7 +7767,10 @@ packages: dev: false /micromark-util-subtokenize@2.0.0: - resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==} + resolution: + { + integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==, + } dependencies: devlop: 1.1.0 micromark-util-chunked: 2.0.0 @@ -6489,23 +7779,38 @@ packages: dev: false /micromark-util-symbol@1.1.0: - resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + resolution: + { + integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==, + } dev: false /micromark-util-symbol@2.0.0: - resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + resolution: + { + integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==, + } dev: false /micromark-util-types@1.1.0: - resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + resolution: + { + integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==, + } dev: false /micromark-util-types@2.0.0: - resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + resolution: + { + integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==, + } dev: false /micromark@3.2.0: - resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + resolution: + { + integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==, + } dependencies: '@types/debug': 4.1.9 debug: 4.3.4 @@ -6529,7 +7834,10 @@ packages: dev: false /micromark@4.0.0: - resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + resolution: + { + integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==, + } dependencies: '@types/debug': 4.1.9 debug: 4.3.4 @@ -6553,73 +7861,65 @@ packages: dev: false /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, + } + engines: { node: '>=8.6' } dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + resolution: + { + integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, + } + engines: { node: '>= 0.6' } dev: false - /mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - dev: true - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true - - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true - - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, + } + engines: { node: '>=6' } dev: true /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + resolution: + { + integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, + } dependencies: brace-expansion: 1.1.11 - dev: true - - /minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} - dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 - dev: true /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true - - /modify-values@1.0.1: - resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, + } dev: true /mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==, + } + engines: { node: '>=4' } dev: false /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + resolution: + { + integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, + } /mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + resolution: + { + integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==, + } dependencies: any-promise: 1.3.0 object-assign: 4.1.1 @@ -6627,25 +7927,25 @@ packages: dev: true /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + resolution: + { + integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==, + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } hasBin: true /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true - - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true - - /nerf-dart@1.0.0: - resolution: {integrity: sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==} - dev: true + resolution: + { + integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, + } /next-mdx-remote@4.4.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-1BvyXaIou6xy3XoNF4yaMZUCb6vD2GTAa5ciOa6WoO+gAUTYsb1K4rI/HSC2ogAWLrb/7VSV52skz07vOzmqIQ==} - engines: {node: '>=14', npm: '>=7'} + resolution: + { + integrity: sha512-1BvyXaIou6xy3XoNF4yaMZUCb6vD2GTAa5ciOa6WoO+gAUTYsb1K4rI/HSC2ogAWLrb/7VSV52skz07vOzmqIQ==, + } + engines: { node: '>=14', npm: '>=7' } peerDependencies: react: '>=16.x <=18.x' react-dom: '>=16.x <=18.x' @@ -6661,36 +7961,48 @@ packages: dev: false /next-seo@6.1.0(next@13.5.3)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-iMBpFoJsR5zWhguHJvsoBDxDSmdYTHtnVPB1ij+CD0NReQCP78ZxxbdL9qkKIf4oEuZEqZkrjAQLB0bkII7RYA==} + resolution: + { + integrity: sha512-iMBpFoJsR5zWhguHJvsoBDxDSmdYTHtnVPB1ij+CD0NReQCP78ZxxbdL9qkKIf4oEuZEqZkrjAQLB0bkII7RYA==, + } peerDependencies: next: ^8.1.1-canary.54 || >=9.0.0 react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - next: 13.5.3(@babel/core@7.23.0)(react-dom@18.2.0)(react@18.2.0) + next: 13.5.3(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /next-themes@0.2.1(next@13.5.3)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==} + resolution: + { + integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==, + } peerDependencies: next: '*' react: '*' react-dom: '*' dependencies: - next: 13.5.3(@babel/core@7.23.0)(react-dom@18.2.0)(react@18.2.0) + next: 13.5.3(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false /next-tick@1.1.0: - resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - dev: false - - /next@13.5.3(@babel/core@7.23.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-4Nt4HRLYDW/yRpJ/QR2t1v63UOMS55A38dnWv3UDOWGezuY0ZyFO1ABNbD7mulVzs9qVhgy2+ppjdsANpKP1mg==} - engines: {node: '>=16.14.0'} + resolution: + { + integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==, + } + dev: false + + /next@13.5.3(react-dom@18.2.0)(react@18.2.0): + resolution: + { + integrity: sha512-4Nt4HRLYDW/yRpJ/QR2t1v63UOMS55A38dnWv3UDOWGezuY0ZyFO1ABNbD7mulVzs9qVhgy2+ppjdsANpKP1mg==, + } + engines: { node: '>=16.14.0' } hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 @@ -6710,7 +8022,7 @@ packages: postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.23.0)(react@18.2.0) + styled-jsx: 5.1.1(react@18.2.0) watchpack: 2.4.0 zod: 3.21.4 optionalDependencies: @@ -6729,7 +8041,10 @@ packages: dev: false /nextra-theme-docs@2.13.1(next@13.5.3)(nextra@2.13.1)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-mckNuKa0AmBbRdPCJ/OQ55KZx5MGH8moomMHYB3XVGXQqmXimOq1/2WZQiBdFx9u43KtfEvqZbQE8oGDIrfIsQ==} + resolution: + { + integrity: sha512-mckNuKa0AmBbRdPCJ/OQ55KZx5MGH8moomMHYB3XVGXQqmXimOq1/2WZQiBdFx9u43KtfEvqZbQE8oGDIrfIsQ==, + } peerDependencies: next: '>=9.5.3' nextra: 2.13.1 @@ -6745,7 +8060,7 @@ packages: git-url-parse: 13.1.0 intersection-observer: 0.12.2 match-sorter: 6.3.1 - next: 13.5.3(@babel/core@7.23.0)(react-dom@18.2.0)(react@18.2.0) + next: 13.5.3(react-dom@18.2.0)(react@18.2.0) next-seo: 6.1.0(next@13.5.3)(react-dom@18.2.0)(react@18.2.0) next-themes: 0.2.1(next@13.5.3)(react-dom@18.2.0)(react@18.2.0) nextra: 2.13.1(next@13.5.3)(react-dom@18.2.0)(react@18.2.0) @@ -6756,8 +8071,11 @@ packages: dev: false /nextra@2.13.1(next@13.5.3)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-FbHwI5EFkbvEWJZ2/ghyPmqd1AmW8f7qVZbF1ApcuvyW1r/Y9FdLLUJZtlUp8DvREgmSF53K2jX9tVPEfmLNIQ==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-FbHwI5EFkbvEWJZ2/ghyPmqd1AmW8f7qVZbF1ApcuvyW1r/Y9FdLLUJZtlUp8DvREgmSF53K2jX9tVPEfmLNIQ==, + } + engines: { node: '>=16' } peerDependencies: next: '>=9.5.3' react: '>=16.13.1' @@ -6775,7 +8093,7 @@ packages: gray-matter: 4.0.3 katex: 0.16.8 lodash.get: 4.4.2 - next: 13.5.3(@babel/core@7.23.0)(react-dom@18.2.0)(react@18.2.0) + next: 13.5.3(react-dom@18.2.0)(react@18.2.0) next-mdx-remote: 4.4.1(react-dom@18.2.0)(react@18.2.0) p-limit: 3.1.0 react: 18.2.0 @@ -6797,28 +8115,38 @@ packages: dev: false /nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - dev: true - - /node-emoji@1.11.0: - resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} - dependencies: - lodash: 4.17.21 + resolution: + { + integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==, + } dev: true /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + resolution: + { + integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==, + } dev: true /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + resolution: + { + integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==, + } + dev: true /non-layered-tidy-tree-layout@2.0.2: - resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==} + resolution: + { + integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==, + } dev: false /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + resolution: + { + integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==, + } dependencies: hosted-git-info: 2.8.9 resolve: 1.22.6 @@ -6826,39 +8154,20 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-package-data@3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} - dependencies: - hosted-git-info: 4.1.0 - is-core-module: 2.13.0 - semver: 7.5.4 - validate-npm-package-license: 3.0.4 - dev: true - - /normalize-package-data@6.0.0: - resolution: {integrity: sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==} - engines: {node: ^16.14.0 || >=18.0.0} - dependencies: - hosted-git-info: 7.0.1 - is-core-module: 2.13.0 - semver: 7.5.4 - validate-npm-package-license: 3.0.4 - dev: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - - /normalize-url@8.0.0: - resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} - engines: {node: '>=14.16'} + resolution: + { + integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, + } + engines: { node: '>=0.10.0' } dev: true /npm-run-all@4.1.5: - resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==, + } + engines: { node: '>= 4' } hasBin: true dependencies: ansi-styles: 3.2.1 @@ -6873,158 +8182,151 @@ packages: dev: true /npm-run-path@2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==, + } + engines: { node: '>=4' } dependencies: path-key: 2.0.1 dev: false /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, + } + engines: { node: '>=8' } dependencies: path-key: 3.1.1 dev: true - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - path-key: 4.0.0 - dev: true - /npm-to-yarn@2.1.0: - resolution: {integrity: sha512-2C1IgJLdJngq1bSER7K7CGFszRr9s2rijEwvENPEgI0eK9xlD3tNwDc0UJnRj7FIT2aydWm72jB88uVswAhXHA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-2C1IgJLdJngq1bSER7K7CGFszRr9s2rijEwvENPEgI0eK9xlD3tNwDc0UJnRj7FIT2aydWm72jB88uVswAhXHA==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } dev: false - /npm@9.8.1: - resolution: {integrity: sha512-AfDvThQzsIXhYgk9zhbk5R+lh811lKkLAeQMMhSypf1BM7zUafeIIBzMzespeuVEJ0+LvY36oRQYf7IKLzU3rw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true - dev: true - bundledDependencies: - - '@isaacs/string-locale-compare' - - '@npmcli/arborist' - - '@npmcli/config' - - '@npmcli/fs' - - '@npmcli/map-workspaces' - - '@npmcli/package-json' - - '@npmcli/promise-spawn' - - '@npmcli/run-script' - - abbrev - - archy - - cacache - - chalk - - ci-info - - cli-columns - - cli-table3 - - columnify - - fastest-levenshtein - - fs-minipass - - glob - - graceful-fs - - hosted-git-info - - ini - - init-package-json - - is-cidr - - json-parse-even-better-errors - - libnpmaccess - - libnpmdiff - - libnpmexec - - libnpmfund - - libnpmhook - - libnpmorg - - libnpmpack - - libnpmpublish - - libnpmsearch - - libnpmteam - - libnpmversion - - make-fetch-happen - - minimatch - - minipass - - minipass-pipeline - - ms - - node-gyp - - nopt - - npm-audit-report - - npm-install-checks - - npm-package-arg - - npm-pick-manifest - - npm-profile - - npm-registry-fetch - - npm-user-validate - - npmlog - - p-map - - pacote - - parse-conflict-json - - proc-log - - qrcode-terminal - - read - - semver - - sigstore - - ssri - - supports-color - - tar - - text-table - - tiny-relative-date - - treeverse - - validate-npm-package-name - - which - - write-file-atomic - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true + resolution: + { + integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, + } + engines: { node: '>=0.10.0' } /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==, + } + engines: { node: '>= 6' } dev: true /object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - dev: true + resolution: + { + integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==, + } /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + resolution: + { + integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, + } + engines: { node: '>= 0.4' } /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==, + } + engines: { node: '>= 0.4' } dependencies: call-bind: 1.0.2 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 + + /object.entries@1.1.7: + resolution: + { + integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==, + } + engines: { node: '>= 0.4' } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + + /object.fromentries@2.0.7: + resolution: + { + integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==, + } + engines: { node: '>= 0.4' } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + + /object.groupby@1.0.1: + resolution: + { + integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==, + } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + get-intrinsic: 1.2.1 dev: true + /object.hasown@1.1.3: + resolution: + { + integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==, + } + dependencies: + define-properties: 1.2.1 + es-abstract: 1.22.2 + + /object.values@1.1.7: + resolution: + { + integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==, + } + engines: { node: '>= 0.4' } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + resolution: + { + integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, + } dependencies: wrappy: 1.0.2 - dev: true /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, + } + engines: { node: '>=6' } dependencies: mimic-fn: 2.1.0 dev: true - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - dependencies: - mimic-fn: 4.0.0 - dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==, + } + engines: { node: '>= 0.8.0' } dependencies: '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 @@ -7032,125 +8334,82 @@ packages: levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true /outvariant@1.4.0: - resolution: {integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==} + resolution: + { + integrity: sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==, + } dev: false - /p-each-series@3.0.0: - resolution: {integrity: sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==} - engines: {node: '>=12'} - dev: true - - /p-filter@3.0.0: - resolution: {integrity: sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - p-map: 5.5.0 - dev: true - /p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==, + } + engines: { node: '>=4' } dev: false - /p-is-promise@3.0.0: - resolution: {integrity: sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==} - engines: {node: '>=8'} - dev: true - - /p-limit@1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} - dependencies: - p-try: 1.0.0 - dev: true - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, + } + engines: { node: '>=6' } dependencies: p-try: 2.2.0 dev: true /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, + } + engines: { node: '>=10' } dependencies: yocto-queue: 0.1.0 - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - yocto-queue: 1.0.0 - dev: true - - /p-locate@2.0.0: - resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} - engines: {node: '>=4'} - dependencies: - p-limit: 1.3.0 - dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, + } + engines: { node: '>=8' } dependencies: p-limit: 2.3.0 dev: true /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, + } + engines: { node: '>=10' } dependencies: p-limit: 3.1.0 - dev: true - - /p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - p-limit: 4.0.0 - dev: true - - /p-map@5.5.0: - resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} - engines: {node: '>=12'} - dependencies: - aggregate-error: 4.0.1 - dev: true - - /p-reduce@2.1.0: - resolution: {integrity: sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==} - engines: {node: '>=8'} - dev: true - - /p-reduce@3.0.0: - resolution: {integrity: sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==} - engines: {node: '>=12'} - dev: true - - /p-try@1.0.0: - resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} - engines: {node: '>=4'} - dev: true /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, + } + engines: { node: '>=6' } dev: true /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, + } + engines: { node: '>=6' } dependencies: callsites: 3.1.0 - dev: true /parse-entities@4.0.1: - resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + resolution: + { + integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==, + } dependencies: '@types/unist': 2.0.8 character-entities: 2.0.2 @@ -7163,16 +8422,22 @@ packages: dev: false /parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==, + } + engines: { node: '>=4' } dependencies: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 dev: true /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, + } + engines: { node: '>=8' } dependencies: '@babel/code-frame': 7.22.13 error-ex: 1.3.2 @@ -7180,91 +8445,96 @@ packages: lines-and-columns: 1.2.4 dev: true - /parse-json@7.1.0: - resolution: {integrity: sha512-ihtdrgbqdONYD156Ap6qTcaGcGdkdAxodO1wLqQ/j7HP1u2sFYppINiq4jyC8F+Nm+4fVufylCV00QmkTHkSUg==} - engines: {node: '>=16'} - dependencies: - '@babel/code-frame': 7.22.13 - error-ex: 1.3.2 - json-parse-even-better-errors: 3.0.0 - lines-and-columns: 2.0.3 - type-fest: 3.13.1 - dev: true - /parse-numeric-range@1.3.0: - resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} + resolution: + { + integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==, + } dev: false /parse-path@7.0.0: - resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==} + resolution: + { + integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==, + } dependencies: protocols: 2.0.1 dev: false /parse-url@8.1.0: - resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} + resolution: + { + integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==, + } dependencies: parse-path: 7.0.0 dev: false /parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + resolution: + { + integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==, + } dependencies: entities: 4.5.0 dev: false - /path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: true - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - - /path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + resolution: + { + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, + } + engines: { node: '>=8' } /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + resolution: + { + integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, + } + engines: { node: '>=0.10.0' } /path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==, + } + engines: { node: '>=4' } /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true - - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: true + resolution: + { + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, + } + engines: { node: '>=8' } /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + resolution: + { + integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, + } /path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==, + } + engines: { node: '>=4' } dependencies: pify: 3.0.0 dev: true /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + resolution: + { + integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, + } + engines: { node: '>=8' } /periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} + resolution: + { + integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==, + } dependencies: '@types/estree': 1.0.2 estree-walker: 3.0.3 @@ -7272,52 +8542,67 @@ packages: dev: false /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + resolution: + { + integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, + } /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + resolution: + { + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, + } + engines: { node: '>=8.6' } /pidtree@0.3.1: - resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==, + } + engines: { node: '>=0.10' } hasBin: true dev: true /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==, + } + engines: { node: '>=0.10.0' } dev: true /pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==, + } + engines: { node: '>=4' } dev: true /pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} - engines: {node: '>= 6'} - dev: true - - /pkg-conf@2.1.0: - resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} - engines: {node: '>=4'} - dependencies: - find-up: 2.1.0 - load-json-file: 4.0.0 + resolution: + { + integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==, + } + engines: { node: '>= 6' } dev: true /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, + } + engines: { node: '>=8' } dependencies: find-up: 4.1.0 dev: true /postcss-import@15.1.0(postcss@8.4.31): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==, + } + engines: { node: '>=14.0.0' } peerDependencies: postcss: ^8.0.0 dependencies: @@ -7328,8 +8613,11 @@ packages: dev: true /postcss-js@4.0.1(postcss@8.4.31): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} + resolution: + { + integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==, + } + engines: { node: ^12 || ^14 || >= 16 } peerDependencies: postcss: ^8.4.21 dependencies: @@ -7338,8 +8626,11 @@ packages: dev: true /postcss-load-config@4.0.1(postcss@8.4.31): - resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==, + } + engines: { node: '>= 14' } peerDependencies: postcss: '>=8.0.9' ts-node: '>=9.0.0' @@ -7355,8 +8646,11 @@ packages: dev: true /postcss-nested@6.0.1(postcss@8.4.31): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} + resolution: + { + integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==, + } + engines: { node: '>=12.0' } peerDependencies: postcss: ^8.2.14 dependencies: @@ -7365,20 +8659,29 @@ packages: dev: true /postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==, + } + engines: { node: '>=4' } dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 dev: true /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + resolution: + { + integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, + } dev: true /postcss@8.4.14: - resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { + integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==, + } + engines: { node: ^10 || ^12 || >=14 } dependencies: nanoid: 3.3.6 picocolors: 1.0.0 @@ -7386,8 +8689,11 @@ packages: dev: false /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} + resolution: + { + integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==, + } + engines: { node: ^10 || ^12 || >=14 } dependencies: nanoid: 3.3.6 picocolors: 1.0.0 @@ -7395,89 +8701,108 @@ packages: dev: true /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + resolution: + { + integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, + } + engines: { node: '>= 0.8.0' } /prettier@3.0.3: - resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==, + } + engines: { node: '>=14' } hasBin: true - dev: true /pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + resolution: + { + integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.2.0 dev: true - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==, + } + engines: { node: '>= 6' } dependencies: kleur: 3.0.3 sisteransi: 1.0.5 dev: true + /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 + /property-information@6.3.0: - resolution: {integrity: sha512-gVNZ74nqhRMiIUYWGQdosYetaKc83x8oT41a0LlV3AAFCAZwCpg4vmGkq8t34+cUhp3cnM4XDiU/7xlgK7HGrg==} + resolution: + { + integrity: sha512-gVNZ74nqhRMiIUYWGQdosYetaKc83x8oT41a0LlV3AAFCAZwCpg4vmGkq8t34+cUhp3cnM4XDiU/7xlgK7HGrg==, + } dev: false - /proto-list@1.2.4: - resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} - dev: true - /protocols@2.0.1: - resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} + resolution: + { + integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==, + } dev: false /pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + resolution: + { + integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==, + } dev: false /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} - engines: {node: '>=6'} - dev: true + resolution: + { + integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==, + } + engines: { node: '>=6' } /pure-rand@6.0.4: - resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} + resolution: + { + integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==, + } dev: true /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - - /quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - dev: true - - /rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - dev: true + resolution: + { + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, + } /react-devtools-inline@4.4.0: - resolution: {integrity: sha512-ES0GolSrKO8wsKbsEkVeiR/ZAaHQTY4zDh1UW8DImVmm8oaGLl3ijJDvSGe+qDRKPZdPRnDtWWnSvvrgxXdThQ==} + resolution: + { + integrity: sha512-ES0GolSrKO8wsKbsEkVeiR/ZAaHQTY4zDh1UW8DImVmm8oaGLl3ijJDvSGe+qDRKPZdPRnDtWWnSvvrgxXdThQ==, + } dependencies: es6-symbol: 3.1.3 dev: false /react-dom@18.2.0(react@18.2.0): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + resolution: + { + integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==, + } peerDependencies: react: ^18.2.0 dependencies: @@ -7485,132 +8810,109 @@ packages: react: 18.2.0 scheduler: 0.23.0 + /react-is@16.13.1: + resolution: + { + integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, + } + /react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + resolution: + { + integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==, + } dev: false /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true - - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - - /read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - dependencies: - pify: 2.3.0 - dev: true - - /read-pkg-up@10.1.0: - resolution: {integrity: sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==} - engines: {node: '>=16'} - dependencies: - find-up: 6.3.0 - read-pkg: 8.1.0 - type-fest: 4.3.3 - dev: true - - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - dev: true - - /read-pkg@3.0.0: - resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} - engines: {node: '>=4'} - dependencies: - load-json-file: 4.0.0 - normalize-package-data: 2.5.0 - path-type: 3.0.0 + resolution: + { + integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==, + } dev: true - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} + /react@18.2.0: + resolution: + { + integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==, + } + engines: { node: '>=0.10.0' } dependencies: - '@types/normalize-package-data': 2.4.2 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - dev: true + loose-envify: 1.4.0 - /read-pkg@8.1.0: - resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==} - engines: {node: '>=16'} + /read-cache@1.0.0: + resolution: + { + integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==, + } dependencies: - '@types/normalize-package-data': 2.4.2 - normalize-package-data: 6.0.0 - parse-json: 7.1.0 - type-fest: 4.3.3 + pify: 2.3.0 dev: true - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + /read-pkg@3.0.0: + resolution: + { + integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==, + } + engines: { node: '>=4' } 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 + load-json-file: 4.0.0 + normalize-package-data: 2.5.0 + path-type: 3.0.0 dev: true /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + resolution: + { + integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, + } + engines: { node: '>=8.10.0' } dependencies: picomatch: 2.3.1 dev: true /reading-time@1.5.0: - resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==} + resolution: + { + integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==, + } dev: false - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - dev: true - - /redeyed@2.1.1: - resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} + /reflect.getprototypeof@1.0.4: + resolution: + { + integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==, + } + engines: { node: '>= 0.4' } dependencies: - esprima: 4.0.1 - dev: true + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + get-intrinsic: 1.2.1 + globalthis: 1.0.3 + which-builtin-type: 1.1.3 /regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} - dev: false + resolution: + { + integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==, + } /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==, + } + engines: { node: '>= 0.4' } dependencies: call-bind: 1.0.2 define-properties: 1.2.1 set-function-name: 2.0.1 - dev: true - - /registry-auth-token@5.0.2: - resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} - engines: {node: '>=14'} - dependencies: - '@pnpm/npm-conf': 2.2.2 - dev: true /rehype-katex@7.0.0: - resolution: {integrity: sha512-h8FPkGE00r2XKU+/acgqwWUlyzve1IiOKwsEkg4pDL3k48PiE0Pt+/uLtVHDVkN1yA4iurZN6UES8ivHVEQV6Q==} + resolution: + { + integrity: sha512-h8FPkGE00r2XKU+/acgqwWUlyzve1IiOKwsEkg4pDL3k48PiE0Pt+/uLtVHDVkN1yA4iurZN6UES8ivHVEQV6Q==, + } dependencies: '@types/hast': 3.0.1 '@types/katex': 0.16.3 @@ -7622,8 +8924,11 @@ packages: dev: false /rehype-pretty-code@0.9.11(shiki@0.14.4): - resolution: {integrity: sha512-Eq90eCYXQJISktfRZ8PPtwc5SUyH6fJcxS8XOMnHPUQZBtC6RYo67gGlley9X2nR8vlniPj0/7oCDEYHKQa/oA==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-Eq90eCYXQJISktfRZ8PPtwc5SUyH6fJcxS8XOMnHPUQZBtC6RYo67gGlley9X2nR8vlniPj0/7oCDEYHKQa/oA==, + } + engines: { node: '>=16' } peerDependencies: shiki: '*' dependencies: @@ -7634,7 +8939,10 @@ packages: dev: false /rehype-raw@7.0.0: - resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + resolution: + { + integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==, + } dependencies: '@types/hast': 3.0.1 hast-util-raw: 9.0.1 @@ -7642,7 +8950,10 @@ packages: dev: false /remark-gfm@3.0.1: - resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} + resolution: + { + integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==, + } dependencies: '@types/mdast': 3.0.13 mdast-util-gfm: 2.0.2 @@ -7653,7 +8964,10 @@ packages: dev: false /remark-math@6.0.0: - resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} + resolution: + { + integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==, + } dependencies: '@types/mdast': 4.0.1 mdast-util-math: 3.0.0 @@ -7664,7 +8978,10 @@ packages: dev: false /remark-mdx@2.3.0: - resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} + resolution: + { + integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==, + } dependencies: mdast-util-mdx: 2.0.1 micromark-extension-mdxjs: 1.0.1 @@ -7673,7 +8990,10 @@ packages: dev: false /remark-parse@10.0.2: - resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + resolution: + { + integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==, + } dependencies: '@types/mdast': 3.0.13 mdast-util-from-markdown: 1.3.1 @@ -7683,7 +9003,10 @@ packages: dev: false /remark-reading-time@2.0.1: - resolution: {integrity: sha512-fy4BKy9SRhtYbEHvp6AItbRTnrhiDGbqLQTSYVbQPGuRCncU1ubSsh9p/W5QZSxtYcUXv8KGL0xBgPLyNJA1xw==} + resolution: + { + integrity: sha512-fy4BKy9SRhtYbEHvp6AItbRTnrhiDGbqLQTSYVbQPGuRCncU1ubSsh9p/W5QZSxtYcUXv8KGL0xBgPLyNJA1xw==, + } dependencies: estree-util-is-identifier-name: 2.1.0 estree-util-value-to-estree: 1.3.0 @@ -7692,7 +9015,10 @@ packages: dev: false /remark-rehype@10.1.0: - resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + resolution: + { + integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==, + } dependencies: '@types/hast': 2.3.6 '@types/mdast': 3.0.13 @@ -7701,38 +9027,65 @@ packages: dev: false /remove-accents@0.4.2: - resolution: {integrity: sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==} + resolution: + { + integrity: sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==, + } dev: false /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, + } + engines: { node: '>=0.10.0' } dev: true /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==, + } + engines: { node: '>=8' } dependencies: resolve-from: 5.0.0 dev: true /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + resolution: + { + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, + } + engines: { node: '>=4' } /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, + } + engines: { node: '>=8' } + dev: true + + /resolve-pkg-maps@1.0.0: + resolution: + { + integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, + } dev: true /resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==, + } + engines: { node: '>=10' } dev: true /resolve@1.22.6: - resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} + resolution: + { + integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==, + } hasBin: true dependencies: is-core-module: 2.13.0 @@ -7740,196 +9093,202 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true + /resolve@2.0.0-next.4: + resolution: + { + integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==, + } + hasBin: true + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + resolution: + { + integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==, + } + engines: { iojs: '>=1.0.0', node: '>=0.10.0' } /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + resolution: + { + integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, + } hasBin: true dependencies: glob: 7.2.3 - dev: true /robust-predicates@3.0.2: - resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} + resolution: + { + integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==, + } dev: false - /rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: true - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + resolution: + { + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, + } dependencies: queue-microtask: 1.2.3 - dev: true /rw@1.3.3: - resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + resolution: + { + integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==, + } dev: false /sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==, + } + engines: { node: '>=6' } dependencies: mri: 1.2.0 dev: false /safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} - engines: {node: '>=0.4'} + resolution: + { + integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==, + } + engines: { node: '>=0.4' } dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 has-symbols: 1.0.3 isarray: 2.0.5 - dev: true - - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + resolution: + { + integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==, + } dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-regex: 1.1.4 - dev: true /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + resolution: + { + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, + } dev: false /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + resolution: + { + integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==, + } dependencies: loose-envify: 1.4.0 /scroll-into-view-if-needed@3.1.0: - resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==} + resolution: + { + integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==, + } dependencies: compute-scroll-into-view: 3.1.0 dev: false /section-matter@1.0.0: - resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==, + } + engines: { node: '>=4' } dependencies: extend-shallow: 2.0.1 kind-of: 6.0.3 dev: false - /semantic-release@21.1.2(typescript@5.2.2): - resolution: {integrity: sha512-kz76azHrT8+VEkQjoCBHE06JNQgTgsC4bT8XfCzb7DHcsk9vG3fqeMVik8h5rcWCYi2Fd+M3bwA7BG8Z8cRwtA==} - engines: {node: '>=18'} - hasBin: true - dependencies: - '@semantic-release/commit-analyzer': 10.0.4(semantic-release@21.1.2) - '@semantic-release/error': 4.0.0 - '@semantic-release/github': 9.2.1(semantic-release@21.1.2) - '@semantic-release/npm': 10.0.6(semantic-release@21.1.2) - '@semantic-release/release-notes-generator': 11.0.7(semantic-release@21.1.2) - aggregate-error: 5.0.0 - cosmiconfig: 8.3.6(typescript@5.2.2) - debug: 4.3.4 - env-ci: 9.1.1 - execa: 8.0.1 - figures: 5.0.0 - find-versions: 5.1.0 - get-stream: 6.0.1 - git-log-parser: 1.2.0 - hook-std: 3.0.0 - hosted-git-info: 7.0.1 - lodash-es: 4.17.21 - marked: 5.1.2 - marked-terminal: 5.2.0(marked@5.1.2) - micromatch: 4.0.5 - p-each-series: 3.0.0 - p-reduce: 3.0.0 - read-pkg-up: 10.1.0 - resolve-from: 5.0.0 - semver: 7.5.4 - semver-diff: 4.0.0 - signale: 1.4.0 - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /semver-diff@4.0.0: - resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} - engines: {node: '>=12'} - dependencies: - semver: 7.5.4 - dev: true - - /semver-regex@4.0.5: - resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} - engines: {node: '>=12'} - dev: true - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + resolution: + { + integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==, + } hasBin: true dev: true /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + resolution: + { + integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, + } hasBin: true /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==, + } + engines: { node: '>=10' } hasBin: true dependencies: lru-cache: 6.0.0 - dev: true /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==, + } + engines: { node: '>= 0.4' } dependencies: define-data-property: 1.1.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.0 - dev: true /shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==, + } + engines: { node: '>=0.10.0' } dependencies: shebang-regex: 1.0.0 /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, + } + engines: { node: '>=8' } dependencies: shebang-regex: 3.0.0 - dev: true /shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==, + } + engines: { node: '>=0.10.0' } /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + resolution: + { + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, + } + engines: { node: '>=8' } /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + resolution: + { + integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==, + } dev: true /shiki@0.14.4: - resolution: {integrity: sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==} + resolution: + { + integrity: sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==, + } dependencies: ansi-sequence-parser: 1.1.1 jsonc-parser: 3.2.0 @@ -7938,137 +9297,140 @@ packages: dev: false /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + resolution: + { + integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==, + } dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 object-inspect: 1.12.3 - dev: true /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true - - /signale@1.4.0: - resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} - engines: {node: '>=6'} - dependencies: - chalk: 2.4.2 - figures: 2.0.0 - pkg-conf: 2.1.0 - dev: true + resolution: + { + integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, + } /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + resolution: + { + integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, + } dev: true /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true + resolution: + { + integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, + } + engines: { node: '>=8' } /sort-keys@5.0.0: - resolution: {integrity: sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw==, + } + engines: { node: '>=12' } dependencies: is-plain-obj: 4.1.0 dev: false /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==, + } + engines: { node: '>=0.10.0' } /source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + resolution: + { + integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==, + } dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, + } + engines: { node: '>=0.10.0' } dev: true /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} + 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: true - /space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + resolution: + { + integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==, + } dev: false - /spawn-error-forwarder@1.0.0: - resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} - dev: true - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + resolution: + { + integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==, + } dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.15 dev: true /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + resolution: + { + integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==, + } dev: true /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + resolution: + { + integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==, + } dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.15 dev: true /spdx-license-ids@3.0.15: - resolution: {integrity: sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==} - dev: true - - /split2@1.0.0: - resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} - dependencies: - through2: 2.0.5 - dev: true - - /split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - dev: true - - /split@1.0.1: - resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} - dependencies: - through: 2.3.8 + resolution: + { + integrity: sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==, + } dev: true /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + resolution: + { + integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, + } /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==, + } + engines: { node: '>=10' } dependencies: escape-string-regexp: 2.0.0 dev: true /static-browser-server@1.0.3: - resolution: {integrity: sha512-ZUyfgGDdFRbZGGJQ1YhiM930Yczz5VlbJObrQLlk24+qNHVQx4OlLcYswEUo3bIyNAbQUIUR9Yr5/Hqjzqb4zA==} + resolution: + { + integrity: sha512-ZUyfgGDdFRbZGGJQ1YhiM930Yczz5VlbJObrQLlk24+qNHVQx4OlLcYswEUo3bIyNAbQUIUR9Yr5/Hqjzqb4zA==, + } dependencies: '@open-draft/deferred-promise': 2.2.0 dotenv: 16.3.1 @@ -8076,42 +9438,66 @@ packages: outvariant: 1.4.0 dev: false - /stream-combiner2@1.1.1: - resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} - dependencies: - duplexer2: 0.1.4 - readable-stream: 2.3.8 - dev: true - /streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} + resolution: + { + integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==, + } + engines: { node: '>=10.0.0' } dev: false /strict-event-emitter@0.4.6: - resolution: {integrity: sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==} + resolution: + { + integrity: sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==, + } dev: false /string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==, + } + engines: { node: '>=10' } dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 dev: true /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + 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: true + /string.prototype.matchall@4.0.10: + resolution: + { + integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==, + } + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + regexp.prototype.flags: 1.5.1 + set-function-name: 2.0.1 + side-channel: 1.0.4 + /string.prototype.padend@3.1.5: - resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==, + } + engines: { node: '>= 0.4' } dependencies: call-bind: 1.0.2 define-properties: 1.2.1 @@ -8119,110 +9505,124 @@ packages: dev: true /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==, + } + engines: { node: '>= 0.4' } dependencies: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 - dev: true /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + resolution: + { + integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==, + } dependencies: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 - dev: true /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + resolution: + { + integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==, + } dependencies: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 - dev: true - - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - dependencies: - safe-buffer: 5.1.2 - dev: true /stringify-entities@4.0.3: - resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + resolution: + { + integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==, + } dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 dev: false /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, + } + engines: { node: '>=8' } dependencies: ansi-regex: 5.0.1 - dev: true /strip-bom-string@1.0.0: - resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==, + } + engines: { node: '>=0.10.0' } dev: false /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} + 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'} + resolution: + { + integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==, + } + engines: { node: '>=8' } dev: true /strip-eof@1.0.0: - resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==, + } + engines: { node: '>=0.10.0' } dev: false /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true - - /strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - dev: true - - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - dependencies: - min-indent: 1.0.1 - dev: true - - /strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, + } + engines: { node: '>=6' } dev: true /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + resolution: + { + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, + } + engines: { node: '>=8' } /style-mod@4.1.0: - resolution: {integrity: sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==} + resolution: + { + integrity: sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==, + } dev: false /style-to-object@0.4.2: - resolution: {integrity: sha512-1JGpfPB3lo42ZX8cuPrheZbfQ6kqPPnPHlKMyeRYtfKD+0jG+QsXgXN57O/dvJlzlB2elI6dGmrPnl5VPQFPaA==} + resolution: + { + integrity: sha512-1JGpfPB3lo42ZX8cuPrheZbfQ6kqPPnPHlKMyeRYtfKD+0jG+QsXgXN57O/dvJlzlB2elI6dGmrPnl5VPQFPaA==, + } dependencies: inline-style-parser: 0.1.1 dev: false - /styled-jsx@5.1.1(@babel/core@7.23.0)(react@18.2.0): - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} + /styled-jsx@5.1.1(react@18.2.0): + resolution: + { + integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==, + } + engines: { node: '>= 12.0.0' } peerDependencies: '@babel/core': '*' babel-plugin-macros: '*' @@ -8233,18 +9633,23 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.23.0 client-only: 0.0.1 react: 18.2.0 dev: false /stylis@4.3.0: - resolution: {integrity: sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==} + resolution: + { + integrity: sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==, + } dev: false /sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==, + } + engines: { node: '>=8' } hasBin: true dependencies: '@jridgewell/gen-mapping': 0.3.3 @@ -8257,48 +9662,57 @@ packages: dev: true /supports-color@4.5.0: - resolution: {integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==, + } + engines: { node: '>=4' } dependencies: has-flag: 2.0.0 dev: false /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, + } + engines: { node: '>=4' } dependencies: has-flag: 3.0.0 + dev: true /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, + } + engines: { node: '>=8' } dependencies: has-flag: 4.0.0 - dev: true /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - dependencies: - has-flag: 4.0.0 - dev: true - - /supports-hyperlinks@2.3.0: - resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, + } + engines: { node: '>=10' } 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==} - engines: {node: '>= 0.4'} - dev: true + resolution: + { + integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, + } + engines: { node: '>= 0.4' } /tailwindcss@3.3.3: - resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} - engines: {node: '>=14.0.0'} + resolution: + { + integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==, + } + engines: { node: '>=14.0.0' } hasBin: true dependencies: '@alloc/quick-lru': 5.2.0 @@ -8327,65 +9741,56 @@ packages: - ts-node dev: true - /temp-dir@3.0.0: - resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} - engines: {node: '>=14.16'} - dev: true - - /tempy@3.1.0: - resolution: {integrity: sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==} - engines: {node: '>=14.16'} - dependencies: - is-stream: 3.0.0 - temp-dir: 3.0.0 - type-fest: 2.19.0 - unique-string: 3.0.0 + /tapable@2.2.1: + resolution: + { + integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==, + } + engines: { node: '>=6' } dev: true /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + 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: true - /text-extensions@2.4.0: - resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} - engines: {node: '>=8'} - dev: true - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + resolution: + { + integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, + } /thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + resolution: + { + integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==, + } + engines: { node: '>=0.8' } dependencies: thenify: 3.3.1 dev: true /thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + resolution: + { + integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==, + } dependencies: any-promise: 1.3.0 dev: true - /through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} - dependencies: - readable-stream: 2.3.8 - xtend: 4.0.2 - dev: true - - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - /title@3.5.3: - resolution: {integrity: sha512-20JyowYglSEeCvZv3EZ0nZ046vLarO37prvV0mbtQV7C8DJPGgN967r8SJkqd3XK3K3lD3/Iyfp3avjfil8Q2Q==} + resolution: + { + integrity: sha512-20JyowYglSEeCvZv3EZ0nZ046vLarO37prvV0mbtQV7C8DJPGgN967r8SJkqd3XK3K3lD3/Iyfp3avjfil8Q2Q==, + } hasBin: true dependencies: arg: 1.0.0 @@ -8395,239 +9800,220 @@ packages: dev: false /titleize@1.0.0: - resolution: {integrity: sha512-TARUb7z1pGvlLxgPk++7wJ6aycXF3GJ0sNSBTAsTuJrQG5QuZlkUQP+zl+nbjAh4gMX9yDw9ZYklMd7vAfJKEw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-TARUb7z1pGvlLxgPk++7wJ6aycXF3GJ0sNSBTAsTuJrQG5QuZlkUQP+zl+nbjAh4gMX9yDw9ZYklMd7vAfJKEw==, + } + engines: { node: '>=0.10.0' } dev: false /tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + resolution: + { + integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==, + } dev: true /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, + } + engines: { node: '>=4' } + dev: true /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, + } + engines: { node: '>=8.0' } dependencies: is-number: 7.0.0 - dev: true - - /tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - dependencies: - punycode: 2.3.0 - dev: true - - /traverse@0.6.7: - resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} - dev: true - - /tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - dev: true /trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + resolution: + { + integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==, + } dev: false - /trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - dev: true - /trough@2.1.0: - resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} + resolution: + { + integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==, + } dev: false /ts-api-utils@1.0.3(typescript@5.2.2): - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} + resolution: + { + integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==, + } + engines: { node: '>=16.13.0' } peerDependencies: typescript: '>=4.2.0' dependencies: typescript: 5.2.2 - dev: true /ts-dedent@2.2.0: - resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} - engines: {node: '>=6.10'} + resolution: + { + integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==, + } + engines: { node: '>=6.10' } dev: false /ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + resolution: + { + integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==, + } dev: true - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false - - /tsup@7.2.0(@swc/core@1.3.90)(typescript@5.2.2): - resolution: {integrity: sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ==} - engines: {node: '>=16.14'} - hasBin: true - peerDependencies: - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.1.0' - peerDependenciesMeta: - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true + /tsconfig-paths@3.14.2: + resolution: + { + integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==, + } dependencies: - '@swc/core': 1.3.90 - bundle-require: 4.0.2(esbuild@0.18.20) - cac: 6.7.14 - chokidar: 3.5.3 - debug: 4.3.4 - esbuild: 0.18.20 - execa: 5.1.1 - globby: 11.1.0 - joycon: 3.1.1 - postcss-load-config: 4.0.1(postcss@8.4.31) - resolve-from: 5.0.0 - rollup: 3.29.4 - source-map: 0.8.0-beta.0 - sucrase: 3.34.0 - tree-kill: 1.2.2 - typescript: 5.2.2 - transitivePeerDependencies: - - supports-color - - ts-node + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 dev: true + /tslib@2.6.2: + resolution: + { + integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==, + } + dev: false + /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.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.18.1: - resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, + } + engines: { node: '>=4' } dev: true /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + resolution: + { + integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, + } + engines: { node: '>=10' } /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true - - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true - - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, + } + engines: { node: '>=10' } dev: true /type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - - /type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - dev: true - - /type-fest@3.13.1: - resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} - engines: {node: '>=14.16'} - dev: true - - /type-fest@4.3.3: - resolution: {integrity: sha512-bxhiFii6BBv6UiSDq7uKTMyADT9unXEl3ydGefndVLxFeB44LRbT4K7OJGDYSyDrKnklCC1Pre68qT2wbUl2Aw==} - engines: {node: '>=16'} - dev: true + resolution: + { + integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==, + } + engines: { node: '>=10' } + dev: false /type@1.2.0: - resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} + resolution: + { + integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==, + } dev: false /type@2.7.2: - resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + resolution: + { + integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==, + } dev: false /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==, + } + engines: { node: '>= 0.4' } dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-typed-array: 1.1.12 - dev: true /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==, + } + engines: { node: '>= 0.4' } dependencies: call-bind: 1.0.2 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - dev: true /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==, + } + engines: { node: '>= 0.4' } dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.2 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - dev: true /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + resolution: + { + integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==, + } dependencies: call-bind: 1.0.2 for-each: 0.3.3 is-typed-array: 1.1.12 - dev: true /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - - /uglify-js@3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} - engines: {node: '>=0.8.0'} + resolution: + { + integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==, + } + engines: { node: '>=14.17' } hasBin: true - requiresBuild: true - dev: true - optional: true /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + 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: true /unified@10.1.2: - resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + resolution: + { + integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==, + } dependencies: '@types/unist': 2.0.8 bail: 2.0.2 @@ -8639,7 +10025,10 @@ packages: dev: false /unified@11.0.3: - resolution: {integrity: sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==} + resolution: + { + integrity: sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==, + } dependencies: '@types/unist': 3.0.0 bail: 2.0.2 @@ -8650,70 +10039,93 @@ packages: vfile: 6.0.1 dev: false - /unique-string@3.0.0: - resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} - engines: {node: '>=12'} - dependencies: - crypto-random-string: 4.0.0 - dev: true - /unist-util-find-after@5.0.0: - resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + resolution: + { + integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==, + } dependencies: '@types/unist': 3.0.0 unist-util-is: 6.0.0 dev: false /unist-util-generated@2.0.1: - resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} + resolution: + { + integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==, + } dev: false /unist-util-is@5.2.1: - resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + resolution: + { + integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==, + } dependencies: '@types/unist': 2.0.8 dev: false /unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + resolution: + { + integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==, + } dependencies: '@types/unist': 3.0.0 dev: false /unist-util-position-from-estree@1.1.2: - resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} + resolution: + { + integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==, + } dependencies: '@types/unist': 2.0.8 dev: false /unist-util-position@4.0.4: - resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} + resolution: + { + integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==, + } dependencies: '@types/unist': 2.0.8 dev: false /unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + resolution: + { + integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==, + } dependencies: '@types/unist': 3.0.0 dev: false /unist-util-remove-position@4.0.2: - resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} + resolution: + { + integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==, + } dependencies: '@types/unist': 2.0.8 unist-util-visit: 4.1.2 dev: false /unist-util-remove-position@5.0.0: - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + resolution: + { + integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==, + } dependencies: '@types/unist': 3.0.0 unist-util-visit: 5.0.0 dev: false /unist-util-remove@4.0.0: - resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==} + resolution: + { + integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==, + } dependencies: '@types/unist': 3.0.0 unist-util-is: 6.0.0 @@ -8721,40 +10133,58 @@ packages: dev: false /unist-util-stringify-position@3.0.3: - resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + resolution: + { + integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==, + } dependencies: '@types/unist': 2.0.8 dev: false /unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + resolution: + { + integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==, + } dependencies: '@types/unist': 3.0.0 dev: false /unist-util-visit-parents@4.1.1: - resolution: {integrity: sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==} + resolution: + { + integrity: sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==, + } dependencies: '@types/unist': 2.0.8 unist-util-is: 5.2.1 dev: false /unist-util-visit-parents@5.1.3: - resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + resolution: + { + integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==, + } dependencies: '@types/unist': 2.0.8 unist-util-is: 5.2.1 dev: false /unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + resolution: + { + integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==, + } dependencies: '@types/unist': 3.0.0 unist-util-is: 6.0.0 dev: false /unist-util-visit@3.1.0: - resolution: {integrity: sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==} + resolution: + { + integrity: sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==, + } dependencies: '@types/unist': 2.0.8 unist-util-is: 5.2.1 @@ -8762,7 +10192,10 @@ packages: dev: false /unist-util-visit@4.1.2: - resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + resolution: + { + integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==, + } dependencies: '@types/unist': 2.0.8 unist-util-is: 5.2.1 @@ -8770,24 +10203,21 @@ packages: dev: false /unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + resolution: + { + integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==, + } dependencies: '@types/unist': 3.0.0 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 dev: false - /universal-user-agent@6.0.0: - resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==} - dev: true - - /universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} - engines: {node: '>= 10.0.0'} - dev: true - /update-browserslist-db@1.0.13(browserslist@4.22.1): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + resolution: + { + integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==, + } hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -8795,20 +10225,21 @@ packages: browserslist: 4.22.1 escalade: 3.1.1 picocolors: 1.0.0 + dev: true /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + resolution: + { + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, + } dependencies: punycode: 2.3.0 - dev: true - - /url-join@5.0.0: - resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true /use-sync-external-store@1.2.0(react@18.2.0): - resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + resolution: + { + integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==, + } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: @@ -8816,17 +10247,26 @@ packages: dev: false /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + resolution: + { + integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, + } dev: true /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + resolution: + { + integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==, + } hasBin: true dev: false /uvu@0.5.6: - resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==, + } + engines: { node: '>=8' } hasBin: true dependencies: dequal: 2.0.3 @@ -8836,8 +10276,11 @@ packages: dev: false /v8-to-istanbul@9.1.0: - resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} - engines: {node: '>=10.12.0'} + resolution: + { + integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==, + } + engines: { node: '>=10.12.0' } dependencies: '@jridgewell/trace-mapping': 0.3.19 '@types/istanbul-lib-coverage': 2.0.4 @@ -8845,21 +10288,30 @@ packages: dev: true /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + resolution: + { + integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==, + } dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 dev: true /vfile-location@5.0.2: - resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} + resolution: + { + integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==, + } dependencies: '@types/unist': 3.0.0 vfile: 6.0.1 dev: false /vfile-matter@3.0.1: - resolution: {integrity: sha512-CAAIDwnh6ZdtrqAuxdElUqQRQDQgbbIrYtDYI8gCjXS1qQ+1XdLoK8FIZWxJwn0/I+BkSSZpar3SOgjemQz4fg==} + resolution: + { + integrity: sha512-CAAIDwnh6ZdtrqAuxdElUqQRQDQgbbIrYtDYI8gCjXS1qQ+1XdLoK8FIZWxJwn0/I+BkSSZpar3SOgjemQz4fg==, + } dependencies: '@types/js-yaml': 4.0.6 is-buffer: 2.0.5 @@ -8867,21 +10319,30 @@ packages: dev: false /vfile-message@3.1.4: - resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + resolution: + { + integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==, + } dependencies: '@types/unist': 2.0.8 unist-util-stringify-position: 3.0.3 dev: false /vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + resolution: + { + integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==, + } dependencies: '@types/unist': 3.0.0 unist-util-stringify-position: 4.0.0 dev: false /vfile@5.3.7: - resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + resolution: + { + integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==, + } dependencies: '@types/unist': 2.0.8 is-buffer: 2.0.5 @@ -8890,7 +10351,10 @@ packages: dev: false /vfile@6.0.1: - resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + resolution: + { + integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==, + } dependencies: '@types/unist': 3.0.0 unist-util-stringify-position: 4.0.0 @@ -8898,97 +10362,148 @@ packages: dev: false /vscode-oniguruma@1.7.0: - resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} + resolution: + { + integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==, + } dev: false /vscode-textmate@8.0.0: - resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} + resolution: + { + integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==, + } dev: false /w3c-keyname@2.2.8: - resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + resolution: + { + integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==, + } dev: false /wait-for-expect@3.0.2: - resolution: {integrity: sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==} + resolution: + { + integrity: sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==, + } dev: true /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + 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==} - engines: {node: '>=10.13.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.11 dev: false /web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + resolution: + { + integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==, + } dev: false /web-worker@1.2.0: - resolution: {integrity: sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==} + resolution: + { + integrity: sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==, + } dev: false - /webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - dev: true - - /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: true - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + 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: true + + /which-builtin-type@1.1.3: + resolution: + { + integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==, + } + engines: { node: '>= 0.4' } + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.0 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.11 + + /which-collection@1.0.1: + resolution: + { + integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==, + } + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 /which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} - engines: {node: '>= 0.4'} + resolution: + { + integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==, + } + engines: { node: '>= 0.4' } dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.2 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - dev: true /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + resolution: + { + integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, + } hasBin: true dependencies: isexe: 2.0.0 /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, + } + engines: { node: '>= 8' } hasBin: true dependencies: isexe: 2.0.0 - dev: true - - /wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - dev: true /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, + } + engines: { node: '>=10' } dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 @@ -8996,56 +10511,72 @@ packages: dev: true /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + resolution: + { + integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, + } /write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + resolution: + { + integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==, + } + engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 dev: true - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: true - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, + } + engines: { node: '>=10' } dev: true /yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + resolution: + { + integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==, + } dev: false /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + resolution: + { + integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, + } + dev: true /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + resolution: + { + integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, + } /yaml@2.3.2: - resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} - engines: {node: '>= 14'} - dev: true - - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==, + } + engines: { node: '>= 14' } dev: true /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, + } + engines: { node: '>=12' } dev: true /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, + } + engines: { node: '>=12' } dependencies: cliui: 8.0.1 escalade: 3.1.1 @@ -9057,21 +10588,29 @@ packages: dev: true /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: true + resolution: + { + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, + } + engines: { node: '>=10' } /zod@3.21.4: - resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} + resolution: + { + integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==, + } dev: false /zod@3.22.2: - resolution: {integrity: sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==} + resolution: + { + integrity: sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==, + } + dev: false /zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + resolution: + { + integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==, + } dev: false diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 5b902a2..6e51a36 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,5 @@ packages: - 'packages/*' - 'examples/*' + - 'config/*' - 'documentation' diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index a7e239b..0000000 --- a/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { createUseTrackSliceHook } from './react'; -export type * from './vanilla'; -export * from './vanilla'; diff --git a/src/react/index.ts b/src/react/index.ts deleted file mode 100644 index 5d39580..0000000 --- a/src/react/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './react'; diff --git a/src/react/react.ts b/src/react/react.ts deleted file mode 100644 index ee2b840..0000000 --- a/src/react/react.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { useDebugValue, useRef, useState } from 'react'; -import useSyncExternalStoreExports from 'use-sync-external-store/shim'; - -import type { Slice } from '../vanilla/slice'; -import type { Store } from '../vanilla/store'; -import type { AnySlice } from '../vanilla/types'; - -const { useSyncExternalStore } = useSyncExternalStoreExports; - -type InferData = T extends Slice ? TData : never; - -interface ReactAdapter { - subscribe: (onStoreChange: () => void) => () => void; - getSnapshot: () => TSnapshot; -} - -export function createUseTrackSliceHook( - store: Store, -) { - function useSlice(sl: TSlice): InferData { - const ref = useRef>(); - - const [adapter] = useState(() => { - const adapter: ReactAdapter> = { - subscribe: (onStoreChange) => { - const sliceEffect = store.effect((effectStore) => { - const selectedData = sl.track(effectStore); - ref.current = selectedData; - - onStoreChange(); - - queueMicrotask(() => { - if (effectStore._runInstance?._addTrackedCount === 0) { - console.warn( - `You forgot to destructure/access the tracked field from ${sl.name}. This will not track any changes!.`, - ); - } - }); - }); - - return () => { - store.unregisterEffect(sliceEffect); - }; - }, - getSnapshot: () => { - return ref.current ?? sl.get(store.state); - }, - }; - - return adapter; - }); - - const data = useSyncExternalStore(adapter.subscribe, adapter.getSnapshot); - - useDebugValue(data); - - return data; - } - - return useSlice; -} diff --git a/src/vanilla/__tests__/action.test.ts b/src/vanilla/__tests__/action.test.ts deleted file mode 100644 index b50dded..0000000 --- a/src/vanilla/__tests__/action.test.ts +++ /dev/null @@ -1,254 +0,0 @@ -import { expectType } from '../types'; -import { slice } from '../slice'; -import { Transaction } from '../transaction'; -import { Action, ActionBuilder } from '../action'; -import { idGeneration } from '../helpers'; -import { StoreState } from '../store-state'; -import { testCleanup } from '../helpers/test-cleanup'; - -afterEach(() => { - testCleanup(); -}); - -describe('action type', () => { - const mySlice = slice([], { - name: 'mySlice', - state: { - a: 1, - }, - }); - - test('setup', () => { - let myAction = mySlice.action((a: number) => { - return mySlice.tx((state) => { - return mySlice.update(state, { a: 3 }); - }); - }); - - expectType<(a: number) => Transaction<'mySlice'>, typeof myAction>( - myAction, - ); - - const txn = myAction(3); - expectType, typeof txn>(txn); - - expect(txn).toMatchInlineSnapshot(` - Transaction { - "destroyed": false, - "metadata": Metadata { - "_metadata": {}, - }, - "opts": {}, - "steps": [ - { - "actionId": "a_[sl_mySlice$]", - "params": [ - 3, - ], - "sourceSliceId": "sl_mySlice$", - "sourceSliceName": "mySlice", - "targetSliceId": "sl_mySlice$", - "targetSliceName": "mySlice", - }, - ], - "txId": "tx_0", - } - `); - }); - - test('action naming', () => { - let myAction1 = mySlice.action(function myActioning(a: number) { - return mySlice.tx((state) => { - return mySlice.update(state, { a: 3 }); - }); - }); - - let myAction2 = mySlice.action((a: number) => { - return mySlice.tx((state) => { - return mySlice.update(state, { a: 3 }); - }); - }); - - expect(myAction1(3).steps[0]!.actionId).toContain( - 'a_myActioning[sl_mySlice', - ); - - expect(myAction2(3).steps[0]!.actionId).toEqual('a_[sl_mySlice$]0'); - }); - - test('same hint', () => { - const sliceJackson = slice([], { - name: 'sliceJackson', - state: { - a: 1, - }, - }); - - let myAction1 = sliceJackson.action(function myActioning(a: number) { - return sliceJackson.tx((state) => { - return sliceJackson.update(state, { a: 3 }); - }); - }); - - let myAction2 = sliceJackson.action(function myActioning(a: number) { - return sliceJackson.tx((state) => { - return sliceJackson.update(state, { a: 3 }); - }); - }); - - expect(myAction1(3).steps[0]?.actionId).toEqual( - 'a_myActioning[sl_sliceJackson$]', - ); - expect(myAction2(3).steps[0]?.actionId).toEqual( - 'a_myActioning[sl_sliceJackson$]0', - ); - }); - - test('types', () => { - let stateBuilder = mySlice.tx((state) => { - return mySlice.update(state, { a: 3 }); - }); - - expectType, typeof stateBuilder>( - stateBuilder, - ); - }); - - test('types when slice has dep', () => { - const mySlice0 = slice([mySlice], { - name: 'mySlice0', - state: { - a: 1, - }, - }); - - const mySlice2 = slice([mySlice, mySlice0], { - name: 'mySlice2', - state: { - a: 1, - }, - }); - - let stateBuilder = mySlice2.tx((state) => { - return mySlice2.update(state, { a: 3 }); - }); - - expectType< - ActionBuilder<'mySlice2', 'mySlice' | 'mySlice0'>, - typeof stateBuilder - >(stateBuilder); - }); -}); - -describe('Action', () => { - let mySlice = slice([], { - name: 'test', - state: { - z: -1, - a: 0, - }, - }); - - test('constructor sets actionId and registers action', () => { - const actionUpdateTo3 = mySlice.action( - ( - a: number, - config: { - opt1: string; - }, - ) => { - return mySlice.tx((state) => { - return mySlice.update(state, { a: 3 }); - }); - }, - ); - - const txn = actionUpdateTo3(4, { opt1: 'hi' }); - expect(txn).toMatchInlineSnapshot(` - Transaction { - "destroyed": false, - "metadata": Metadata { - "_metadata": {}, - }, - "opts": {}, - "steps": [ - { - "actionId": "a_[sl_test$]", - "params": [ - 4, - { - "opt1": "hi", - }, - ], - "sourceSliceId": "sl_test$", - "sourceSliceName": "test", - "targetSliceId": "sl_test$", - "targetSliceName": "test", - }, - ], - "txId": "tx_0", - } - `); - - const storeState = StoreState.create({ slices: [mySlice] }); - - expect(Action._applyStep(storeState, txn.steps[0]!)).toEqual({ - a: 3, - z: -1, - }); - }); - - test('using function for updating state works', () => { - const actionIncrement = mySlice.action( - ( - a: number, - config: { - opt1: string; - }, - ) => { - return mySlice.tx((state) => { - return mySlice.update(state, (existing) => ({ a: existing.a + 1 })); - }); - }, - ); - - const txn = actionIncrement(4, { opt1: 'hi' }); - const storeState = StoreState.create({ slices: [mySlice] }); - - expect(Action._applyStep(storeState, txn.steps[0]!)).toEqual({ - a: 1, - z: -1, - }); - }); - - test('throws error if action id is not found', () => { - const actionIncrement = mySlice.action( - ( - a: number, - config: { - opt1: string; - }, - ) => { - return mySlice.tx((state) => { - return mySlice.update(state, (existing) => ({ a: existing.a + 1 })); - }); - }, - ); - - const txn = actionIncrement(4, { opt1: 'hi' }); - const storeState = StoreState.create({ slices: [mySlice] }); - - expect(() => { - Action._applyStep(storeState, { - actionId: idGeneration.createActionId(mySlice.sliceId), - params: [], - sourceSliceId: mySlice.sliceId, - targetSliceId: mySlice.sliceId, - sourceSliceName: mySlice.name, - targetSliceName: mySlice.name, - }); - }).toThrowErrorMatchingInlineSnapshot( - `"ActionId "a_[sl_test$]0" for Slice "sl_test$" does not exist"`, - ); - }); -}); diff --git a/src/vanilla/__tests__/id_generation.test.ts b/src/vanilla/__tests__/id_generation.test.ts deleted file mode 100644 index a1c5db7..0000000 --- a/src/vanilla/__tests__/id_generation.test.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { idGeneration } from '../helpers/id_generation'; -import { testCleanup } from '../helpers/test-cleanup'; - -beforeEach(() => { - testCleanup(); -}); - -describe('idGeneration.createActionId', () => { - it('should generate unique transaction IDs', () => { - const id1 = idGeneration.createTransactionId(); - const id2 = idGeneration.createTransactionId(); - const id3 = idGeneration.createTransactionId(); - - expect(id1).not.toEqual(id2); - expect(id1).toMatchInlineSnapshot(`"tx_0"`); - expect(id3).toMatchInlineSnapshot(`"tx_2"`); - }); -}); - -describe('idGeneration.createActionId', () => { - it('should generate unique action IDs', () => { - const mySliceId = idGeneration.createSliceId('mySlice'); - - const id1 = idGeneration.createActionId(mySliceId); - - expect(id1).toMatchInlineSnapshot(`"a_[sl_mySlice$]"`); - }); - - it('works with same slice id', () => { - const mySliceId = idGeneration.createSliceId('mySlice'); - - const id1 = idGeneration.createActionId(mySliceId); - const id2 = idGeneration.createActionId(mySliceId); - const id3 = idGeneration.createActionId(mySliceId); - - expect(id1).toMatchInlineSnapshot(`"a_[sl_mySlice$]"`); - expect(id2).toMatchInlineSnapshot(`"a_[sl_mySlice$]0"`); - expect(id3).toMatchInlineSnapshot(`"a_[sl_mySlice$]1"`); - }); - - it('works duplicated slice id', () => { - const mySliceId0 = idGeneration.createSliceId('mySlice'); - const mySliceId1 = idGeneration.createSliceId('mySlice'); - - const id1 = idGeneration.createActionId(mySliceId1); - const id2 = idGeneration.createActionId(mySliceId1); - const id3 = idGeneration.createActionId(mySliceId1); - const id0 = idGeneration.createActionId(mySliceId0); - - expect(id0).toMatchInlineSnapshot(`"a_[sl_mySlice$]"`); - expect(id1).toMatchInlineSnapshot(`"a_[sl_mySlice$1]"`); - expect(id2).toMatchInlineSnapshot(`"a_[sl_mySlice$1]0"`); - expect(id3).toMatchInlineSnapshot(`"a_[sl_mySlice$1]1"`); - }); - - it('works with hint', () => { - const mySliceId = idGeneration.createSliceId('mySlice'); - - const id1 = idGeneration.createActionId(mySliceId, 'hint'); - const id2 = idGeneration.createActionId(mySliceId, 'hint'); - - expect(id1).toMatchInlineSnapshot(`"a_hint[sl_mySlice$]"`); - expect(id2).toMatchInlineSnapshot(`"a_hint[sl_mySlice$]0"`); - }); -}); - -describe('idGeneration.createSliceId', () => { - it('should generate unique slice IDs for different names', () => { - const id1 = idGeneration.createSliceId('mySlice'); - const id2 = idGeneration.createSliceId('mySlice2'); - const id3 = idGeneration.createSliceId('mySlice3'); - - expect(id1).not.toEqual(id2); - expect(id1).not.toEqual(id3); - expect(id2).not.toEqual(id3); - expect(id1).toMatchInlineSnapshot(`"sl_mySlice$"`); - expect(id2).toMatchInlineSnapshot(`"sl_mySlice2$"`); - expect(id3).toMatchInlineSnapshot(`"sl_mySlice3$"`); - }); -}); diff --git a/src/vanilla/__tests__/operation.test.ts b/src/vanilla/__tests__/operation.test.ts deleted file mode 100644 index d2d0a9a..0000000 --- a/src/vanilla/__tests__/operation.test.ts +++ /dev/null @@ -1,331 +0,0 @@ -import { slice } from '../slice'; -import { testCleanup } from '../helpers/test-cleanup'; -import { Store } from '../store'; -import waitForExpect from 'wait-for-expect'; -import { cleanup } from '../cleanup'; -import { ref } from '../ref'; -import { DerivativeStore } from '../base-store'; -import { operation } from '../operation'; -import { InferSliceNameFromSlice } from '../types'; - -beforeEach(() => { - testCleanup(); -}); - -const sliceA = slice([], { - name: 'sliceA', - state: { - sliceAField1: 'value:sliceAField1', - sliceAField2: 'value:sliceAField2', - }, -}); - -const sliceB = slice([], { - name: 'sliceB', - state: { sliceBField1: 'value:sliceBField1' }, -}); - -const setup = () => { - const updateSliceAField1 = sliceA.action((sliceAField1: string) => { - let transaction = sliceA.tx((state) => { - return sliceA.update(state, { sliceAField1 }); - }); - - return transaction; - }); - - const updateSliceAField2 = sliceA.action((sliceAField2: string) => { - let transaction = sliceA.tx((state) => { - return sliceA.update(state, { sliceAField2 }); - }); - - return transaction; - }); - - const updateSliceBField1 = sliceB.action((sliceBField1: string) => { - return sliceB.tx((state) => { - return sliceB.update(state, { sliceBField1 }); - }); - }); - - const store = Store.create({ - storeName: 'test', - slices: [sliceA, sliceB], - }); - - return { - store, - sliceA, - sliceB, - updateSliceAField1, - updateSliceAField2, - updateSliceBField1, - }; -}; - -it('creates and executes an operation', async () => { - const { store, updateSliceAField1 } = setup(); - - const called = jest.fn(); - const cleanupCalled = jest.fn(); - const operationTest = store.operation((operationValue: string) => { - return (store) => { - store.dispatch(updateSliceAField1(operationValue)); - called(); - - cleanup(store, () => { - cleanupCalled(operationValue); - }); - }; - }); - - store.dispatch(operationTest('val1')); - - await waitForExpect(() => { - expect(called).toHaveBeenCalledTimes(1); - }); - - // cleanup should only be called when op is called again - expect(cleanupCalled).toHaveBeenCalledTimes(0); - - store.dispatch(operationTest('val2')); - - await waitForExpect(() => { - expect(cleanupCalled).toHaveBeenCalledTimes(1); - }); -}); - -// test('type check operation before dispatching', async () => { -// // should work when both slices are included -// () => { -// const opBuilder = operation< -// | InferSliceNameFromSlice -// | InferSliceNameFromSlice -// >(); - -// const testOperation = opBuilder((val: string) => { -// return (store) => {}; -// }); - -// let myStore = {} as Store< -// | InferSliceNameFromSlice -// | InferSliceNameFromSlice -// | 'some-slice' -// >; -// myStore.dispatch(testOperation('val1')); -// }; - -// // both slices are different -// () => { -// const opBuilder = operation<'wrong-slice'>(); - -// const testOperation = opBuilder((val: string) => { -// return (store) => {}; -// }); - -// let myStore = {} as Store<'some-slice'>; - -// // @ts-expect-error should not work -// myStore.dispatch(testOperation('val1')); -// }; - -// // two slices that are different -// () => { -// const opBuilder = operation<'wrong-slice' | 'slice-a'>(); - -// const testOperation = opBuilder((val: string) => { -// return (store) => {}; -// }); - -// let myStore = {} as Store<'some-slice'>; -// // @ts-expect-error should not work -// myStore.dispatch(testOperation('val1')); -// }; - -// // two slices that are different -// () => { -// const opBuilder = operation<'wrong-slice' | 'slice-a'>(); - -// const testOperation = opBuilder((val: string) => { -// return (store) => {}; -// }); - -// let myStore = {} as Store<'some-slice' | 'some-slice-b'>; -// // @ts-expect-error should not work -// myStore.dispatch(testOperation('val1')); -// }; - -// // two slices that are different -// () => { -// const opBuilder = operation<'slice-b' | 'slice-a'>(); - -// const testOperation = opBuilder((val: string) => { -// return (store) => {}; -// }); - -// let myStore = {} as Store<'slice-f' | 'slice-b' | 'slice-c' | 'slice-a'>; -// myStore.dispatch(testOperation('val1')); -// }; - -// () => { -// const opBuilder = operation< -// 'slice-a' | 'slice-b' | 'slice-c' | 'slice-d' -// >(); - -// const testOperation = opBuilder((val: string) => { -// return (store) => {}; -// }); - -// let myStore = {} as Store<'slice-a' | 'slice-b'>; -// // @ts-expect-error should not work -// myStore.dispatch(testOperation('val1'), { debugInfo: true }); -// }; - -// () => { -// const opBuilder = operation<'slice-a' | 'slice-b'>(); - -// const testOperation = opBuilder((val: string) => { -// return (store) => {}; -// }); - -// let myStore = {} as Store<'slice-a' | 'slice-b' | 'slice-c' | 'slice-d'>; -// myStore.dispatch(testOperation('val1')); -// }; - -// () => { -// const opBuilder = operation<'slice-a' | 'slice-e'>(); - -// const testOperation = opBuilder((val: string) => { -// return (store) => {}; -// }); - -// let myStore = {} as Store<'slice-a' | 'slice-b' | 'slice-c' | 'slice-d'>; -// // @ts-expect-error should not work -// myStore.dispatch(testOperation('val1')); -// }; -// }); - -test('calling same operation multiple times', async () => { - const { store, updateSliceAField1 } = setup(); - - const called = jest.fn(); - const cleanupCalled = jest.fn(); - - const getRef = ref(() => 0); - - let lastRefValue = 0; - const operationTest = store.operation((operationValue: string) => { - return (store) => { - store.dispatch(updateSliceAField1(operationValue)); - called(); - - const myRef = getRef(store); - - myRef.current++; - - lastRefValue = myRef.current; - cleanup(store, () => { - cleanupCalled(operationValue); - }); - }; - }); - - store.dispatch(operationTest('update-value')); - - await waitForExpect(() => { - expect(called).toHaveBeenCalledTimes(1); - }); - - let counter = 0; - for (let i of Array.from({ length: 5 })) { - store.dispatch(operationTest('test' + counter++)); - } - - await waitForExpect(() => { - expect(called).toHaveBeenCalledTimes(6); - }); - - expect(sliceA.get(store.state)).toEqual({ - sliceAField1: 'test4', - sliceAField2: 'value:sliceAField2', - }); - - expect(cleanupCalled).toHaveBeenCalledTimes(5); - expect(cleanupCalled).nthCalledWith(1, 'update-value'); - expect(cleanupCalled).nthCalledWith(2, 'test0'); - expect(cleanupCalled).nthCalledWith(3, 'test1'); - expect(cleanupCalled).nthCalledWith(4, 'test2'); - expect(cleanupCalled).nthCalledWith(5, 'test3'); - expect(lastRefValue).toEqual(6); -}); - -it('creates and executes multiple operations', async () => { - const { - store, - sliceA, - sliceB, - updateSliceAField1, - updateSliceAField2, - updateSliceBField1, - } = setup(); - const operationValue1 = 'newTestValue1'; - const operationValue2 = 'newTestValue2'; - const operationValue3 = 'newTestValue3'; - - const called = jest.fn(); - const getRef = ref(() => 'base'); - - const operationTest1 = store.operation((operationValue: string) => { - return (store) => { - const myRef = getRef(store); - - myRef.current += ':' + operationValue; - store.dispatch(updateSliceAField1(operationValue)); - called(); - }; - }); - - const operationTest2 = store.operation((operationValue: string) => { - return (store) => { - const myRef = getRef(store); - - myRef.current += ':' + operationValue; - store.dispatch(updateSliceAField2(operationValue)); - called(); - }; - }); - - const operationTest3 = store.operation((operationValue: string) => { - return (store) => { - const myRef = getRef(store); - - myRef.current += ':' + operationValue; - store.dispatch(updateSliceBField1(operationValue)); - called(); - }; - }); - - store.dispatch(operationTest1(operationValue1)); - store.dispatch(operationTest2(operationValue2)); - store.dispatch(operationTest3(operationValue3)); - - await waitForExpect(() => { - expect(called).toHaveBeenCalledTimes(3); - }); - - expect(sliceA.get(store.state)).toEqual({ - sliceAField1: 'newTestValue1', - sliceAField2: 'newTestValue2', - }); - expect(sliceB.get(store.state)).toEqual({ - sliceBField1: 'newTestValue3', - }); - - // to get around the abstract class limitation - class MyDerivedStore extends DerivativeStore {} - - const derStore = new MyDerivedStore(store, 'testStore'); - expect(getRef(derStore).current).toEqual( - 'base:newTestValue1:newTestValue2:newTestValue3', - ); -}); diff --git a/src/vanilla/__tests__/shallow-equal.test.ts b/src/vanilla/__tests__/shallow-equal.test.ts deleted file mode 100644 index 50a5225..0000000 --- a/src/vanilla/__tests__/shallow-equal.test.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { shallowEqual } from '../helpers'; - -describe('shallowEqual', () => { - it('returns true for two identical objects', () => { - const objA = { a: 1, b: 2, c: 3 }; - const objB = { a: 1, b: 2, c: 3 }; - expect(shallowEqual(objA, objB)).toBe(true); - }); - - it('returns true for two identical objects with different key orders', () => { - const objA = { a: 1, b: 2, c: 3 }; - const objB = { c: 3, b: 2, a: 1 }; - expect(shallowEqual(objA, objB)).toBe(true); - }); - - it('returns false for two different objects', () => { - const objA = { a: 1, b: 2, c: 3 }; - const objB = { a: 1, b: 2, d: 4 }; - expect(shallowEqual(objA, objB)).toBe(false); - }); - - it('returns false for objects with different lengths', () => { - const objA = { a: 1, b: 2, c: 3 }; - const objB = { a: 1, b: 2 }; - expect(shallowEqual(objA, objB)).toBe(false); - }); - - it('returns true for the same object instance', () => { - const objA = { a: 1, b: 2, c: 3 }; - const objB = objA; - expect(shallowEqual(objA, objB)).toBe(true); - }); - - it('returns true for two empty objects', () => { - const objA = {}; - const objB = {}; - expect(shallowEqual(objA, objB)).toBe(true); - }); - - it('returns true for identical nested objects', () => { - const objA = { a: 1, b: { c: 2 } }; - const objB = { a: 1, b: { c: 2 } }; - expect(shallowEqual(objA, objB)).toBe(false); // the nested objects are not the same instance - }); - - it('returns true for same instances of nested objects', () => { - const nested = { c: 2 }; - const objA = { a: 1, b: nested }; - const objB = { a: 1, b: nested }; - expect(shallowEqual(objA, objB)).toBe(true); // the nested objects are the same instance - }); - - it('returns false for different instances of nested objects', () => { - const objA = { a: 1, b: { c: 2 } }; - const objB = { a: 1, b: { c: 3 } }; - expect(shallowEqual(objA, objB)).toBe(false); // the nested objects are not the same instance - }); - - it('returns true for same instances of nested arrays', () => { - const nested = [1, 2, 3]; - const objA = { a: 1, b: nested }; - const objB = { a: 1, b: nested }; - expect(shallowEqual(objA, objB)).toBe(true); // the nested arrays are the same instance - }); - - it('returns false for different instances of nested arrays', () => { - const objA = { a: 1, b: [1, 2, 3] }; - const objB = { a: 1, b: [1, 2, 3] }; - expect(shallowEqual(objA, objB)).toBe(false); // the nested arrays are not the same instance - }); -}); diff --git a/src/vanilla/__tests__/slice-key.test.ts b/src/vanilla/__tests__/slice-key.test.ts deleted file mode 100644 index 0f94db4..0000000 --- a/src/vanilla/__tests__/slice-key.test.ts +++ /dev/null @@ -1,662 +0,0 @@ -import { IfEquals, expectType } from '../types'; -import { slice, sliceKey } from '../slice'; -import { StoreState, StoreStateKey } from '../store-state'; -import { testCleanup } from '../helpers/test-cleanup'; -import { Transaction } from '../transaction'; -import { shallowEqual } from '../helpers'; -import { - calcSliceDerivedState, - equalityGetValue, - getValue, -} from '../slice/slice-key'; - -beforeEach(() => { - testCleanup(); -}); - -type InferSliceNameFromStoreState> = - TStoreState extends StoreState ? T : never; - -describe('sliceKey', () => { - test('works with single slice', () => { - const mySliceKeyA = sliceKey([], { - name: 'mySliceA', - state: { - a: 1, - }, - }); - - const storeState = StoreState.create({ - slices: [mySliceKeyA.slice({ derivedState: {} })], - }); - - const selectorA = mySliceKeyA.selector((storeState) => { - type SliceName = InferSliceNameFromStoreState; - - () => { - let result: SliceName = {} as any; - result = 'mySliceA'; - // @ts-expect-error not a dep - result = 'mySliceB'; - }; - return { a: mySliceKeyA.get(storeState).a }; - }); - - expect(selectorA(storeState)).toEqual({ a: 1 }); - }); - - describe('works with slice and dep', () => { - const mySliceKeyA = sliceKey([], { - name: 'mySliceA', - state: { - a: 1, - }, - }); - const mySliceA = mySliceKeyA.slice({ derivedState: {} }); - - const mySliceKeyB = sliceKey([], { - name: 'mySliceB', - state: { - a: 1, - }, - }); - - const mySliceB = mySliceKeyB.slice({ derivedState: {} }); - - const mySliceKeyC = sliceKey([mySliceA], { - name: 'mySliceC', - state: { - c: 15, - }, - }); - const mySliceC = mySliceKeyC.slice({ derivedState: {} }); - - const storeState = StoreState.create({ - slices: [ - mySliceKeyA.slice({ derivedState: {} }), - mySliceKeyC.slice({ derivedState: {} }), - ], - }); - - test('types are correct', () => { - const cSelector = mySliceKeyC.selector((storeState) => { - expectType, typeof storeState>( - storeState, - ); - - type SliceName = InferSliceNameFromStoreState; - - () => { - let result: SliceName = {} as any; - expectType<'mySliceA' | 'mySliceC', typeof result>(result); - result = 'mySliceA'; - result = 'mySliceC'; - // @ts-expect-error should fail as mySliceB is not dep of C - result = 'mySliceB'; - }; - () => { - // @ts-expect-error should fail as mySliceB is a dep - mySliceKeyB.get(storeState); - // @ts-expect-error should fail as mySliceB is a dep - mySliceB.get(storeState); - }; - mySliceKeyA.get(storeState); - mySliceKeyC.get(storeState); - mySliceA.get(storeState); - - expect(mySliceA.get(storeState)).toEqual({ a: 1 }); - expect(mySliceKeyA.get(storeState)).toEqual({ a: 1 }); - - expect(mySliceC.get(storeState)).toEqual({ c: 15 }); - expect(mySliceKeyC.get(storeState)).toEqual({ c: 15 }); - - return { - number: mySliceKeyC.get(storeState).c + mySliceA.get(storeState).a, - }; - }); - - expect(cSelector(storeState)).toEqual({ number: 16 }); - }); - }); - - describe('equality', () => { - const mySliceKeyA = sliceKey([], { - name: 'mySliceA', - state: { - a: 1, - }, - }); - - test('returns same instance, when equal is true', () => { - let calledTimes = 0; - const selectorA = mySliceKeyA.selector( - (storeState) => { - calledTimes++; - return { a: mySliceKeyA.get(storeState).a }; - }, - { - equal: (a, b) => { - expectType<{ a: number }, typeof a>(a); - expectType<{ a: number }, typeof b>(b); - return a.a === b.a; - }, - }, - ); - const mySliceA = mySliceKeyA.slice({ derivedState: { selectorA } }); - const mySliceB = slice([], { - name: 'mySliceB', - state: { - b: 1, - }, - }); - - const actionB = mySliceB.action(() => { - return mySliceB.tx((storeState) => - mySliceB.update(storeState, { b: 2 }), - ); - }); - - const storeState = StoreState.create({ - slices: [mySliceB, mySliceA], - }); - - let originalValue = selectorA(storeState); - expect(originalValue).toEqual({ a: 1 }); - - const storeState2 = storeState.applyTransaction(actionB()); - - expect(mySliceB.get(storeState2)).toEqual({ b: 2 }); - - expect(mySliceA.get(storeState2).selectorA).toBe( - mySliceA.get(storeState).selectorA, - ); - - expect(selectorA(storeState2)).toBe(originalValue); - - expect(calledTimes).toBe(2); - }); - - test('separately created stores states, should create new instance', () => { - const storeState = StoreState.create({ - slices: [mySliceKeyA.slice({ derivedState: {} })], - }); - let calledTimes = 0; - const selectorA = mySliceKeyA.selector( - (storeState) => { - calledTimes++; - return { a: mySliceKeyA.get(storeState).a }; - }, - { - equal: (a, b) => { - expectType<{ a: number }, typeof a>(a); - expectType<{ a: number }, typeof b>(b); - return a.a === b.a; - }, - }, - ); - - let originalValue = selectorA(storeState); - expect(originalValue).toEqual({ a: 1 }); - - const storeState2 = StoreState.create({ - slices: [mySliceKeyA.slice({ derivedState: {} })], - }); - - expect(selectorA(storeState2)).toEqual(originalValue); - expect(selectorA(storeState2)).not.toBe(originalValue); - - expect(calledTimes).toBe(2); - }); - - test('equality returns false', () => { - const storeState = StoreState.create({ - slices: [mySliceKeyA.slice({ derivedState: {} })], - }); - let calledTimes = 0; - - const selectorA = mySliceKeyA.selector( - (storeState) => { - calledTimes++; - - return { a: mySliceKeyA.get(storeState).a }; - }, - { - equal: (a, b) => a.a !== b.a, - }, - ); - - expect(selectorA(storeState)).toEqual({ a: 1 }); - - const storeState2 = StoreState.create({ - slices: [mySliceKeyA.slice({ derivedState: {} })], - }); - - expect(selectorA(storeState2)).toEqual(selectorA(storeState)); - expect(selectorA(storeState2)).not.toBe(selectorA(storeState)); - expect(calledTimes).toBe(2); - }); - }); - - test('selector with empty state', () => { - const mySliceKeyA = sliceKey([], { - name: 'mySliceA', - state: {}, - }); - - const selectorA = mySliceKeyA.selector((storeState) => { - return mySliceKeyA.get(storeState); - }); - - const mySliceA = mySliceKeyA.slice({ - derivedState: { - selectorA, - }, - }); - - const storeState = StoreState.create({ - slices: [mySliceA], - }); - - expect(mySliceA.get(storeState).selectorA).toEqual({}); - }); - - describe('slice with multiple dependencies', () => { - const mySliceKeyA = sliceKey([], { - name: 'mySliceA', - state: { a: 2 }, - }); - - let calledTimesA = 0; - let calledTimesB = 0; - let calledTimesC = 0; - - const selectorA = mySliceKeyA.selector( - (storeState) => { - calledTimesA++; - return { selA: mySliceKeyA.get(storeState).a }; - }, - { - equal: (a, b) => { - return shallowEqual(a, b); - }, - }, - ); - - const mySliceA = mySliceKeyA.slice({ derivedState: { selectorA } }); - - const mySliceKeyB = sliceKey([mySliceA], { - name: 'mySliceB', - state: { b: 5 }, - }); - - const selectorB = mySliceKeyB.selector((storeState) => { - calledTimesB++; - return { - selB: mySliceKeyB.get(storeState).b + mySliceA.get(storeState).a, - }; - }); - - const mySliceB = mySliceKeyB.slice({ derivedState: { selectorB } }); - - const mySliceKeyC = sliceKey([mySliceA, mySliceB], { - name: 'mySliceC', - state: { c: 10 }, - }); - - const selectorC = mySliceKeyC.selector((storeState) => { - calledTimesC++; - return { - selCA: mySliceA.get(storeState).a, - selCB: mySliceB.get(storeState).b, - selCSelB: mySliceB.get(storeState).selectorB.selB, - selC: mySliceKeyC.get(storeState).c, - }; - }); - - const mySliceC = mySliceKeyC.slice({ derivedState: { selectorC } }); - - let incrementA: () => Transaction<'mySliceA'>; - let incrementB: () => Transaction<'mySliceB'>; - let incrementC: () => Transaction<'mySliceC'>; - - beforeEach(() => { - calledTimesA = 0; - calledTimesB = 0; - calledTimesC = 0; - incrementA = mySliceA.action(() => { - return mySliceA.tx((storeState) => - mySliceKeyA.update(storeState, (obj) => ({ a: obj.a + 1 })), - ); - }); - - incrementB = mySliceB.action(() => { - return mySliceB.tx((storeState) => - mySliceKeyB.update(storeState, (obj) => ({ b: obj.b + 1 })), - ); - }); - - incrementC = mySliceC.action(() => { - return mySliceC.tx((storeState) => - mySliceC.update(storeState, (obj) => ({ c: obj.c + 1 })), - ); - }); - }); - - test('single A increment', () => { - const storeState = StoreState.create({ - slices: [mySliceA, mySliceB, mySliceC], - }); - const storeState2 = storeState.applyTransaction(incrementA()); - expect({ - sliceA: mySliceA.get(storeState2), - sliceB: mySliceB.get(storeState2), - sliceC: mySliceC.get(storeState2), - }).toEqual({ - sliceA: { - a: 3, - selectorA: { - selA: 3, - }, - }, - sliceB: { - b: 5, - selectorB: { - selB: 8, - }, - }, - sliceC: { - c: 10, - selectorC: { - selC: 10, - selCB: 5, - selCA: 3, - selCSelB: 8, - }, - }, - }); - - // calling again should not call selector - - mySliceA.get(storeState2); - mySliceB.get(storeState2); - mySliceC.get(storeState2); - - expect(calledTimesA).toBe(1); - expect(calledTimesB).toBe(1); - expect(calledTimesC).toBe(1); - }); - - test('increment multiple should only call selector once', () => { - const storeState = StoreState.create({ - slices: [mySliceA, mySliceB, mySliceC], - }); - - const storeState2 = storeState.applyTransaction(incrementA()); - - let sliceAVal = mySliceA.get(storeState2).selectorA; - expect(calledTimesA).toBe(1); - - mySliceB.get(storeState2); - mySliceC.get(storeState2); - - expect(calledTimesA).toBe(1); - - let storeState3 = storeState2.applyTransaction(incrementC()); - - expect(calledTimesA).toBe(1); - - expect(mySliceC.get(storeState3).selectorC).toMatchInlineSnapshot(` - { - "selC": 11, - "selCA": 3, - "selCB": 5, - "selCSelB": 8, - } - `); - }); - }); -}); - -describe('calcDerivedState', () => { - const setup = () => { - // Initialize test data - const mySliceKeyA = sliceKey([], { - name: 'mySliceA', - state: { - foo: 'bar', - }, - }); - - const selectorA = mySliceKeyA.selector((storeState) => { - return mySliceKeyA.get(storeState).foo.toUpperCase(); - }); - - const mySliceA = mySliceKeyA.slice({ - derivedState: { - selectorA, - }, - }); - - const storeState = StoreState.create({ - slices: [mySliceA], - }); - - const derivedEntries: [string, (state: StoreState) => any][] = [ - ['selectorA', selectorA], - ]; - - const prevDerivedValueCache: WeakMap< - StoreStateKey, - Record - > = new WeakMap(); - - return { - prevDerivedValueCache, - derivedEntries, - storeState, - }; - }; - - it('should generate new derived state and set it in the cache if there is no previous derived state', () => { - const { storeState, derivedEntries, prevDerivedValueCache } = setup(); - const derivedState = calcSliceDerivedState( - storeState, - derivedEntries, - prevDerivedValueCache, - ); - - expect(derivedState).toEqual({ - selectorA: 'BAR', - }); - - expect(prevDerivedValueCache.get(storeState._storeStateKey)).toEqual( - derivedState, - ); - }); - - it('should return previous derived state if it is shallowly equal to new derived state', () => { - const { storeState, derivedEntries, prevDerivedValueCache } = setup(); - - const initialDerivedState = { - selectorA: 'BAR', - }; - prevDerivedValueCache.set(storeState._storeStateKey, initialDerivedState); - - const derivedState = calcSliceDerivedState( - storeState, - derivedEntries, - prevDerivedValueCache, - ); - - expect(derivedState).toBe(initialDerivedState); - }); - - it('should generate and return a new derived state if it is not shallowly equal to previous derived state', () => { - const { storeState, derivedEntries, prevDerivedValueCache } = setup(); - - const initialDerivedState = { - selectorA: 'BAR_BAR', - }; - prevDerivedValueCache.set(storeState._storeStateKey, initialDerivedState); - - const derivedState = calcSliceDerivedState( - storeState, - derivedEntries, - prevDerivedValueCache, - ); - - expect(derivedState).not.toBe(initialDerivedState); - expect(derivedState).toEqual({ - selectorA: 'BAR', - }); - expect(prevDerivedValueCache.get(storeState._storeStateKey)).toEqual( - derivedState, - ); - }); -}); - -describe('equalityGetValue/getValue function', () => { - const setup = () => { - // Initialize test data - let mySliceKeyA = sliceKey([], { - name: 'mySliceA', - state: { - foo: 'bar', - }, - }); - - let selectorACalled = { count: 0 }; - let selectorA = mySliceKeyA.selector((storeState: any) => { - selectorACalled.count++; - return mySliceKeyA.get(storeState).foo.toUpperCase(); - }); - - let mySliceA = mySliceKeyA.slice({ - derivedState: { - selectorA, - }, - }); - - let mockStoreState = StoreState.create({ - slices: [mySliceA], - }); - - let actionA = mySliceA.action((val = 'new val') => { - return mySliceA.tx((storeState) => - mySliceA.update(storeState, { foo: val }), - ); - }); - - const valCache: WeakMap, unknown> = new WeakMap(); - const prevValCache: WeakMap = new WeakMap(); - - return { - mockStoreState, - selectorA, - actionA, - mySliceA, - valCache, - prevValCache, - selectorACalled, - }; - }; - - describe('getValue', () => { - test('works', () => { - const { selectorACalled, mockStoreState, actionA, selectorA, valCache } = - setup(); - - const storeState2 = mockStoreState.applyTransaction( - actionA('this is val2'), - ); - - expect(valCache.get(storeState2)).toBe(undefined); - - const result = getValue(storeState2, selectorA, valCache); - - expect(selectorACalled.count).toBe(1); - expect(result).toBe('THIS IS VAL2'); - - expect(valCache.get(storeState2)).toBe(result); - - getValue(storeState2, selectorA, valCache); - - expect(selectorACalled.count).toBe(1); - }); - }); - - describe('equalityGetValue', () => { - it('should return the new value when the equality function returns false', () => { - const { mockStoreState, actionA, selectorA, valCache, prevValCache } = - setup(); - - // provide a previous value - prevValCache.set(mockStoreState._storeStateKey, 'OLD VAL'); - - const mockEqualFn = jest.fn((a: any, b: any) => { - return false; - }); - - const storeState2 = mockStoreState.applyTransaction( - actionA('this is val2'), - ); - - const result = equalityGetValue( - storeState2, - selectorA, - valCache, - prevValCache, - mockEqualFn, - ); - - expect(mockEqualFn).toBeCalledTimes(1); - expect(mockEqualFn).nthCalledWith(1, 'THIS IS VAL2', 'OLD VAL'); - expect(result).toBe('THIS IS VAL2'); - - expect(valCache.get(storeState2)).toBe('THIS IS VAL2'); - expect(prevValCache.get(mockStoreState._storeStateKey)).toBe( - 'THIS IS VAL2', - ); - }); - - it('should return the old value when the equality function returns true', () => { - const { mockStoreState, actionA, selectorA, valCache, prevValCache } = - setup(); - - // provide a previous value - prevValCache.set(mockStoreState._storeStateKey, 'OLD VAL'); - - const mockEqualFn = jest.fn((a: any, b: any) => { - return true; - }); - - const storeState2 = mockStoreState.applyTransaction( - actionA('this is val2'), - ); - - let result = equalityGetValue( - storeState2, - selectorA, - valCache, - prevValCache, - mockEqualFn, - ); - - expect(mockEqualFn).toBeCalledTimes(1); - expect(mockEqualFn).nthCalledWith(1, 'THIS IS VAL2', 'OLD VAL'); - expect(result).toBe('OLD VAL'); - expect(prevValCache.get(mockStoreState._storeStateKey)).toBe('OLD VAL'); - expect(valCache.get(storeState2)).toBe('OLD VAL'); - - // calling again should not call selector or equality function - result = equalityGetValue( - storeState2, - selectorA, - valCache, - prevValCache, - mockEqualFn, - ); - expect(mockEqualFn).toBeCalledTimes(1); - }); - }); -}); diff --git a/src/vanilla/__tests__/slice.test.ts b/src/vanilla/__tests__/slice.test.ts deleted file mode 100644 index b9fb8e6..0000000 --- a/src/vanilla/__tests__/slice.test.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { GetStoreState, expectType, IfEquals } from '../types'; -import { Slice, slice } from '../slice'; -import { testCleanup } from '../helpers/test-cleanup'; -import { InferDepNameFromSlice } from '../types'; -import { UpdaterType } from '../helpers'; - -beforeEach(() => { - testCleanup(); -}); - -describe('slice', () => { - describe('types and setup', () => { - const mySlice = slice([], { - name: 'mySlice', - state: { - a: 1, - }, - }); - - const mySlice2 = slice([mySlice], { - name: 'mySlice2', - state: { - a: 1, - }, - }); - - describe('dependencies', () => { - it('should have correct types', () => { - expectType, typeof mySlice>( - mySlice, - ); - type DepName = InferDepNameFromSlice; - type Match = IfEquals; - let result: Match = true; - }); - - it('should have correct types with dependencies', () => { - expectType, typeof mySlice2>( - mySlice2, - ); - type DepName = InferDepNameFromSlice; - type Match = IfEquals<'mySlice', DepName, true, false>; - let result: Match = true as const; - - expectType< - Slice<'mySlice2', { a: number }, 'mySlice2'>, - typeof mySlice2 - >(mySlice2); - }); - }); - - test('get', () => { - // type checks - () => { - let storeState: GetStoreState = {} as any; - let result = mySlice.get(storeState); - expectType<{ a: number }, typeof result>(result); - }; - - () => { - let storeState: GetStoreState = {} as any; - // @ts-expect-error should fail as mySlice is not in store - let result = mySlice.get(storeState); - }; - - () => { - let storeState: GetStoreState = - {} as any; - let result = mySlice.get(storeState); - }; - }); - - test('update', () => { - // type checks - () => { - let storeState: GetStoreState = {} as any; - let result = mySlice.update(storeState, { - a: 2, - }); - expectType, typeof result>(result); - }; - - () => { - let storeState: GetStoreState = {} as any; - // @ts-expect-error should fail as mySlice is not in store - let result = mySlice.update(storeState, { a: 3 }); - }; - - () => { - let storeState: GetStoreState = {} as any; - let result = mySlice.update(storeState, { - // @ts-expect-error invalid type - a: false, - }); - }; - - () => { - let storeState: GetStoreState = {} as any; - let result = mySlice.update(storeState, (sliceState) => { - expectType<{ a: number }, typeof sliceState>(sliceState); - return { - a: 2, - }; - }); - expectType, typeof result>(result); - }; - }); - }); -}); diff --git a/src/vanilla/__tests__/store-state.test.ts b/src/vanilla/__tests__/store-state.test.ts deleted file mode 100644 index f84f234..0000000 --- a/src/vanilla/__tests__/store-state.test.ts +++ /dev/null @@ -1,478 +0,0 @@ -import { Transaction } from '../transaction'; -import { sliceKey, slice } from '../slice'; -import { StoreState } from '../store-state'; -import { testCleanup } from '../helpers/test-cleanup'; -import { expectType } from '../types'; - -const sliceOne = slice([], { - name: 'sliceOne', - state: { - keyOne: 'valueOne', - }, -}); - -const sliceTwo = slice([], { - name: 'sliceTwo', - state: { keyTwo: 'valueTwo' }, -}); - -let updateKeyOneSliceOne: (keyOne: string) => Transaction<'sliceOne'>; - -let updateKeyTwoSliceTwo: (keyTwo: string) => Transaction<'sliceTwo'>; - -beforeEach(() => { - testCleanup(); - - updateKeyOneSliceOne = sliceOne.action((keyOne: string) => { - let transaction = sliceOne.tx((state) => { - return sliceOne.update(state, { keyOne }); - }); - - return transaction; - }); - - updateKeyTwoSliceTwo = sliceTwo.action((keyTwo: string) => { - return sliceTwo.tx((state) => { - return sliceTwo.update(state, { keyTwo }); - }); - }); -}); - -describe('StoreState Slice and Transaction Operations', () => { - test('correctly applies a single transaction', () => { - let storeState = StoreState.create({ - slices: [sliceOne, sliceTwo], - }); - - const transaction = updateKeyOneSliceOne('updatedValueOne'); - - storeState = storeState.applyTransaction(transaction); - - expect(sliceOne.get(storeState)).toMatchInlineSnapshot(` - { - "keyOne": "updatedValueOne", - } - `); - expect(sliceTwo.get(storeState)).toMatchInlineSnapshot(` - { - "keyTwo": "valueTwo", - } - `); - }); - - test('correctly applies multiple transactions and throws error when applying the same transaction again', () => { - let store = StoreState.create({ - slices: [sliceOne, sliceTwo], - }); - - const firstTransaction = updateKeyOneSliceOne('updatedValueOne'); - const secondTransaction = updateKeyTwoSliceTwo('updatedValueTwo'); - - // Apply multiple transactions to the store and verify state updates - store = store.applyTransaction(firstTransaction.append(secondTransaction)); - - expect(sliceOne.get(store)).toEqual({ - keyOne: 'updatedValueOne', - }); - expect(sliceTwo.get(store)).toEqual({ - keyTwo: 'updatedValueTwo', - }); - - // Try applying the same transactions again and verify that an error is thrown - expect(() => - store.applyTransaction(firstTransaction), - ).toThrowErrorMatchingInlineSnapshot( - `"StoreState.applyTransaction: cannot apply a destroyed transaction"`, - ); - - expect(() => - store.applyTransaction(secondTransaction), - ).toThrowErrorMatchingInlineSnapshot( - `"StoreState.applyTransaction: cannot apply a destroyed transaction"`, - ); - }); - - test('storeState remains the same if action step does not mutate state', () => { - const fixedState = { - keyOne: 'valueOne', - }; - const immutableSlice = slice([], { - name: 'immutableSlice', - state: fixedState, - }); - - const nonMutatingAction = immutableSlice.action((inputNumber: number) => { - return immutableSlice.tx((store) => { - return fixedState; - }); - }); - - let store = StoreState.create({ - slices: [sliceOne, immutableSlice], - }); - - let newStoreStateAfterActionOne = store.applyTransaction( - nonMutatingAction(3), - ); - - expect(newStoreStateAfterActionOne).toBe(store); - - let newStoreStateAfterActionTwo = - newStoreStateAfterActionOne.applyTransaction( - updateKeyOneSliceOne('updatedValueOne').append(nonMutatingAction(3)), - ); - - expect(immutableSlice.get(newStoreStateAfterActionTwo)).toBe(fixedState); - }); - - test('step is called with the same instance of storeState if no mutation occurred in previous step', () => { - const fixedState = { - keyOne: 'valueOne', - }; - const immutableSlice = slice([], { - name: 'immutableSlice', - state: fixedState, - }); - - const nonMutatingAction = immutableSlice.action((inputNumber: number) => { - return immutableSlice.tx((store) => { - return fixedState; - }); - }); - - let storeStateInstances: StoreState[] = []; - const mutatingAction = immutableSlice.action((inputNumber: number) => { - return immutableSlice.tx((store) => { - storeStateInstances.push(store); - return { - keyOne: 'newValue', - }; - }); - }); - - let store = StoreState.create({ - slices: [sliceOne, immutableSlice], - }); - - let newStoreStateAfterMutatingAction = store.applyTransaction( - nonMutatingAction(3).append(mutatingAction(53)), - ); - - expect(storeStateInstances.length).toBe(1); - expect(storeStateInstances[0]).toBe(store); - - expect(newStoreStateAfterMutatingAction).not.toBe(store); - }); - - test('state from previous step is correctly passed to next step', () => { - const sliceA = slice([], { - name: 'sliceA', - state: { - counter: 1, - }, - }); - - const sliceB = slice([sliceA], { - name: 'sliceB', - state: { - counter: 1, - }, - }); - - const actionIncrementCounterA = sliceA.action(() => { - return sliceA.tx((store) => { - return { - counter: sliceA.get(store).counter + 1, - }; - }); - }); - - const actionIncrementCounterB = sliceB.action(() => { - return sliceB.tx((store) => { - return { - counter: sliceA.get(store).counter + sliceB.get(store).counter + 1, - }; - }); - }); - - let store = StoreState.create({ - slices: [sliceA, sliceB], - }); - - let newStore = store.applyTransaction( - actionIncrementCounterA().append(actionIncrementCounterB()), - ); - - expect({ - a: sliceA.get(newStore), - b: sliceB.get(newStore), - }).toEqual({ - a: { - counter: 2, - }, - b: { - counter: 4, - }, - }); - - // previous state should not be changed - expect({ - a: sliceA.get(store), - b: sliceB.get(store), - }).toEqual({ - a: { - counter: 1, - }, - b: { - counter: 1, - }, - }); - }); - - test('correctly overrides state', () => { - let store = StoreState.create({ - slices: [sliceOne, sliceTwo], - stateOverride: { - [sliceOne.sliceId]: { - keyOne: 'newValueOne', - }, - }, - }); - - expect(sliceOne.get(store)).toEqual({ - keyOne: 'newValueOne', - }); - - expect(sliceTwo.get(store)).toEqual({ - keyTwo: 'valueTwo', - }); - }); -}); - -describe('StoreState', () => { - describe('.resolve', () => { - it('should return the slice state', () => { - const sliceOneKey = sliceKey([], { - name: 'sliceOne', - state: { - keyOne: 'valueOne', - }, - }); - - const sliceOne = slice([], { - name: 'sliceOne', - state: { - keyOne: 'valueOne', - }, - }); - - const store = StoreState.create({ - slices: [sliceOne], - }); - - const sliceState = store.resolve(sliceOne.sliceId); - - expect(sliceState).toEqual({ keyOne: 'valueOne' }); - }); - - it('should return the slice state with derived state if calcDerivedState is defined', () => { - const sliceOneKey = sliceKey([], { - name: 'sliceOne', - state: { - keyOne: 'valueOne', - }, - }); - - const selectorA = sliceOneKey.selector( - (state) => { - return 'derivedValue'; - }, - { - equal: (a, b) => { - return a === b; - }, - }, - ); - - const sliceOne = sliceOneKey.slice({ - derivedState: { - selectorA, - }, - }); - - const store = StoreState.create({ - slices: [sliceOne], - }); - - const sliceState = store.resolve(sliceOne.sliceId); - - expect(sliceState).toEqual({ - keyOne: 'valueOne', - selectorA: 'derivedValue', - }); - - const sliceStateWithoutDerived = store.resolve(sliceOne.sliceId, { - skipDerivedData: true, - }); - - expect(sliceStateWithoutDerived).toEqual({ - keyOne: 'valueOne', - }); - }); - - it('should cache the result of calcDerivedState', () => { - const sliceOneKey = sliceKey([], { - name: 'sliceOne', - state: { - keyOne: 'valueOne', - }, - }); - - const selectorA = sliceOneKey.selector( - (state) => { - return 'derivedValue'; - }, - { - equal: (a, b) => { - return a === b; - }, - }, - ); - - const sliceOne = sliceOneKey.slice({ - derivedState: { - selectorA, - }, - }); - - const store = StoreState.create({ - slices: [sliceOne], - }); - - const sliceState = store.resolve(sliceOne.sliceId); - - expect(sliceState).toEqual({ - keyOne: 'valueOne', - selectorA: 'derivedValue', - }); - - // Call resolve again to ensure that the cached result is returned - const sliceState2 = store.resolve(sliceOne.sliceId); - - expect(sliceState2).toBe(sliceState); - }); - }); -}); - -describe('_getChangedSlices', () => { - test('returns an empty array when no transactions have been applied', () => { - let storeState = StoreState.create({ - slices: [], - }); - - const changedSlices = storeState._getChangedSlices( - StoreState.create({ - slices: [], - }), - ); - - expect(changedSlices).toEqual([]); - }); - - test('should return changed slices', () => { - let storeState1 = StoreState.create({ - slices: [sliceOne, sliceTwo], - }); - - let storeState2 = StoreState.create({ - slices: [sliceOne, sliceTwo], - }); - - // Apply transaction to the second store state - const transaction = updateKeyTwoSliceTwo('updatedValueTwo'); - storeState2 = storeState2.applyTransaction(transaction); - - const changedSlices = storeState1._getChangedSlices(storeState2); - - // Only sliceTwo should have changed - expect(changedSlices.length).toBe(1); - expect(changedSlices[0]!.sliceId).toBe('sl_sliceTwo$'); - }); - - test('should return empty array when no slices have changed', () => { - let storeState1 = StoreState.create({ - slices: [sliceOne, sliceTwo], - }); - - let storeState2 = StoreState.create({ - slices: [sliceOne, sliceTwo], - }); - - const changedSlices = storeState1._getChangedSlices(storeState2); - - expect(changedSlices.length).toBe(0); - }); - - test('should return all slices when all slices have changed', () => { - let initialStoreState = StoreState.create({ - slices: [sliceOne, sliceTwo], - }); - - // Apply transactions to the second store state - const transactionOne = updateKeyOneSliceOne('updatedValueOne'); - const transactionTwo = updateKeyTwoSliceTwo('updatedValueTwo'); - let storeState = initialStoreState.applyTransaction(transactionOne); - storeState = storeState.applyTransaction(transactionTwo); - - expect(storeState._getChangedSlices(initialStoreState)).toHaveLength(2); - expect(initialStoreState._getChangedSlices(storeState)).toHaveLength(2); - }); -}); - -describe('simple action', () => { - test('works', () => { - const sliceTwo = slice([], { - name: 'sliceTwo', - state: { keyTwo: 'valueTwo' }, - }); - - const sliceOne = slice([sliceTwo], { - name: 'sliceOne', - state: { - keyOne: 'valueOne', - keyTwo: false, - }, - }); - - const action1 = sliceOne.simpleAction('keyOne', (payload, state) => { - expectType(payload); - - expectType, typeof state>(state); - - return { - keyOne: payload + 'abc', - }; - }); - - const action2: (val: boolean) => Transaction<'sliceOne'> = - sliceOne.simpleAction('keyTwo'); - - let store = StoreState.create({ - slices: [sliceTwo, sliceOne], - }); - - store = store.applyTransaction(action1('xyz')); - - expect(store.resolve(sliceOne.sliceId)).toEqual({ - keyOne: 'xyzabc', - keyTwo: false, - }); - - store = store.applyTransaction(action2(true)); - - expect(store.resolve(sliceOne.sliceId)).toEqual({ - keyOne: 'xyzabc', - keyTwo: true, - }); - }); -}); diff --git a/src/vanilla/__tests__/transaction.test.ts b/src/vanilla/__tests__/transaction.test.ts deleted file mode 100644 index 0bdfc35..0000000 --- a/src/vanilla/__tests__/transaction.test.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Operation } from '../operation'; -import { Store } from '../store'; -import { Transaction } from '../transaction'; - -describe('transaction dispatch types', () => { - test('typing works', () => { - () => { - let ref: Transaction<'bangle/slice-refresh-workspace'> = {} as any; - let store: Store<'bangle/slice-refresh-workspace'> = {} as any; - - store.dispatch(ref); - }; - - () => { - let ref: Operation<'bangle/slice-refresh-workspace'> = {} as any; - let store: Store<'slice-b'> = {} as any; - - store.dispatch(ref); - }; - }); -}); diff --git a/src/vanilla/__tests__/types.test.ts b/src/vanilla/__tests__/types.test.ts deleted file mode 100644 index 824d698..0000000 --- a/src/vanilla/__tests__/types.test.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* eslint-disable @typescript-eslint/no-duplicate-type-constituents */ -import { DoesExtendBool, expectType } from '../types'; - -describe('does extend', () => { - test('works', () => { - expectType, true>( - true, - ); - expectType, true>(true); - expectType, true>(true); - - expectType, false>(false); - expectType< - DoesExtendBool<'kushan' | 'joshi', 'kushan' | 'c' | 'joshi' | 'c'>, - true - >(true); - - expectType< - DoesExtendBool<'kushan' | 'joshi' | 'k', 'kushan' | 'c' | 'joshi' | 'c'>, - false - >(false); - - expectType< - DoesExtendBool< - 'kushan' | 'joshi' | 'k', - 'kushan' | 'c' | 'joshi' | 'c' | 'k' - >, - true - >(true); - }); -}); diff --git a/src/vanilla/__tests__/validations.test.ts b/src/vanilla/__tests__/validations.test.ts deleted file mode 100644 index 90f6d73..0000000 --- a/src/vanilla/__tests__/validations.test.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { AnySlice } from '../types'; -import { - validateSlices, - checkUniqueSliceId, - findDuplications, - circularCheck, -} from '../helpers/validations'; - -const createSlice = ({ sliceId, dependencies }: any): AnySlice => { - return { - sliceId, - dependencies, - } as AnySlice; -}; -describe('Slice validation', () => { - test('validates slices with unique dependencies', () => { - const slice1 = createSlice({ sliceId: '1', dependencies: [] }); - const slice2 = createSlice({ sliceId: '2', dependencies: [slice1] }); - const slice3 = createSlice({ - sliceId: '3', - dependencies: [slice1, slice2], - }); - - expect(() => validateSlices([slice1, slice2, slice3])).not.toThrow(); - }); - - test('throws an error when a slice has duplicate dependencies', () => { - const slice1 = createSlice({ sliceId: '1', dependencies: [] }); - const slice2 = createSlice({ - sliceId: '2', - dependencies: [slice1, slice1], - }); - - expect(() => validateSlices([slice1, slice2])).toThrow( - /duplicate dependencies/, - ); - }); - - test('throws an error when there are duplicate slice ids', () => { - const slice1 = createSlice({ sliceId: '1', dependencies: [] }); - const slice2 = createSlice({ sliceId: '1', dependencies: [] }); - - expect(() => validateSlices([slice1, slice2])).toThrow( - /Duplicate slice ids/, - ); - }); - - test('finds duplicate slice ids', () => { - expect(findDuplications(['1', '2', '1'])).toEqual(['1']); - }); - - test('throws an error when slices have circular dependencies', () => { - const slice1 = createSlice({ sliceId: '1', dependencies: [] }); - const slice2 = createSlice({ sliceId: '2', dependencies: [slice1] }); - slice1.dependencies.push(slice2); - - expect(() => circularCheck([slice1, slice2])).toThrow( - /Circular dependency detected/, - ); - }); - - test('cyclic dep 2', () => { - const sl0 = createSlice({ sliceId: 'sl0', dependencies: [] }); - const sl1 = createSlice({ sliceId: 'sl1', dependencies: [] }); - const sl2 = createSlice({ sliceId: 'sl2', dependencies: [] }); - const sl3 = createSlice({ sliceId: 'sl3', dependencies: [] }); - const sl4 = createSlice({ sliceId: 'sl4', dependencies: [] }); - - sl0.dependencies.push(sl1, sl2); - sl1.dependencies.push(sl3); - sl2.dependencies.push(sl3); - sl3.dependencies.push(sl4); - sl4.dependencies.push(sl0, sl2); - - expect(() => circularCheck([sl0, sl1, sl2, sl3, sl4])).toThrowError( - `Circular dependency detected in slice "sl0" with path sl0 ->sl1 ->sl3 ->sl4 ->sl0`, - ); - }); - - test('throws an error when a slice has a dependency that is registered after it', () => { - const slice1 = createSlice({ sliceId: '1', dependencies: [] }); - const slice2 = createSlice({ sliceId: '2', dependencies: [slice1] }); - - expect(() => validateSlices([slice2, slice1])).toThrow( - /either not registered or is registered after this slice/, - ); - }); -}); diff --git a/src/vanilla/action.ts b/src/vanilla/action.ts deleted file mode 100644 index 70628a2..0000000 --- a/src/vanilla/action.ts +++ /dev/null @@ -1,108 +0,0 @@ -import type { UpdaterType } from './helpers'; -import { idGeneration, Updater } from './helpers'; -import type { Slice } from './slice'; -import type { StoreState } from './store-state'; -import type { Step } from './transaction'; -import { Transaction } from './transaction'; -import type { ActionId, SliceId } from './types'; - -export type UserActionCallback< - TParams extends any[], - TActionBuilder extends ActionBuilder, -> = (...params: TParams) => TActionBuilder; - -export type ActionOpts = { - slice: Slice; - userCallback: UserActionCallback>; - debugName?: string | undefined; -}; - -// we save actions in a global registry, so we can call them again -// with the params in the txn. -export const actionRegistry = new Map>(); - -export class Action { - actionId: ActionId; - constructor(public readonly opts: ActionOpts) { - const hint = opts.debugName || opts.userCallback.name; - this.actionId = idGeneration.createActionId(opts.slice.sliceId, hint); - - if (actionRegistry.has(this.actionId)) { - throw new Error(`ActionId "${this.actionId}" can not already exist`); - } - actionRegistry.set(this.actionId, this); - } - - /** - * @internal - */ - getTransactionBuilder(): (...params: TParams) => Transaction { - return (...params) => { - const sliceStateBuilder = this.opts.userCallback(...params); - - return sliceStateBuilder.makeTxn({ - params, - actionId: this.actionId, - sliceId: this.opts.slice.sliceId, - sliceName: this.opts.slice.name, - }); - }; - } - - /** - * Executes action based on params - * - * @internal - */ - static _applyStep( - storeState: StoreState, - step: Step, - ): Record { - const { actionId, targetSliceId, params } = step; - - const action = actionRegistry.get(actionId); - - if (!action) { - throw new Error( - `ActionId "${actionId}" for Slice "${targetSliceId}" does not exist`, - ); - } - - const actionBuilder = action.opts.userCallback(...params); - const result = actionBuilder.opts.calcUserSliceState(storeState); - - if (result != null && typeof result === 'object' && Updater in result) { - return (result as UpdaterType)[Updater] as any; - } - - return result as any; - } -} - -// This is built new every time user calls mySliceAction({x:2}) -// and will also be built when a step is applied. -export class ActionBuilder { - constructor( - public readonly opts: { - name: TSliceName; - calcUserSliceState: ( - storeState: StoreState, - ) => unknown; - }, - ) {} - - makeTxn(obj: { - actionId: ActionId; - params: TParams; - sliceId: SliceId; - sliceName: TSliceName; - }): Transaction { - return Transaction.create({ - name: this.opts.name, - params: obj.params, - actionId: obj.actionId, - sourceSliceId: obj.sliceId, - sourceSliceName: obj.sliceName, - }); - } -} diff --git a/src/vanilla/base-store.ts b/src/vanilla/base-store.ts deleted file mode 100644 index 3f76a4d..0000000 --- a/src/vanilla/base-store.ts +++ /dev/null @@ -1,80 +0,0 @@ -import type { Operation } from './operation'; -import type { Store } from './store'; -import type { StoreState } from './store-state'; -import type { Transaction } from './transaction'; - -export type InferSliceNameFromStore = T extends BaseStore - ? TSliceName - : never; - -export type Dispatch = ( - txn: Transaction | Operation, - opts?: { - debugInfo?: string; - }, -) => void; - -export abstract class BaseStore { - abstract readonly dispatch: Dispatch; - abstract readonly state: StoreState; -} - -export abstract class DerivativeStore - implements BaseStore -{ - private lastStateBeforeDestroy: StoreState | undefined; - dispatch: Dispatch = (txn, opts) => { - if (!this._rootStore) { - console.error( - `Cannot dispatch on a stale effect "${this.name}" run. This is likely a bug in your code.`, - ); - } else { - this._rootStore.dispatch(txn, { - ...opts, - debugInfo: this.name + (opts?.debugInfo ? ` (${opts.debugInfo})` : ''), - }); - } - }; - - private _destroyed = false; - - /** - * @internal - */ - _rootStore: Store | undefined; - constructor( - _rootStore: Store, - public readonly name: string, - ) { - this._rootStore = _rootStore; - } - - get destroyed(): boolean { - return this._destroyed; - } - - get state(): StoreState { - if (!this._rootStore) { - console.warn( - `Trying to access store state of a destroyed store "${this.name}", this will give stale data and cause memory leaks.`, - ); - - return this.lastStateBeforeDestroy!; - } - - return this._rootStore.state; - } - - /** - * @internal - */ - _destroy(): void { - if (this._destroyed) { - return; - } - - this.lastStateBeforeDestroy = this._rootStore?.state; - this._rootStore = undefined; - this._destroyed = true; - } -} diff --git a/src/vanilla/cleanup.ts b/src/vanilla/cleanup.ts deleted file mode 100644 index 487cc82..0000000 --- a/src/vanilla/cleanup.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { EffectStore } from './effect'; -import { OperationStore } from './operation'; - -export type CleanupCallback = () => void | Promise; - -export function cleanup( - store: EffectStore | OperationStore, - cb: CleanupCallback, -): void { - if (store instanceof OperationStore) { - store._addCleanup(cb); - } else { - store._runInstance?.addCleanup(cb); - } -} diff --git a/src/vanilla/effect/__tests__/run-instance.test.ts b/src/vanilla/effect/__tests__/run-instance.test.ts deleted file mode 100644 index 1915ca3..0000000 --- a/src/vanilla/effect/__tests__/run-instance.test.ts +++ /dev/null @@ -1,174 +0,0 @@ -import { Store } from '../../store'; -import { Slice, slice } from '../../slice'; -import { AnySlice } from '../../types'; -import { RunInstance } from '../run-instance'; -import { testCleanup } from '../../helpers/test-cleanup'; - -let sliceA: Slice< - 'slice1', - { - foo: string; - }, - never ->; -let sliceB: Slice< - 'slice2', - { - sliceBField: string; - sliceBOtherField: string; - }, - never ->; -let store: Store; - -beforeEach(() => { - testCleanup(); - // Initialize your slices here. The actual initialization depends on your implementation - sliceA = slice([], { - name: 'slice1', - state: { - foo: 'bar', - }, - }); - sliceB = slice([], { - name: 'slice2', - state: { - sliceBField: 'bar', - sliceBOtherField: 'bizz', - }, - }); - store = Store.create({ - storeName: 'test', - slices: [sliceA, sliceB], - }); -}); - -describe('RunInstance', () => { - describe('dependencies.has', () => { - it('should identify tracked slice correctly', () => { - let runInstance = new RunInstance(store, 'test'); - - runInstance.addTrackedField(sliceA, 'foo', 'bar'); - - expect(runInstance.dependencies.has(sliceA)).toBe(true); - expect(runInstance.dependencies.has(sliceB)).toBe(false); - }); - }); -}); - -describe('whatDependenciesStateChange', () => { - it('should return false for a blank instance', () => { - let runInstance1 = new RunInstance(store, 'test'); - - expect(runInstance1.whatDependenciesStateChange()).toBe(false); - }); - - it('should return false when value is the same', () => { - let runInstance1 = new RunInstance(store, 'test'); - runInstance1.addTrackedField(sliceA, 'foo', 'bar'); - - expect(runInstance1.whatDependenciesStateChange()).toBe(false); - expect(runInstance1.dependencies.has(sliceA)).toBe(true); - }); - - it('should return true if tracked things have changed', () => { - let runInstance1 = new RunInstance(store, 'test'); - runInstance1.addTrackedField(sliceA, 'foo', 'bar'); - - let runInstance2 = runInstance1.newRun(); - expect(runInstance2.dependencies.has(sliceA)).toBe(false); - - runInstance2.addTrackedField(sliceA, 'foo', 'xyz'); - - expect(runInstance2.dependencies.has(sliceA)).toBe(true); - - expect(runInstance2.whatDependenciesStateChange()).toBe('foo'); - }); - - it('should return true when store state have changed', () => { - let myAction = sliceA.action((val: string) => { - return sliceA.tx((state) => { - return sliceA.update(state, { foo: val }); - }); - }); - - let runInstance1 = new RunInstance(store, 'test'); - runInstance1.addTrackedField(sliceA, 'foo', sliceA.get(store.state).foo); - - expect(runInstance1.whatDependenciesStateChange()).toBe(false); - - store.dispatch(myAction('xyz')); - - expect(runInstance1.whatDependenciesStateChange()).toBe('foo'); - - let runInstance2 = runInstance1.newRun(); - - expect(runInstance2.whatDependenciesStateChange()).toBe(false); - - runInstance2.addTrackedField(sliceA, 'foo', sliceA.get(store.state).foo); - - expect(runInstance2.whatDependenciesStateChange()).toBe(false); - }); - - it('should only focus on the tracked field and ignore other fields in the slice', () => { - let updateField = sliceB.action((val: string) => { - return sliceB.tx((state) => { - return sliceB.update(state, { sliceBField: val }); - }); - }); - - let updateOtherField = sliceB.action((val: string) => { - return sliceB.tx((state) => { - return sliceB.update(state, { sliceBOtherField: val }); - }); - }); - - let runInstance1 = new RunInstance(store, 'test'); - runInstance1.addTrackedField( - sliceB, - 'sliceBField', - sliceB.get(store.state).sliceBField, - ); - - expect(runInstance1.whatDependenciesStateChange()).toBe(false); - - store.dispatch(updateOtherField('xyz')); - - expect(runInstance1.whatDependenciesStateChange()).toBe(false); - - store.dispatch(updateField('xyz')); - - expect(runInstance1.whatDependenciesStateChange()).toBe('sliceBField'); - }); -}); - -describe('#newRun', () => { - it('executes all cleanup callbacks on creating a new RunInstance', () => { - const runInstance = new RunInstance(store, 'test'); - const cleanupCallback1 = jest.fn(); - const cleanupCallback2 = jest.fn(); - - runInstance.addCleanup(cleanupCallback1); - runInstance.addCleanup(cleanupCallback2); - - let runInstance2 = runInstance.newRun(); - expect(runInstance.newRun()).toBeInstanceOf(RunInstance); - - expect(cleanupCallback1).toBeCalledTimes(1); - expect(cleanupCallback2).toBeCalledTimes(1); - - expect(runInstance2.newRun()).toBeInstanceOf(RunInstance); - - expect(cleanupCallback2).toBeCalledTimes(1); - }); - - it('creates a fresh RunInstance without carrying forward any tracked fields', () => { - const initialRunInstance = new RunInstance(store, 'test'); - initialRunInstance.addTrackedField(sliceA, 'property', 'value'); - expect(initialRunInstance.dependencies.has(sliceA)).toBe(true); - - const newRunInstance = initialRunInstance.newRun(); - - expect(newRunInstance.dependencies.has(sliceA)).toBe(false); - }); -}); diff --git a/src/vanilla/effect/effect.ts b/src/vanilla/effect/effect.ts deleted file mode 100644 index 7fb7760..0000000 --- a/src/vanilla/effect/effect.ts +++ /dev/null @@ -1,181 +0,0 @@ -import type { BaseStore, InferSliceNameFromStore } from '../base-store'; -import { hasIdleCallback } from '../helpers'; -import type { DebugLogger } from '../logger'; -import type { Store } from '../store'; -import type { AnySlice } from '../types'; -import type { EffectStore } from './run-instance'; -import { RunInstance } from './run-instance'; - -export type ValidEffectStore< - TStoreSlices extends string, - TSliceName extends string, -> = TSliceName extends TStoreSlices ? EffectStore : never; - -const DEFAULT_MAX_WAIT = 15; - -export type EffectOpts = { - /** - * Effects are deferred by default. If set to false, the effect will run immediately after - * a store state change. If set to true, the effect will run anytime before maxWait. - */ - deferred: boolean; - /** - * - */ - maxWait: number; - scheduler: EffectScheduler; - name?: string; -}; - -export type EffectScheduler = ( - cb: () => void, - opts: Omit & {}, -) => void; - -const DEFAULT_SCHEDULER: EffectScheduler = (cb, opts) => { - if (opts.deferred) { - if (hasIdleCallback) { - window.requestIdleCallback(cb, { timeout: opts.maxWait }); - } else { - setTimeout(cb, opts.maxWait); - } - } else { - queueMicrotask(cb); - } -}; - -export type EffectCreator = (store: Store) => Effect; - -export type EffectCallback> = ( - store: EffectStore>, -) => void | Promise; - -export class Effect { - private runInstance: RunInstance; - - private debug: DebugLogger | undefined; - - private destroyed = false; - - private pendingRun = false; - - private runCount = 0; - - private scheduler: EffectScheduler; - - name: string; - - constructor( - private readonly callback: EffectCallback>, - private readonly rootStore: Store, - public readonly opts: EffectOpts, - ) { - this.name = opts.name || callback.name || 'anonymous'; - this.runInstance = new RunInstance(rootStore, this.name); - this.debug = rootStore.opts.debug; - this.scheduler = rootStore.opts.overrideEffectScheduler || opts.scheduler; - } - - destroy(): void { - if (this.destroyed) { - return; - } - this.runInstance = this.runInstance.newRun(); - this.destroyed = true; - } - - /** - * If slicesChanged is undefined, it will always run the effect. - * The effect will also run at least once, regardless of slicesChanged. - * @param slicesChanged - * @returns - */ - run(slicesChanged?: Set): boolean { - if (this.pendingRun) { - return false; - } - - if (!this.shouldQueueRun(slicesChanged)) { - return false; - } - - this.pendingRun = true; - this.scheduler(() => { - this._run(); - this.pendingRun = false; - }, this.opts); - - return true; - } - - private shouldQueueRun(slicesChanged?: Set): boolean { - if (this.destroyed) { - return false; - } - - if (slicesChanged === undefined) { - return true; - } - - for (const slice of this.runInstance.dependencies.keys()) { - if (slicesChanged.has(slice)) { - return true; - } - } - - if (this.runCount === 0) { - return true; - } - - return false; - } - - private _run(): void { - if (this.destroyed) { - return; - } - - let fieldChanged: string = ''; - - // if runCount is 0, always= run, to ensure the effect runs at least once - if (this.runCount > 0) { - const depChanged = this.runInstance.whatDependenciesStateChange(); - - if (depChanged === false) { - return; - } - - fieldChanged = depChanged; - } - - const oldInstance = this.runInstance; - this.runInstance = oldInstance.newRun(); - - void this.callback(this.runInstance.effectStore); - this.debug?.({ - type: this.opts.deferred ? 'UPDATE_EFFECT' : 'SYNC_UPDATE_EFFECT', - name: this.name, - changed: fieldChanged, - }); - this.runCount++; - } -} - -export function effect>( - callback: EffectCallback, - { - deferred = true, - maxWait = DEFAULT_MAX_WAIT, - scheduler = DEFAULT_SCHEDULER, - }: Partial = {}, -): EffectCreator { - return (store: Store) => { - const newEffect = new Effect(callback, store, { - deferred, - maxWait, - scheduler, - }); - - return newEffect; - }; -} diff --git a/src/vanilla/effect/index.ts b/src/vanilla/effect/index.ts deleted file mode 100644 index 99bf709..0000000 --- a/src/vanilla/effect/index.ts +++ /dev/null @@ -1,9 +0,0 @@ -export type { - Effect, - EffectCallback, - EffectCreator, - EffectOpts, -} from './effect'; -export { effect } from './effect'; -export { EffectManager } from './effect-manager'; -export type { EffectStore } from './run-instance'; diff --git a/src/vanilla/effect/run-instance.ts b/src/vanilla/effect/run-instance.ts deleted file mode 100644 index 1a234a6..0000000 --- a/src/vanilla/effect/run-instance.ts +++ /dev/null @@ -1,124 +0,0 @@ -import { DerivativeStore } from '../base-store'; -import type { CleanupCallback } from '../cleanup'; -import type { Store } from '../store'; -import type { AnySlice } from '../types'; - -type Dependencies = Map>; -type ConvertToReadonlyMap = T extends Map - ? ReadonlyMap - : T; - -export class EffectStore< - TSliceName extends string, -> extends DerivativeStore { - constructor( - /** - * @internal - */ - public _runInstance: RunInstance | undefined, - _rootStore: Store, - name: string, - ) { - super(_rootStore, name); - } - - /** - * @internal - */ - _addTrackedField(slice: AnySlice, field: string, val: unknown): void { - this._runInstance?.addTrackedField(slice, field, val); - } - - /** - * @internal - */ - override _destroy(): void { - if (this.destroyed) { - return; - } - - this._runInstance = undefined; - super._destroy(); - } -} - -/** - * @internal - */ -export class RunInstance { - effectStore: EffectStore; - private _cleanups: Set = new Set(); - private readonly _dependencies: Dependencies = new Map(); - - /** - * @internal - * To keep track of how many times addTrackedField is called. If it's 0, then - * the user most likely forgot to destructure/access the tracked field. - * - * For example - * const foo = store.track() // this is incorrect and will not track anything - * - * const { foo } = store.track() // this is correct - */ - _addTrackedCount = 0; - - constructor( - public readonly rootStore: Store, - public readonly name: string, - ) { - this.effectStore = new EffectStore(this, rootStore, this.name); - } - - get dependencies(): ConvertToReadonlyMap { - return this._dependencies; - } - - addCleanup(cleanup: CleanupCallback): void { - this._cleanups.add(cleanup); - } - - addTrackedField(slice: AnySlice, field: string, val: unknown): void { - this._addTrackedCount++; - - const existing = this._dependencies.get(slice); - - if (existing === undefined) { - this._dependencies.set(slice, [{ field, value: val }]); - - return; - } - - existing.push({ field, value: val }); - - return; - } - - newRun(): RunInstance { - if (!this.effectStore.destroyed) { - this._cleanups.forEach((cleanup) => { - void cleanup(); - }); - } - - this.effectStore._destroy(); - - return new RunInstance(this.rootStore, this.name); - } - - whatDependenciesStateChange(): false | string { - for (const [slice, fields] of this._dependencies) { - const currentSliceState = slice.get(this.rootStore.state) as Record< - string, - unknown - >; - - for (const obj of fields) { - if (!Object.is(obj.value, currentSliceState[obj.field])) { - return obj.field; - } - } - } - - return false; - } -} diff --git a/src/vanilla/helpers/id_generation.ts b/src/vanilla/helpers/id_generation.ts deleted file mode 100644 index 07a8533..0000000 --- a/src/vanilla/helpers/id_generation.ts +++ /dev/null @@ -1,52 +0,0 @@ -import type { ActionId, SliceId } from '../types'; - -type InternalIdGenerators = { - txCounter: number; - actionIdCounters: Record; - sliceIdCounters: Record; -}; - -const internalInitState: () => InternalIdGenerators = () => ({ - txCounter: 0, - actionIdCounters: Object.create(null), - sliceIdCounters: Object.create(null), -}); - -let idGenerators = internalInitState(); - -/** - * Should only be used in tests, to avoid side effects between tests - */ -export const testOnlyResetIdGeneration = () => { - idGenerators = internalInitState(); -}; - -class IdGeneration { - createActionId(sliceId: SliceId, hint = ''): ActionId { - let prefix = `a_${hint}[${sliceId}]`; - - if (sliceId in idGenerators.actionIdCounters) { - return `${prefix}${idGenerators.actionIdCounters[sliceId]++}` as ActionId; - } else { - idGenerators.actionIdCounters[sliceId] = 0; - - return prefix as ActionId; - } - } - - createSliceId(name: string): SliceId { - if (name in idGenerators.sliceIdCounters) { - return `sl_${name}$${++idGenerators.sliceIdCounters[name]}` as SliceId; - } - - idGenerators.sliceIdCounters[name] = 0; - - return `sl_${name}$` as SliceId; - } - - createTransactionId(): string { - return `tx_${idGenerators.txCounter++}`; - } -} - -export const idGeneration = new IdGeneration(); diff --git a/src/vanilla/helpers/index.ts b/src/vanilla/helpers/index.ts deleted file mode 100644 index 2e69791..0000000 --- a/src/vanilla/helpers/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -export { calcReverseDependencies } from './dependency-helpers'; -export { idGeneration } from './id_generation'; -export { isSlice } from './is-slice'; -export { shallowEqual } from './shallow-equal'; -export { validateSlices } from './validations'; - -export function uuid(len = 10) { - return Math.random().toString(36).substring(2, 15).slice(0, len); -} - -export const hasIdleCallback = - typeof window !== 'undefined' && 'requestIdleCallback' in window; - -export { Updater } from './updater'; -export type { UpdaterType } from './updater'; diff --git a/src/vanilla/helpers/is-slice.ts b/src/vanilla/helpers/is-slice.ts deleted file mode 100644 index be45678..0000000 --- a/src/vanilla/helpers/is-slice.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Slice } from '../slice'; -import type { AnySlice } from '../types'; - -export function isSlice(obj: unknown): obj is AnySlice { - return obj instanceof Slice; -} diff --git a/src/vanilla/helpers/shallow-equal.ts b/src/vanilla/helpers/shallow-equal.ts deleted file mode 100644 index b2c8e7e..0000000 --- a/src/vanilla/helpers/shallow-equal.ts +++ /dev/null @@ -1,21 +0,0 @@ -export function shallowEqual( - objA: Record, - objB: Record, -): boolean { - if (Object.is(objA, objB)) { - return true; - } - - const keysA = Object.keys(objA); - const keysB = Object.keys(objB); - - if (keysA.length !== keysB.length) { - return false; - } - - return keysA.every( - (key) => - Object.prototype.hasOwnProperty.call(objB, key) && - Object.is(objA[key], objB[key]), - ); -} diff --git a/src/vanilla/helpers/test-cleanup.ts b/src/vanilla/helpers/test-cleanup.ts deleted file mode 100644 index d54b49e..0000000 --- a/src/vanilla/helpers/test-cleanup.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { actionRegistry } from '../action'; -import { testOnlyResetIdGeneration } from './id_generation'; - -export function testCleanup() { - testOnlyResetIdGeneration(); - actionRegistry.clear(); -} diff --git a/src/vanilla/helpers/updater.ts b/src/vanilla/helpers/updater.ts deleted file mode 100644 index 84bca2e..0000000 --- a/src/vanilla/helpers/updater.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const Updater = Symbol('Updater'); - -export type UpdaterType = { - name: TSliceName; - [Updater]: unknown; -}; diff --git a/src/vanilla/helpers/validations.ts b/src/vanilla/helpers/validations.ts deleted file mode 100644 index 0a4729f..0000000 --- a/src/vanilla/helpers/validations.ts +++ /dev/null @@ -1,120 +0,0 @@ -import type { AnySlice } from '../types'; - -export function validateSlices(slices: AnySlice[]) { - checkUniqDependency(slices); - checkUniqueSliceId(slices); - checkDependencyOrder(slices); - circularCheck(slices); -} - -function checkUniqDependency(slices: AnySlice[]) { - for (const slice of slices) { - const dependencies = slice.dependencies; - - if ( - new Set(dependencies.map((d) => d.sliceId)).size !== dependencies.length - ) { - throw new Error( - `Slice "${slice.sliceId}" has duplicate dependencies: ${dependencies - .map((d) => d.sliceId) - .join(', ')}`, - ); - } - } -} - -export function checkUniqueSliceId(slices: AnySlice[]) { - const dups = checkUnique(slices.map((s) => s.sliceId)); - - if (dups) { - throw new Error('Duplicate slice ids ' + dups.join(', ')); - } -} - -function checkUnique(entities: T[]): T[] | undefined { - const unique = new Set(entities); - - if (entities.length !== unique.size) { - return findDuplications(entities); - } - - return; -} - -export function findDuplications(arr: T[]): T[] { - const seen = new Set(); - const dupes = new Set(); - - for (const item of arr) { - if (seen.has(item)) { - dupes.add(item); - } else { - seen.add(item); - } - } - - return [...dupes]; -} - -export function circularCheck(slices: AnySlice[]) { - const stack = new Set(); - const visited = new Set(); - - const checkCycle = (slice: AnySlice): boolean => { - const sliceId = slice.sliceId; - - if (stack.has(sliceId)) { - return true; - } - - if (visited.has(sliceId)) { - return false; - } - - visited.add(sliceId); - stack.add(sliceId); - - for (const dep of slice.dependencies) { - if (checkCycle(dep)) { - return true; - } - } - stack.delete(sliceId); - - return false; - }; - - for (const slice of slices) { - const cycle = checkCycle(slice); - - if (cycle) { - const path = [...stack]; - path.push(slice.sliceId); - - throw new Error( - `Circular dependency detected in slice "${ - slice.sliceId - }" with path ${path.join(' ->')}`, - ); - } - } -} - -function checkDependencyOrder(slices: AnySlice[]) { - let seenSliceIds = new Set(); - for (const slice of slices) { - const dependencies = slice.dependencies; - - if (dependencies !== undefined) { - const depKeys = dependencies.map((d) => d.sliceId); - for (const depKey of depKeys) { - if (!seenSliceIds.has(depKey)) { - throw new Error( - `Slice "${slice.sliceId}" has a dependency on Slice "${depKey}" which is either not registered or is registered after this slice.`, - ); - } - } - } - seenSliceIds.add(slice.sliceId); - } -} diff --git a/src/vanilla/index.ts b/src/vanilla/index.ts deleted file mode 100644 index b7c7a7d..0000000 --- a/src/vanilla/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -export { cleanup } from './cleanup'; -export { - DEFAULT_DISPATCH_OPERATION, - DEFAULT_DISPATCH_TRANSACTION, - store, -} from './store'; -export { effect } from './effect'; -export { isSlice, shallowEqual } from './helpers'; -export { operation } from './operation'; -export { ref } from './ref'; -export { slice, sliceKey } from './slice'; - -// types -export type { AnySlice, InferSliceNameFromSlice, SliceId } from './types'; -export type { BaseSlice, Slice, SliceKey, ValidStoreState } from './slice'; -export type { Dispatch } from './base-store'; -export type { Effect, EffectCreator, EffectStore } from './effect'; -export type { Operation, OperationStore } from './operation'; -export type { Store } from './store'; -export type { StoreState } from './store-state'; -export type { Transaction } from './transaction'; diff --git a/src/vanilla/logger.ts b/src/vanilla/logger.ts deleted file mode 100644 index 7ecc0fc..0000000 --- a/src/vanilla/logger.ts +++ /dev/null @@ -1,70 +0,0 @@ -import type { Operation } from './operation'; -import type { Transaction } from './transaction'; -import { META_DISPATCHER, TX_META_STORE_NAME } from './transaction'; -import type { SliceId } from './types'; - -type LogTypes = TransactionLog | OperationLog | EffectLog; - -export type DebugLogger = (log: LogTypes) => void; - -export interface TransactionLog { - type: 'TRANSACTION'; - actionId: string | string[]; - dispatcher?: string | undefined; - params: unknown[] | unknown[][]; - sourceSlices: SliceId | SliceId[]; - store?: string | undefined; - targetSlices: SliceId | SliceId[]; - txId: string; -} - -export interface OperationLog { - type: 'OPERATION'; - dispatcher?: string | undefined; - operationId: string; - store?: string | undefined; -} - -export interface EffectLog { - type: 'SYNC_UPDATE_EFFECT' | 'UPDATE_EFFECT'; - name: string; - changed: string; -} - -export function opLog(op: Operation): OperationLog { - return { - type: 'OPERATION', - operationId: op.name, - dispatcher: op.metadata.getMetadata(META_DISPATCHER), - store: op.metadata.getMetadata(TX_META_STORE_NAME), - }; -} - -export function txLog(tx: Transaction): TransactionLog { - let log: TransactionLog = { - type: 'TRANSACTION', - sourceSlices: - tx.steps.length === 1 - ? tx.steps[0]!.sourceSliceId - : tx.steps.map((s) => s.sourceSliceId), - targetSlices: - tx.steps.length === 1 - ? tx.steps[0]!.targetSliceId - : tx.steps.map((s) => s.targetSliceId), - actionId: - tx.steps.length === 1 - ? tx.steps[0]!.actionId - : tx.steps.map((s) => s.actionId), - dispatcher: tx.metadata.getMetadata(META_DISPATCHER), - store: tx.metadata.getMetadata(TX_META_STORE_NAME), - txId: tx.txId, - params: - tx.steps.length === 1 - ? tx.steps[0]!.params - : tx.steps.map((s) => s.params), - }; - - return Object.fromEntries( - Object.entries(log).filter((r) => r[1] !== undefined), - ) as any; -} diff --git a/src/vanilla/operation.ts b/src/vanilla/operation.ts deleted file mode 100644 index 403cca5..0000000 --- a/src/vanilla/operation.ts +++ /dev/null @@ -1,176 +0,0 @@ -import { DerivativeStore } from './base-store'; -import type { CleanupCallback } from './cleanup'; -import { hasIdleCallback } from './helpers'; -import type { Store } from './store'; -import { Metadata } from './transaction'; - -export const OP_NAME = 'OPERATION_NAME'; - -export type AnyOperationCallback = OperationCallback; - -export type OperationOpts = { - deferred?: boolean; - maxWait?: number; -}; - -const DEFAULT_MAX_WAIT = 15; - -export type Operation = { - name: string; - run: (rootStore: Store) => void; - metadata: Metadata; -}; - -export type OperationCallback< - TSliceName extends string, - TParams extends any[], -> = ( - ...params: TParams -) => (store: OperationStore) => void | Promise; - -export class OperationStore< - TSliceName extends string = any, -> extends DerivativeStore { - private cleanupRan = false; - private readonly _cleanupCallbacks: Set = new Set(); - - constructor( - _rootStore: Store, - name: string, - private readonly opts: OperationOpts, - ) { - super(_rootStore, name); - } - - /** - * @internal - */ - _addCleanup(cb: CleanupCallback): void { - if (this.cleanupRan) { - console.warn( - `Adding a new cleanup to ${this.name} as cleanups have already run`, - ); - void cb(); - - return; - } - - this._cleanupCallbacks.add(cb); - } - - _runCleanup(): void { - if (this.cleanupRan) { - return; - } - - for (const cleanup of this._cleanupCallbacks) { - try { - void cleanup(); - } catch (e) { - console.error(e); - } - } - this.cleanupRan = true; - } -} - -export function operation(opts?: OperationOpts) { - return ( - cb: OperationCallback, - ): ((...params: TParams) => Operation) => { - const cache = new WeakMap(); - const name = cb.name || 'anonymous-operation'; - - return createOperationRunner(cache, cb, name, opts); - }; -} - -function createOperationRunner< - TSliceName extends string, - TParams extends any[], ->( - cache: WeakMap, - cb: OperationCallback, - name: string, - opts?: OperationOpts, -): (...params: TParams) => Operation { - return (...params: TParams) => { - const run = (rootStore: Store) => { - let operationExecutor = cache.get(rootStore); - - if (!operationExecutor) { - operationExecutor = new OperationExecutor(cb, opts, name); - cache.set(rootStore, operationExecutor); - } - operationExecutor.run(rootStore, params); - }; - const metadata = new Metadata(); - - metadata.appendMetadata(OP_NAME, name); - - return { - name, - run, - metadata, - }; - }; -} - -class OperationExecutor { - opStore: OperationStore | undefined; - - constructor( - public readonly operationCallback: AnyOperationCallback, - public readonly opts: OperationOpts = {}, - public readonly name: string, - ) {} - - private deferExecution(cb: () => void, waitFor: number): void { - if (hasIdleCallback) { - window.requestIdleCallback(cb, { timeout: waitFor }); - } else { - setTimeout(cb, waitFor); - } - } - - run(rootStore: Store, params: unknown[]): void { - this.scheduler(() => { - this.opStore?._runCleanup(); - const opStore = new OperationStore(rootStore, this.name, this.opts); - this.opStore = opStore; - void this._run(opStore, params); - }); - } - - private scheduler(cb: () => void): void { - const waitFor = - typeof this.opts.maxWait === 'number' - ? this.opts.maxWait - : DEFAULT_MAX_WAIT; - - if (this.opts.deferred) { - this.deferExecution(cb, waitFor); - } else { - queueMicrotask(cb); - } - } - - private async _run( - opStore: OperationStore, - params: unknown[], - ): Promise { - if (opStore.destroyed || this.opStore?._rootStore?.destroyed) { - console.warn( - `Operation ${this.name} can not run after the store was destroyed`, - ); - - return; - } - - const result = this.operationCallback(...params)(opStore); - - if (result instanceof Promise) { - await result; - } - } -} diff --git a/src/vanilla/slice/base-slice.ts b/src/vanilla/slice/base-slice.ts deleted file mode 100644 index d51faec..0000000 --- a/src/vanilla/slice/base-slice.ts +++ /dev/null @@ -1,100 +0,0 @@ -import type { EffectStore } from '../effect'; -import type { UpdaterType } from '../helpers'; -import { idGeneration, Updater } from '../helpers'; -import type { StoreState } from '../store-state'; -import type { SliceId } from '../types'; -import type { Slice } from './slice'; - -export type UserSliceOpts< - TSliceName extends string, - TState extends object, - TDep extends string, -> = { - name: TSliceName; - state: TState; - dependencies: Array>; -}; - -export type CalcDerivedState = ( - storeState: StoreState, -) => Record; - -export type CreateSliceOpts< - TSliceName extends string, - TState extends object, - TDep extends string, -> = UserSliceOpts & { - // provided internally - sliceId?: SliceId; - calcDerivedState?: CalcDerivedState; -}; - -export type ValidStoreState< - TStoreSlices extends string, - TSliceName extends string, -> = TSliceName extends TStoreSlices ? StoreState : never; - -export type ValidEffectStore< - TStoreSlices extends string, - TSliceName extends string, -> = TSliceName extends TStoreSlices ? EffectStore : never; - -export abstract class BaseSlice< - TSliceName extends string, - TState extends object, - TDep extends string, -> { - readonly name: TSliceName; - readonly initialState: TState; - readonly dependencies: Array>; - readonly sliceId: SliceId; - - constructor(opts: CreateSliceOpts) { - this.name = opts.name; - this.initialState = opts.state; - this.dependencies = opts.dependencies; - this.sliceId = opts.sliceId || idGeneration.createSliceId(opts.name); - } - - get( - storeState: ValidStoreState, - ): TState { - return storeState.resolve(this.sliceId) as TState; - } - - query( - cb: (...params: TParams) => (storeState: StoreState) => TQuery, - ): // TODO - currently TDep is not included as part of storeState - (storeState: StoreState, ...params: TParams) => TQuery { - return (storeState, ...params) => cb(...params)(storeState); - } - - update( - storeState: ValidStoreState, - updater: ((cur: TState) => Partial) | Partial, - opts: { replace?: boolean } = {}, - ): UpdaterType { - const sliceState = storeState.getSliceStateManager(this.sliceId) - .sliceState as TState; - - const newSliceState = - typeof updater === 'function' ? updater(sliceState) : updater; - - let mergedState: Partial; - - if (opts.replace) { - mergedState = newSliceState; - } - // maintain reference equality if possible - else if (newSliceState === sliceState) { - mergedState = newSliceState; - } else { - mergedState = { ...sliceState, ...newSliceState }; - } - - return { - name: this.name, - [Updater]: mergedState, - }; - } -} diff --git a/src/vanilla/slice/index.ts b/src/vanilla/slice/index.ts deleted file mode 100644 index 9fd185d..0000000 --- a/src/vanilla/slice/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type { ValidStoreState } from './base-slice'; -export { BaseSlice } from './base-slice'; -export { Slice, slice } from './slice'; -export type { SliceKey } from './slice-key'; -export { sliceKey } from './slice-key'; diff --git a/src/vanilla/slice/slice-key.ts b/src/vanilla/slice/slice-key.ts deleted file mode 100644 index 4fa3122..0000000 --- a/src/vanilla/slice/slice-key.ts +++ /dev/null @@ -1,217 +0,0 @@ -import { shallowEqual } from '../helpers'; -import type { StoreState, StoreStateKey } from '../store-state'; -import type { - AnySlice, - ExtractReturnTypes, - InferDepNameFromSlice, - InferSliceNameFromSlice, - NoInfer, -} from '../types'; -import type { - CreateSliceOpts, - UserSliceOpts, - ValidStoreState, -} from './base-slice'; -import { BaseSlice } from './base-slice'; -import { Slice } from './slice'; - -type AnyDerivedState = Record>; - -type AnySliceKey = SliceKey; - -export type SelectorOpts = { - equal?: (a: T, b: T) => boolean; -}; - -type SliceKeyToSliceOpts = { - derivedState: TDerived; -}; - -// TODO implement the type -type Selector = ( - storeState: StoreState< - InferSliceNameFromSlice | InferDepNameFromSlice - >, -) => TSelectData; - -export class SliceKey< - TSliceName extends string, - TState extends object, - TDep extends string, -> extends BaseSlice { - /** - * @internal - */ - static create< - TSliceName extends string, - TState extends object, - TDepSlice extends Slice, - >( - opts: CreateSliceOpts< - TSliceName, - TState, - InferSliceNameFromSlice - >, - ): SliceKey> { - return new SliceKey(opts); - } - - private constructor( - public readonly opts: CreateSliceOpts, - ) { - super(opts); - } - - override get( - storeState: ValidStoreState, - ): TState { - return storeState.resolve(this.sliceId, { - skipDerivedData: true, - }) as TState; - } - - selector( - cb: Selector, TSelectData>, - opts: SelectorOpts> = {}, - ): Selector, TSelectData> { - const valCache = new WeakMap, TSelectData>(); - const prevValCache = new WeakMap(); - const equal = opts.equal; - - if (typeof equal === 'function') { - return (storeState) => - equalityGetValue(storeState, cb, valCache, prevValCache, equal); - } - - return (storeState) => getValue(storeState, cb, valCache); - } - - slice( - opts: SliceKeyToSliceOpts, - ): Slice & TState, TDep> { - const derivedEntries = Object.entries(opts.derivedState); - const prevDerivedValueCache = new WeakMap< - StoreStateKey, - Record - >(); - - const newSlice = Slice.create({ - ...this.opts, - sliceId: this.sliceId, - calcDerivedState: (storeState) => { - return calcSliceDerivedState( - storeState, - derivedEntries, - prevDerivedValueCache, - ); - }, - }); - - return newSlice as any; - } -} - -export function sliceKey< - TSliceName extends string, - TState extends object, - TDepSlice extends Slice, ->( - dependencies: TDepSlice[], - opts: Omit< - UserSliceOpts>, - 'dependencies' - >, -): SliceKey> { - return SliceKey.create({ - ...opts, - dependencies, - }); -} - -export function getValue, TSelectData>( - storeState: TStoreState, - selector: Selector, - valCache: WeakMap, TSelectData>, -): TSelectData { - if (valCache.has(storeState)) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - return valCache.get(storeState)!; - } - - const newDerivedValue = selector(storeState); - valCache.set(storeState, newDerivedValue); - - return newDerivedValue; -} - -export function equalityGetValue< - TStoreState extends StoreState, - TSelectData, ->( - storeState: TStoreState, - selector: Selector, - valCache: WeakMap, TSelectData>, - prevValCache: WeakMap, - equalFn: (a: TSelectData, b: TSelectData) => boolean, -): TSelectData { - if (valCache.has(storeState)) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - return valCache.get(storeState)!; - } - - const newDerivedValue = selector(storeState); - - if (!prevValCache.has(storeState._storeStateKey)) { - prevValCache.set(storeState._storeStateKey, newDerivedValue); - valCache.set(storeState, newDerivedValue); - - return newDerivedValue; - } - - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const prevVal = prevValCache.get(storeState._storeStateKey)!; - - if (equalFn(newDerivedValue, prevVal)) { - valCache.set(storeState, prevVal); - - return prevVal; - } - - prevValCache.set(storeState._storeStateKey, newDerivedValue); - valCache.set(storeState, newDerivedValue); - - return newDerivedValue; -} - -/** - * Goes through the new derived state and old derived state and returns the new derived state if it has changed. - * Uses shallow object equality to determine if the derived state has changed. - * TODO: we can optimize this, by skipping the calls of selector if the state or the dependencies have not changed. - */ -export function calcSliceDerivedState( - storeState: StoreState, - derivedEntries: Array<[string, Selector]>, - prevDerivedValueCache: WeakMap>, -): Record { - const newDerivedState = Object.fromEntries( - derivedEntries.map(([selectorKey, selector]) => { - return [selectorKey, selector(storeState)]; - }), - ); - - const prevDerivedState = prevDerivedValueCache.get(storeState._storeStateKey); - - if (!prevDerivedState) { - prevDerivedValueCache.set(storeState._storeStateKey, newDerivedState); - - return newDerivedState; - } - - if (shallowEqual(prevDerivedState, newDerivedState)) { - return prevDerivedState; - } - - prevDerivedValueCache.set(storeState._storeStateKey, newDerivedState); - - return newDerivedState; -} diff --git a/src/vanilla/slice/slice.ts b/src/vanilla/slice/slice.ts deleted file mode 100644 index 74b1ca8..0000000 --- a/src/vanilla/slice/slice.ts +++ /dev/null @@ -1,132 +0,0 @@ -import type { UserActionCallback } from '../action'; -import { Action, ActionBuilder } from '../action'; -import type { UpdaterType } from '../helpers'; -import type { StoreState } from '../store-state'; -import type { Transaction } from '../transaction'; -import type { AnySlice, InferSliceNameFromSlice } from '../types'; -import type { - CreateSliceOpts, - UserSliceOpts, - ValidEffectStore, -} from './base-slice'; -import { BaseSlice } from './base-slice'; - -export class Slice< - TSliceName extends string, - TState extends object, - TDep extends string, -> extends BaseSlice { - /** - * @internal - */ - static create< - TSliceName extends string, - TState extends object, - TDepSlice extends Slice, - >( - opts: CreateSliceOpts< - TSliceName, - TState, - InferSliceNameFromSlice - >, - ): Slice> { - return new Slice(opts); - } - - private constructor( - public readonly opts: CreateSliceOpts, - ) { - super(opts); - } - - simpleAction( - key: TKey, - updater?: ( - val: TState[TKey], - state: StoreState, - ) => Partial, - ) { - return this.action( - (val: TState[TKey]) => { - return this.tx((state) => { - return this.update(state, (existing) => { - if (!updater) { - if (val === existing[key]) { - return existing; - } - - return { - ...existing, - [key]: val, - }; - } - - const newVal = updater(val, state); - - if (newVal === existing[key]) { - return existing; - } - - return newVal; - }); - }); - }, - { - name: `simpleAction(${key.toString()})`, - }, - ); - } - - action( - cb: UserActionCallback>, - opts?: { name?: string }, - ): (...params: TParams) => Transaction { - const action = new Action({ - slice: this, - userCallback: cb, - debugName: opts?.name, - }); - - return action.getTransactionBuilder(); - } - - track( - store: ValidEffectStore, - ): TState { - return new Proxy(this.get(store.state as StoreState), { - get: (target, prop: string) => { - // @ts-expect-error not sure how to fix this - const val = target[prop]; - - store._addTrackedField(this, prop, val); - - return val; - }, - }) as any; - } - - tx( - calcSliceState: ( - storeState: StoreState, - ) => TState | UpdaterType, - ): ActionBuilder { - return new ActionBuilder({ - name: this.name, - calcUserSliceState: calcSliceState, - }); - } -} - -export function slice< - TSliceName extends string, - TState extends object, - TDepSlice extends Slice, ->( - dependencies: TDepSlice[], - opts: Omit< - UserSliceOpts>, - 'dependencies' - >, -): Slice> { - return Slice.create({ ...opts, dependencies }); -} diff --git a/src/vanilla/store-state.ts b/src/vanilla/store-state.ts deleted file mode 100644 index faa8e2c..0000000 --- a/src/vanilla/store-state.ts +++ /dev/null @@ -1,254 +0,0 @@ -import { Action } from './action'; -import { calcReverseDependencies, validateSlices } from './helpers'; -import type { Slice } from './slice'; -import type { Step, Transaction } from './transaction'; -import type { AnySlice, SliceId } from './types'; - -export type StoreStateOpts = { - stateOverride?: Record>; - slices: Array>; -}; - -type StoreStateConfig = - StoreStateOpts & { - slicesLookup: Record>; - storeStateKey: StoreStateKey; - reverseSliceDependencies: Record>; - }; - -export class StoreStateKey { - _storeStateKey = 'StoreStateKey'; -} - -function computeConfig( - opts: StoreStateOpts, -): StoreStateConfig { - const slicesLookup = Object.fromEntries( - opts.slices.map((slice) => [slice.sliceId, slice]), - ); - const storeStateKey = new StoreStateKey(); - - return { - ...opts, - slicesLookup, - storeStateKey, - reverseSliceDependencies: calcReverseDependencies(opts.slices), - }; -} - -export class SliceStateManager { - constructor( - public readonly slice: AnySlice, - public readonly sliceState: Record, - ) {} - - applyStep( - storeState: StoreState, - step: Step, - ): StoreState { - const newSliceState = Action._applyStep(storeState, step); - - if (this.sliceState === newSliceState) { - return storeState; - } - - return storeState._updateSliceStateManager( - new SliceStateManager(this.slice, newSliceState), - ); - } -} - -export class StoreState { - static create(opts: StoreStateOpts) { - validateSlices(opts.slices); - - const sliceStateMap: Record = - Object.fromEntries( - opts.slices.map((slice) => [ - slice.sliceId, - new SliceStateManager(slice, slice.initialState), - ]), - ); - - const config = computeConfig(opts); - - if (opts.stateOverride) { - for (const [sliceId, override] of Object.entries(opts.stateOverride)) { - const id = sliceId as SliceId; - - if (!sliceStateMap[id]) { - throw new Error( - `StoreState.create: slice with id "${id}" does not exist`, - ); - } - sliceStateMap[id] = new SliceStateManager( - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - config.slicesLookup[id]!, - override, - ); - } - } - - return new StoreState(sliceStateMap, config); - } - - private resolveCache: Record = {}; - private constructor( - private sliceStateMap: Record, - protected config: StoreStateConfig, - ) {} - - applyTransaction(txn: Transaction): StoreState { - if (txn.isDestroyed) { - throw new Error( - `StoreState.applyTransaction: cannot apply a destroyed transaction`, - ); - } - - return txn.steps.reduce>((storeState, step) => { - return storeState - .getSliceStateManager(step.targetSliceId) - .applyStep(storeState, step); - }, this); - } - - getSliceState(sliceId: SliceId): unknown { - return this.getSliceStateManager(sliceId).sliceState; - } - - getSliceStateManager(sliceId: SliceId): SliceStateManager { - const manager = this.sliceStateMap[sliceId]; - - if (!manager) { - throw new Error( - `StoreState.resolveSliceState: slice with id "${sliceId}" does not exist`, - ); - } - - return manager; - } - - /** - * @internal - */ - resolve( - sliceId: SliceId, - { skipDerivedData }: { skipDerivedData?: boolean } = {}, - ): unknown { - const sliceStateManager = this.getSliceStateManager(sliceId); - - if (!sliceStateManager.slice.opts.calcDerivedState || skipDerivedData) { - return sliceStateManager.sliceState; - } - - const cached = this.resolveCache[sliceId]; - - if (cached !== undefined) { - return cached; - } - - const derivedState = sliceStateManager.slice.opts.calcDerivedState(this); - const result = { - ...sliceStateManager.sliceState, - ...derivedState, - }; - - this.resolveCache[sliceId] = result; - - return result; - } - - /** - * Returns slices that have changed compared to the provided store state. - * does not take into account slices that were removed in the current store state and exist - * in the provided store state. - * @internal - */ - _getChangedSlices(otherStoreState: StoreState): AnySlice[] { - const diff: AnySlice[] = []; - - Object.values(this.sliceStateMap).forEach((sliceStateManager) => { - const slice = sliceStateManager.slice; - const sliceState = sliceStateManager.sliceState; - - const otherSliceState = - otherStoreState.sliceStateMap[slice.sliceId]?.sliceState; - - if (sliceState !== otherSliceState) { - diff.push(sliceStateManager.slice); - } - }); - - return diff; - } - - /** - * @internal - * A unique key that is shared among all store states of a particular store. - */ - get _storeStateKey() { - return this.config.storeStateKey; - } - - /** - * @internal - */ - _updateSliceStateManager( - sliceStateManager: SliceStateManager, - ): StoreState { - return new StoreState( - { - ...this.sliceStateMap, - [sliceStateManager.slice.sliceId]: sliceStateManager, - }, - this.config, - ); - } -} - -export class RestrictionManager { - private _restrict: Set | undefined = undefined; - private _restrictionOwner: SliceId | undefined = undefined; - - checkRestriction(sliceId: SliceId) { - if (!this._restrictionOwner) { - return; - } - - if (this.isAllowed(sliceId)) { - return; - } - - throw new Error( - `StoreState.getSliceState: slice with id "${sliceId}" cannot be accessed as it is not part of the dependency graph of Slice ${this._restrictionOwner}`, - ); - } - - private isAllowed(sliceId: SliceId) { - return sliceId === this._restrictionOwner || this._restrict?.has(sliceId); - } - - _clearRestriction(owner: SliceId) { - if (this._restrictionOwner !== owner) { - return; - } - - this._restrictionOwner = undefined; - this._restrict = new Set(); - } - - _restrictSliceAndDeps( - owner: SliceId, - reverseSliceDependencies: Record>, - ) { - // Donot further all restriction to a slice that is already inside a restriction - if (this._restrict?.has(owner)) { - return; - } - - const deps = new Set(reverseSliceDependencies[owner]); - - this._restrictionOwner = owner; - this._restrict = deps; - } -} diff --git a/src/vanilla/store.ts b/src/vanilla/store.ts deleted file mode 100644 index 4acdbbf..0000000 --- a/src/vanilla/store.ts +++ /dev/null @@ -1,200 +0,0 @@ -import type { BaseStore, Dispatch } from './base-store'; -import type { Effect, EffectCallback, EffectOpts } from './effect'; -import { effect, EffectManager } from './effect'; -import type { EffectCreator, EffectScheduler } from './effect/effect'; -import { calcReverseDependencies } from './helpers'; -import type { DebugLogger } from './logger'; -import { opLog, txLog } from './logger'; -import type { Operation, OperationCallback, OperationOpts } from './operation'; -import { operation } from './operation'; -import type { Slice } from './slice'; -import type { StoreStateOpts } from './store-state'; -import { StoreState } from './store-state'; -import { - META_DISPATCHER, - Transaction, - TX_META_STORE_NAME, -} from './transaction'; -import type { SliceId } from './types'; - -type StoreOpts = { - slices: Array>; - stateOverride?: NonNullable['stateOverride']>; - dispatchTransaction?: DispatchTransaction; - dispatchOperation?: DispatchOperation; - storeName: string; - debug?: DebugLogger; - - /** - * If true, effects will not be triggered automatically. Instead, you must manually trigger - * them by calling `store.runEffects()`. Useful for testing. - */ - manualEffectsTrigger?: boolean; - /** - * Overrides all effects schedulers for all effects in the store. - */ - overrideEffectScheduler?: EffectScheduler; -}; -type DispatchOperation = (store: Store, operation: Operation) => void; - -type DispatchTransaction = ( - store: Store, - updateState: (state: StoreState) => void, - tx: Transaction, -) => void; - -type InternalStoreConfig = { - slicesLookup: Record>; - reverseSliceDependencies: Record>; -}; - -export const DEFAULT_DISPATCH_TRANSACTION: DispatchTransaction = ( - store, - updateState, - tx, -) => { - const newState = store.state.applyTransaction(tx); - updateState(newState); -}; - -export const DEFAULT_DISPATCH_OPERATION: DispatchOperation = ( - store, - operation, -) => { - operation.run(store); -}; - -export function store( - opts: StoreOpts, -): Store { - return Store.create(opts); -} - -export class Store - implements BaseStore -{ - static create(opts: StoreOpts) { - const slicesLookup = Object.fromEntries( - opts.slices.map((slice) => [slice.sliceId, slice]), - ); - - const config: InternalStoreConfig = { - slicesLookup, - reverseSliceDependencies: calcReverseDependencies(opts.slices), - }; - - return new Store(opts, config); - } - - private updateState = (state: StoreState) => { - const oldState = this._state; - this._state = state; - - if (!this.opts.manualEffectsTrigger) { - this._effectsManager.run(this._state._getChangedSlices(oldState)); - } - }; - - readonly dispatch: Dispatch = (txn, opts) => { - if (this._destroyed) { - return; - } - - txn.metadata.setMetadata(TX_META_STORE_NAME, this.opts.storeName); - - if (opts?.debugInfo) { - txn.metadata.setMetadata(META_DISPATCHER, opts.debugInfo); - } - - if (txn instanceof Transaction) { - this.opts.debug?.(txLog(txn)); - this._dispatchTxn(this, this.updateState, txn); - } else { - const operation = txn; - this.opts.debug?.(opLog(txn)); - this._dispatchOperation(this, operation); - } - }; - - private _abortController = new AbortController(); - private _destroyed = false; - private _dispatchOperation: DispatchOperation; - private _dispatchTxn: DispatchTransaction; - private _effectsManager: EffectManager; - private _state: StoreState; - private constructor( - public readonly opts: StoreOpts, - protected readonly config: InternalStoreConfig, - ) { - this._state = StoreState.create(opts); - - this._dispatchTxn = - opts.dispatchTransaction || DEFAULT_DISPATCH_TRANSACTION; - - this._dispatchOperation = - opts.dispatchOperation || DEFAULT_DISPATCH_OPERATION; - - this._effectsManager = new EffectManager(this.opts.slices, { - debug: this.opts.debug, - }); - } - - get destroyed() { - return this._destroyed; - } - - get destroySignal() { - return this._abortController.signal; - } - - get name() { - return this.opts.storeName; - } - - get state(): StoreState { - return this._state; - } - - destroy() { - this._destroyed = true; - this._effectsManager.destroy(); - this._abortController.abort(); - } - - effect( - callback: EffectCallback>, - opts: Partial = {}, - ): Effect { - const ef = effect(callback, opts)(this); - this._effectsManager.registerEffect(ef); - - return ef; - } - - operation( - cb: OperationCallback, - opts?: OperationOpts, - ) { - const op = operation(opts)(cb); - - return op; - } - - registerEffect(ef: EffectCreator) { - const effect = ef(this); - this._effectsManager.registerEffect(effect); - - return effect; - } - - unregisterEffect(ef: Effect): void { - this._effectsManager.unregisterEffect(ef); - } - - /** - * Runs all effects in the store. Used along with `manualEffectsTrigger` option. - */ - runEffects() { - this._effectsManager.run(); - } -} diff --git a/src/vanilla/transaction.ts b/src/vanilla/transaction.ts deleted file mode 100644 index 68c3b25..0000000 --- a/src/vanilla/transaction.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { idGeneration } from './helpers'; -import type { ActionId, SliceId } from './types'; - -export type Step = { - params: TParams; - actionId: ActionId; - sourceSliceName: string; - sourceSliceId: SliceId; - targetSliceName: TSliceName; - targetSliceId: SliceId; -}; - -export const META_DISPATCHER = 'DEBUG__DISPATCHER'; -export const TX_META_STORE_NAME = 'store-name'; - -type TransactionOpts = {}; - -export class Transaction { - static create(opts: { - name: TSliceName; - params: TParams; - actionId: ActionId; - sourceSliceName: string; - sourceSliceId: SliceId; - }) { - const step: Step = { - params: opts.params, - actionId: opts.actionId, - sourceSliceName: opts.sourceSliceName, - sourceSliceId: opts.sourceSliceId, - targetSliceName: opts.name, - targetSliceId: opts.sourceSliceId, - }; - - return new Transaction([step], {}); - } - - readonly metadata = new Metadata(); - - readonly txId = idGeneration.createTransactionId(); - - protected destroyed = false; - - private constructor( - public readonly steps: ReadonlyArray>, - protected readonly opts: TransactionOpts, - ) {} - - get isDestroyed() { - return this.destroyed; - } - - append( - txn: Transaction, - ): Transaction { - txn.destroyed = true; - this.destroyed = true; - - return new Transaction( - [...this.steps, ...txn.steps], - this.opts, - ); - } -} - -export class Metadata { - private _metadata: Record = Object.create(null); - - appendMetadata(key: string, val: string) { - let existing = this.getMetadata(key); - this.setMetadata(key, existing ? existing + ',' + val : val); - } - - fork(): Metadata { - const meta = new Metadata(); - meta._metadata = { ...this._metadata }; - - return meta; - } - - getMetadata(key: string) { - return this._metadata[key]; - } - - setMetadata(key: string, val: string) { - this._metadata[key] = val; - } -} diff --git a/src/vanilla/types.ts b/src/vanilla/types.ts deleted file mode 100644 index ce3dc62..0000000 --- a/src/vanilla/types.ts +++ /dev/null @@ -1,65 +0,0 @@ -import type { BaseSlice, Slice } from './slice'; -import type { StoreState } from './store-state'; - -export type AnySlice = Slice; - -export type GetStoreState = TSlice extends Slice< - infer TSliceName, - any, - any -> - ? StoreState - : never; - -/** - * Hack for nominal typing - * https://basarat.gitbook.io/typescript/main-1/nominaltyping - */ -declare const __brand: unique symbol; -export type Brand = T & { [__brand]: K }; - -// Magic type that when used at sites where generic types are inferred from, will prevent those sites from being involved in the inference. -// https://github.com/microsoft/TypeScript/issues/14829 -export type NoInfer = [T][T extends any ? 0 : never]; - -export type SliceId = Brand; -export type ActionId = Brand; - -export type IfEquals = (() => G extends T - ? 1 - : 2) extends () => G extends U ? 1 : 2 - ? Y - : N; - -export const expectType = ( - _actual: IfEquals, -) => void 0; - -export type InferSliceNameFromSlice = T extends BaseSlice< - infer TSliceName, - any, - any -> - ? TSliceName - : never; - -export type InferDepNameFromSlice = T extends BaseSlice - ? TDep - : never; - -export type ExtractReturnTypes< - T extends Record any>, -> = { - [K in keyof T]: T[K] extends (...args: any[]) => infer R ? R : never; -} & {}; - -/** - * Returns `true` if type `A` extends type `B`, `false` if not. - * If A is a subtype of B return true - * - * @param A Type - * @param B Type - * @return Boolean - */ -export type DoesExtendBool = [A] extends [B] ? true : false; -export type DoesExtend = [A] extends [B] ? A : never; diff --git a/tsconfig.json b/tsconfig.json index 12527b0..6b7962d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,35 +1,3 @@ { - "compilerOptions": { - "baseUrl": ".", - "esModuleInterop": true, - "exactOptionalPropertyTypes": true, - "jsx": "react-jsx", - "module": "esnext", - "moduleResolution": "node", - "noUncheckedIndexedAccess": true, - "skipLibCheck": true, - "noEmit": true, - "noEmitOnError": false, - "noFallthroughCasesInSwitch": true, - "noImplicitOverride": true, - "forceConsistentCasingInFileNames": true, - "noImplicitAny": true, - "noImplicitReturns": true, - "noPropertyAccessFromIndexSignature": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "pretty": true, - "stripInternal": true, - "strict": true, - "target": "esnext" - }, - "include": [ - "src/**/*.ts", - "src/**/*.tsx", - "examples/**/*.tsx", - "examples/**/*.ts", - "documentation/**/*.ts", - "documentation/**/*.tsx" - ], - "exclude": ["node_modules", "dist"] + "extends": "tsconfig/base.json" } diff --git a/tsup.config.ts b/tsup.config.ts deleted file mode 100644 index aae3262..0000000 --- a/tsup.config.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { defineConfig } from 'tsup'; -import fs from 'node:fs'; -import path from 'node:path'; - -function getChildDirectories(directory: string): string[] { - const childDirectories: string[] = []; - const files = fs.readdirSync(directory); - for (const file of files) { - const filePath = path.join(directory, file); - const stat = fs.statSync(filePath); - if (stat.isDirectory()) { - childDirectories.push(file); - } - } - return childDirectories; -} - -const topPaths = getChildDirectories(path.join(__dirname, 'src')) - .filter((dir) => !dir.includes('__tests__')) - .map((item) => path.basename(item)); - -export default defineConfig({ - format: ['esm', 'cjs'], - entry: ['src/index.ts', ...topPaths.map((item) => `src/${item}/index.ts`)], - splitting: true, - dts: true, - clean: true, - shims: false, - external: ['react', 'zod'], -});