From a45711e81c834d5ea6a7a2b440e697254bf20f90 Mon Sep 17 00:00:00 2001 From: Alexander Khoroshikh <32790736+AlexandrHoroshih@users.noreply.github.com> Date: Tue, 19 Dec 2023 13:19:32 +0700 Subject: [PATCH] Reflect 9.0 (#80) * Enforce 23.1.0 * Remove /ssr and delete /scope * Fix build and commits * Separate public types from sources * Use dist version of the package * Make public types work * Make build work * Fix type-tests resolving * Enforce prior build for code tests * Use vitest * Remove jest * remove jest * Add attw and publint into ci * Fix package issues * Fix type paths * Fix resolved path * Rewrite types for reflect method * Rewrite createReflect types * Bump react * Bump react types * Add another type level edge case * Restore some of the variant types * Restore variant types * generalize bind usage * Make `list` types work * Add JSDoc notation * Use public typings in tests directly * Simplify source typings * Add basic type test for createReflect * Improve types * Enable skipLibCheck in type tests There are a lot of strange stuff in @types/react :shrug: * Improve type inference for callbacks * Add tests for scoped callbacks * Support arbitary callback feature * Add tests for callback in mapItem * Support scopeBind callbacks in mapItem * Document fork api auto-compatibility * Document fork api auto compatibility in `list` * Fix docs view * Add types for fromTag helper * Fix example * implement fromTag * Remove unsued expect error directive * Document `fromTag` * Create types for useUnit config * Fix weird gitignore * Implement `useUnitConfig` field * Do not generate d.mts * Improve wording * fix json formatting * Add more type-tests * Revert to use React.FC type again For some reason, on a real test in Next.js project, the (props: ...) => React.ReactNode type is not compatible in some cases * Add note in the code about type inference --- .config/tsconfig.base.json | 5 +- .github/workflows/test.yml | 5 +- .gitignore | 8 +- babel.config.json | 2 +- build.mjs | 13 +- dist-test/no-ssr/create-reflect.test.tsx | 220 -- dist-test/no-ssr/reflect.test.tsx | 233 -- dist-test/ssr/create-reflect.test.tsx | 128 - dist-test/ssr/reflect.test.tsx | 261 -- docs/pages/docs/_meta.json | 3 +- docs/pages/docs/fromTag.mdx | 57 + docs/pages/docs/list.mdx | 32 +- docs/pages/docs/reflect.mdx | 38 +- docs/pages/docs/variant.mdx | 4 +- jest.config.js | 187 -- package.json | 91 +- pnpm-lock.yaml | 3792 +++++++++------------- public-types/reflect.d.ts | 227 ++ rollup.config.cjs | 45 +- src/core/fromTag.ts | 8 + src/core/index.ts | 1 + src/core/list.ts | 69 +- src/core/reflect.ts | 73 +- src/core/types.ts | 36 +- src/core/variant.ts | 26 +- src/index.ts | 3 + src/no-ssr/create-reflect.test.tsx | 22 +- src/no-ssr/list.test.tsx | 86 +- src/no-ssr/reflect.test.tsx | 213 +- src/no-ssr/variant.test.tsx | 48 +- src/scope.ts | 4 + src/ssr.ts | 4 - src/ssr/create-reflect.test.tsx | 5 +- src/ssr/list.test.tsx | 11 +- src/ssr/reflect.test.tsx | 5 +- src/ssr/variant.test.tsx | 13 +- tsconfig.json | 9 +- type-tests/tsconfig.json | 6 +- type-tests/types-create-reflect.tsx | 26 + type-tests/types-from-tag.ts | 91 + type-tests/types-list.tsx | 28 +- type-tests/types-reflect.tsx | 90 +- type-tests/types-variant.tsx | 70 +- validate_dist.mjs | 16 + vitest.config.mts | 28 + 45 files changed, 2793 insertions(+), 3549 deletions(-) delete mode 100644 dist-test/no-ssr/create-reflect.test.tsx delete mode 100644 dist-test/no-ssr/reflect.test.tsx delete mode 100644 dist-test/ssr/create-reflect.test.tsx delete mode 100644 dist-test/ssr/reflect.test.tsx create mode 100644 docs/pages/docs/fromTag.mdx delete mode 100644 jest.config.js create mode 100644 public-types/reflect.d.ts create mode 100644 src/core/fromTag.ts delete mode 100644 src/ssr.ts create mode 100644 type-tests/types-create-reflect.tsx create mode 100644 type-tests/types-from-tag.ts create mode 100644 validate_dist.mjs create mode 100644 vitest.config.mts diff --git a/.config/tsconfig.base.json b/.config/tsconfig.base.json index 09c04ab..8b7fba9 100644 --- a/.config/tsconfig.base.json +++ b/.config/tsconfig.base.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es6", + "target": "ESNext", "module": "es2015", "strict": true, "lib": ["dom", "dom.iterable", "esnext"], @@ -8,8 +8,9 @@ "allowSyntheticDefaultImports": true, "jsx": "react", "esModuleInterop": true, + "types": ["vitest/globals"], "strictNullChecks": true }, "include": ["../src"], - "exclude": ["../typings", "../**/*.test.tsx"] + "exclude": ["../typings"] } diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 581745d..cc62822 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,10 +24,9 @@ jobs: - name: Build run: pnpm build - - name: Build test - run: pnpm test:code:build - - name: Run tests run: pnpm test env: CI: true + - name: Validate package + run: pnpm validate:dist diff --git a/.gitignore b/.gitignore index 45fbc67..0cc6641 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .DS_Store node_modules +.vscode yarn-error.log @@ -12,12 +13,5 @@ yarn-error.log effector-reflect-* .idea -core/ -./index.* -./ssr.* -./scope.*js -./scope.*map -./scope.d.ts -./reflect.* docs/.next docs/out diff --git a/babel.config.json b/babel.config.json index 1a93f7b..c8d29c4 100644 --- a/babel.config.json +++ b/babel.config.json @@ -1,4 +1,4 @@ { - "presets": ["@babel/preset-env", "@babel/preset-typescript", "@babel/preset-react"], + "presets": ["@babel/preset-typescript", "@babel/preset-react"], "plugins": ["@babel/plugin-transform-runtime"] } diff --git a/build.mjs b/build.mjs index aae085d..dc209d8 100644 --- a/build.mjs +++ b/build.mjs @@ -1,10 +1,19 @@ -import fs from 'node:fs/promises'; - +/* eslint-disable no-undef */ import prettyMs from 'pretty-ms'; import { rollup } from 'rollup'; +import 'zx/globals'; import configs from './rollup.config.cjs'; +await fs.mkdir('./dist', { recursive: true }); + +await measure(`public-typings → ./dist/`, `copied in`, async () => { + await fs.copyFile('./public-types/reflect.d.ts', './dist/index.d.ts'); + + // `@effector/reflect/scope` types - this export is deprecated + await fs.copyFile('./public-types/reflect.d.ts', './dist/scope.d.ts'); +}); + for (const config of configs) { await measure( `${config.input} → ${config.output.file ?? config.output.dir}`, diff --git a/dist-test/no-ssr/create-reflect.test.tsx b/dist-test/no-ssr/create-reflect.test.tsx deleted file mode 100644 index 0afafe8..0000000 --- a/dist-test/no-ssr/create-reflect.test.tsx +++ /dev/null @@ -1,220 +0,0 @@ -import { createReflect } from '../../dist/reflect'; -import { render } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { createEffect, createEvent, createStore, restore } from 'effector'; -import React, { FC, InputHTMLAttributes } from 'react'; -import { act } from 'react-dom/test-utils'; - -// Example1 (InputCustom) -const InputCustom: FC<{ - value: string | number | string[]; - onChange(value: string): void; - testId: string; - placeholder?: string; -}> = (props) => { - return ( - props.onChange(event.currentTarget.value)} - /> - ); -}; - -const inputCustom = createReflect(InputCustom); - -test('InputCustom', async () => { - const change = createEvent(); - const $name = restore(change, ''); - - const Name = inputCustom({ value: $name, onChange: change }); - - const container = render(); - - expect($name.getState()).toBe(''); - await userEvent.type(container.getByTestId('name'), 'Bob'); - expect($name.getState()).toBe('Bob'); - - const inputName = container.container.firstChild as HTMLInputElement; - expect(inputName.value).toBe('Bob'); -}); - -test('InputCustom [replace value]', async () => { - const change = createEvent(); - const $name = createStore(''); - - $name.on(change, (_, next) => next); - - const Name = inputCustom({ name: $name, onChange: change }); - - const container = render(); - - expect($name.getState()).toBe(''); - await userEvent.type(container.getByTestId('name'), 'Bob'); - expect($name.getState()).toBe('Aliseb'); - - const inputName = container.container.firstChild as HTMLInputElement; - expect(inputName.value).toBe('Alise'); -}); - -// Example 2 (InputBase) -const InputBase: FC> = (props) => { - return ; -}; - -const inputBase = createReflect(InputBase); - -test('InputBase', async () => { - const changeName = createEvent(); - const $name = restore(changeName, ''); - - const Name = inputBase({ - value: $name, - onChange: (event) => changeName(event.currentTarget.value), - }); - - const changeAge = createEvent(); - const $age = restore(changeAge, 0); - const Age = inputBase({ - value: $age, - onChange: (event) => { - changeAge(Number.parseInt(event.currentTarget.value, 10)); - }, - }); - - const container = render( - <> - - - , - ); - - expect($name.getState()).toBe(''); - await userEvent.type(container.getByTestId('name'), 'Bob'); - expect($name.getState()).toBe('Bob'); - - expect($age.getState()).toBe(0); - await userEvent.type(container.getByTestId('age'), '25'); - expect($age.getState()).toBe(25); - - const inputName = container.getByTestId('name') as HTMLInputElement; - expect(inputName.value).toBe('Bob'); - - const inputAge = container.getByTestId('age') as HTMLInputElement; - expect(inputAge.value).toBe('25'); -}); - -describe('hooks', () => { - describe('mounted', () => { - test('callback', () => { - const changeName = createEvent(); - const $name = restore(changeName, ''); - - const mounted = jest.fn(() => {}); - - const Name = inputBase( - { - value: $name, - onChange: changeName.prepend((event) => event.currentTarget.value), - }, - { hooks: { mounted } }, - ); - - render(); - - expect(mounted.mock.calls.length).toBe(1); - }); - - test('event', () => { - const changeName = createEvent(); - const $name = restore(changeName, ''); - const mounted = createEvent(); - - const fn = jest.fn(() => {}); - - mounted.watch(fn); - - const Name = inputBase( - { - value: $name, - onChange: changeName.prepend((event) => event.currentTarget.value), - }, - { hooks: { mounted } }, - ); - - render(); - - expect(fn.mock.calls.length).toBe(1); - }); - }); - - describe('unmounted', () => { - const changeVisible = createEffect({ handler: () => {} }); - const $visible = restore( - changeVisible.finally.map(({ params }) => params), - true, - ); - - const Branch = createReflect<{ visible: boolean }>(({ visible, children }) => - visible ? <>{children} : null, - )({ - visible: $visible, - }); - - beforeEach(() => { - act(() => { - changeVisible(true); - }); - }); - - test('callback', () => { - const changeName = createEvent(); - const $name = restore(changeName, ''); - - const unmounted = jest.fn(() => {}); - - const Name = inputBase( - { - value: $name, - onChange: changeName.prepend((event) => event.currentTarget.value), - }, - { hooks: { unmounted } }, - ); - - render(, { wrapper: Branch }); - - act(() => { - changeVisible(false); - }); - - expect(unmounted.mock.calls.length).toBe(1); - }); - - test('event', () => { - const changeName = createEvent(); - const $name = restore(changeName, ''); - - const unmounted = createEvent(); - const fn = jest.fn(() => {}); - - unmounted.watch(fn); - - const Name = inputBase( - { - value: $name, - onChange: changeName.prepend((event) => event.currentTarget.value), - }, - { hooks: { unmounted } }, - ); - - render(, { wrapper: Branch }); - - act(() => { - changeVisible(false); - }); - - expect(fn.mock.calls.length).toBe(1); - }); - }); -}); diff --git a/dist-test/no-ssr/reflect.test.tsx b/dist-test/no-ssr/reflect.test.tsx deleted file mode 100644 index 00b2be3..0000000 --- a/dist-test/no-ssr/reflect.test.tsx +++ /dev/null @@ -1,233 +0,0 @@ -import { reflect } from '../../dist/reflect'; -import { render } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { createEffect, createEvent, createStore, restore } from 'effector'; -import React, { ChangeEvent, FC, InputHTMLAttributes } from 'react'; -import { act } from 'react-dom/test-utils'; - -// Example1 (InputCustom) -const InputCustom: FC<{ - value: string | number | string[]; - onChange(value: string): void; - testId: string; - placeholder?: string; -}> = (props) => { - return ( - props.onChange(event.currentTarget.value)} - /> - ); -}; - -test('InputCustom', async () => { - const change = createEvent(); - const $name = restore(change, ''); - - const Name = reflect({ - view: InputCustom, - bind: { value: $name, onChange: change }, - }); - - const container = render(); - - expect($name.getState()).toBe(''); - await userEvent.type(container.getByTestId('name'), 'Bob'); - expect($name.getState()).toBe('Bob'); - - const inputName = container.container.firstChild as HTMLInputElement; - expect(inputName.value).toBe('Bob'); -}); - -test('InputCustom [replace value]', async () => { - const change = createEvent(); - const $name = createStore(''); - - $name.on(change, (_, next) => next); - - const Name = reflect({ - view: InputCustom, - bind: { name: $name, onChange: change }, - }); - - const container = render(); - - expect($name.getState()).toBe(''); - await userEvent.type(container.getByTestId('name'), 'Bob'); - expect($name.getState()).toBe('Aliseb'); - - const inputName = container.container.firstChild as HTMLInputElement; - expect(inputName.value).toBe('Alise'); -}); - -// Example 2 (InputBase) -const InputBase: FC> = (props) => { - return ; -}; - -test('InputBase', async () => { - const changeName = createEvent(); - const $name = restore(changeName, ''); - - const inputChanged = (event: ChangeEvent) => { - return event.currentTarget.value; - }; - - const Name = reflect({ - view: InputBase, - bind: { - value: $name, - onChange: changeName.prepend(inputChanged), - }, - }); - - const changeAge = createEvent(); - const $age = restore(changeAge, 0); - const Age = reflect({ - view: InputBase, - bind: { - value: $age, - onChange: changeAge.prepend(parseInt).prepend(inputChanged), - }, - }); - - const container = render( - <> - - - , - ); - - expect($name.getState()).toBe(''); - await userEvent.type(container.getByTestId('name'), 'Bob'); - expect($name.getState()).toBe('Bob'); - - expect($age.getState()).toBe(0); - await userEvent.type(container.getByTestId('age'), '25'); - expect($age.getState()).toBe(25); - - const inputName = container.getByTestId('name') as HTMLInputElement; - expect(inputName.value).toBe('Bob'); - - const inputAge = container.getByTestId('age') as HTMLInputElement; - expect(inputAge.value).toBe('25'); -}); - -describe('hooks', () => { - describe('mounted', () => { - test('callback', () => { - const changeName = createEvent(); - const $name = restore(changeName, ''); - - const mounted = jest.fn(() => {}); - - const Name = reflect({ - view: InputBase, - bind: { - value: $name, - onChange: changeName.prepend((event) => event.currentTarget.value), - }, - hooks: { mounted }, - }); - - render(); - - expect(mounted.mock.calls.length).toBe(1); - }); - - test('event', () => { - const changeName = createEvent(); - const $name = restore(changeName, ''); - const mounted = createEvent(); - - const fn = jest.fn(() => {}); - - mounted.watch(fn); - - const Name = reflect({ - view: InputBase, - bind: { - value: $name, - onChange: changeName.prepend((event) => event.currentTarget.value), - }, - hooks: { mounted }, - }); - - render(); - - expect(fn.mock.calls.length).toBe(1); - }); - }); - - describe('unmounted', () => { - const changeVisible = createEffect({ handler: () => {} }); - const $visible = restore( - changeVisible.finally.map(({ params }) => params), - true, - ); - - const Branch = reflect<{ visible: boolean }>({ - view: ({ visible, children }) => (visible ? <>{children} : null), - bind: { visible: $visible }, - }); - - beforeEach(() => { - act(() => { - changeVisible(true); - }); - }); - - test('callback', () => { - const changeName = createEvent(); - const $name = restore(changeName, ''); - - const unmounted = jest.fn(() => {}); - - const Name = reflect({ - view: InputBase, - bind: { - value: $name, - onChange: changeName.prepend((event) => event.currentTarget.value), - }, - hooks: { unmounted }, - }); - - render(, { wrapper: Branch }); - - act(() => { - changeVisible(false); - }); - - expect(unmounted.mock.calls.length).toBe(1); - }); - - test('event', () => { - const changeName = createEvent(); - const $name = restore(changeName, ''); - - const unmounted = createEvent(); - const fn = jest.fn(() => {}); - - unmounted.watch(fn); - - const Name = reflect({ - view: InputBase, - bind: { - value: $name, - onChange: changeName.prepend((event) => event.currentTarget.value), - }, - hooks: { unmounted }, - }); - - render(, { wrapper: Branch }); - - act(() => { - changeVisible(false); - }); - - expect(fn.mock.calls.length).toBe(1); - }); - }); -}); diff --git a/dist-test/ssr/create-reflect.test.tsx b/dist-test/ssr/create-reflect.test.tsx deleted file mode 100644 index f45d4f6..0000000 --- a/dist-test/ssr/create-reflect.test.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import { createReflect } from '../../dist/scope'; -import { render } from '@testing-library/react'; -import { allSettled, createDomain, fork, restore } from 'effector'; -import { Provider } from 'effector-react/scope'; -import React, { ChangeEvent, FC, InputHTMLAttributes } from 'react'; - -// Example1 (InputCustom) -const InputCustom: FC<{ - value: string | number | string[]; - onChange(value: string): void; - testId: string; - placeholder?: string; -}> = (props) => { - return ( - props.onChange(event.currentTarget.value)} - /> - ); -}; - -const inputCustom = createReflect(InputCustom); - -test('InputCustom', async () => { - const app = createDomain(); - - const change = app.createEvent(); - const $name = restore(change, ''); - - const Name = inputCustom({ value: $name, onChange: change }); - - const scope = fork(app); - - expect(scope.getState($name)).toBe(''); - await allSettled(change, { scope, params: 'Bob' }); - expect(scope.getState($name)).toBe('Bob'); - - const container = render( - - - , - ); - - const inputName = container.container.firstChild as HTMLInputElement; - expect(inputName.value).toBe('Bob'); -}); - -test('InputCustom [replace value]', async () => { - const app = createDomain(); - - const change = app.createEvent(); - const $name = app.createStore(''); - - $name.on(change, (_, next) => next); - - const Name = inputCustom({ name: $name, onChange: change }); - - const scope = fork(app); - - expect(scope.getState($name)).toBe(''); - await allSettled(change, { scope, params: 'Bob' }); - expect(scope.getState($name)).toBe('Bob'); - - const container = render( - - - , - ); - - const inputName = container.container.firstChild as HTMLInputElement; - expect(inputName.value).toBe('Alise'); -}); - -// Example 2 (InputBase) -const InputBase: FC> = (props) => { - return ; -}; - -const inputBase = createReflect(InputBase); - -test('InputBase', async () => { - const app = createDomain(); - - const changeName = app.createEvent(); - const $name = restore(changeName, ''); - - const inputChanged = (event: ChangeEvent) => { - return event.currentTarget.value; - }; - - const Name = inputBase({ - value: $name, - onChange: changeName.prepend(inputChanged), - }); - - const changeAge = app.createEvent(); - const $age = restore(changeAge, 0); - - const Age = inputBase({ - value: $age, - onChange: changeAge.prepend(parseInt).prepend(inputChanged), - }); - - const scope = fork(app); - - expect(scope.getState($name)).toBe(''); - await allSettled(changeName, { scope, params: 'Bob' }); - expect(scope.getState($name)).toBe('Bob'); - - expect(scope.getState($age)).toBe(0); - await allSettled(changeAge, { scope, params: 25 }); - expect(scope.getState($age)).toBe(25); - - const container = render( - - - - , - ); - - const inputName = container.getByTestId('name') as HTMLInputElement; - expect(inputName.value).toBe('Bob'); - - const inputAge = container.getByTestId('age') as HTMLInputElement; - expect(inputAge.value).toBe('25'); -}); diff --git a/dist-test/ssr/reflect.test.tsx b/dist-test/ssr/reflect.test.tsx deleted file mode 100644 index 2e6bd65..0000000 --- a/dist-test/ssr/reflect.test.tsx +++ /dev/null @@ -1,261 +0,0 @@ -import { reflect } from '../../dist/scope'; -import { render } from '@testing-library/react'; -import userEvent from '@testing-library/user-event'; -import { allSettled, createDomain, fork, restore } from 'effector'; -import { Provider } from 'effector-react/scope'; -import React, { ChangeEvent, FC, InputHTMLAttributes } from 'react'; - -// Example1 (InputCustom) -const InputCustom: FC<{ - value: string | number | string[]; - onChange(value: string): void; - testId: string; - placeholder?: string; -}> = (props) => { - return ( - props.onChange(event.currentTarget.value)} - /> - ); -}; - -test('InputCustom', async () => { - const app = createDomain(); - - const change = app.createEvent(); - const $name = restore(change, ''); - - const Name = reflect({ - view: InputCustom, - bind: { value: $name, onChange: change }, - }); - - const scope = fork(app); - - expect(scope.getState($name)).toBe(''); - await allSettled(change, { scope, params: 'Bob' }); - expect(scope.getState($name)).toBe('Bob'); - - const container = render( - - - , - ); - - const inputName = container.container.firstChild as HTMLInputElement; - expect(inputName.value).toBe('Bob'); -}); - -test('InputCustom [replace value]', async () => { - const app = createDomain(); - - const change = app.createEvent(); - const $name = app.createStore(''); - - $name.on(change, (_, next) => next); - - const Name = reflect({ - view: InputCustom, - bind: { name: $name, onChange: change }, - }); - - const scope = fork(app); - - expect(scope.getState($name)).toBe(''); - await allSettled(change, { scope, params: 'Bob' }); - expect(scope.getState($name)).toBe('Bob'); - - const container = render( - - - , - ); - - const inputName = container.container.firstChild as HTMLInputElement; - expect(inputName.value).toBe('Alise'); -}); - -// Example 2 (InputBase) -const InputBase: FC> = (props) => { - return ; -}; - -test('InputBase', async () => { - const app = createDomain(); - - const changeName = app.createEvent(); - const $name = restore(changeName, ''); - - const inputChanged = (event: ChangeEvent) => { - return event.currentTarget.value; - }; - - const Name = reflect({ - view: InputBase, - bind: { - value: $name, - onChange: changeName.prepend(inputChanged), - }, - }); - - const changeAge = app.createEvent(); - const $age = restore(changeAge, 0); - - const Age = reflect({ - view: InputBase, - bind: { - value: $age, - onChange: changeAge.prepend(parseInt).prepend(inputChanged), - }, - }); - - const scope = fork(app); - - expect(scope.getState($name)).toBe(''); - await allSettled(changeName, { scope, params: 'Bob' }); - expect(scope.getState($name)).toBe('Bob'); - - expect(scope.getState($age)).toBe(0); - await allSettled(changeAge, { scope, params: 25 }); - expect(scope.getState($age)).toBe(25); - - const container = render( - - - - , - ); - - const inputName = container.getByTestId('name') as HTMLInputElement; - expect(inputName.value).toBe('Bob'); - - const inputAge = container.getByTestId('age') as HTMLInputElement; - expect(inputAge.value).toBe('25'); -}); - -test('with ssr for client', async () => { - const app = createDomain(); - - const changeName = app.createEvent(); - const $name = restore(changeName, ''); - - const Name = reflect({ - view: (props: { - value: string; - onChange: (_event: ChangeEvent) => void; - }) => { - return ( - - ); - }, - bind: { - value: $name, - onChange: changeName.prepend((event) => event.currentTarget.value), - }, - }); - - const scope = fork(app); - - const container = render( - - - , - ); - - expect(scope.getState($name)).toBe(''); - await userEvent.type(container.getByTestId('name'), 'Bob'); - expect(scope.getState($name)).toBe('Bob'); - - const inputName = container.getByTestId('name') as HTMLInputElement; - expect(inputName.value).toBe('Bob'); -}); - -test('two scopes', async () => { - const app = createDomain(); - - const changeName = app.createEvent(); - const $name = restore(changeName, ''); - - const Name = reflect({ - view: InputCustom, - bind: { value: $name, onChange: changeName }, - }); - - const scope1 = fork(app); - const scope2 = fork(app); - - expect(scope2.getState($name)).toBe(''); - await allSettled(changeName, { scope: scope2, params: 'Alise' }); - expect(scope2.getState($name)).toBe('Alise'); - - expect(scope1.getState($name)).toBe(''); - await allSettled(changeName, { scope: scope1, params: 'Bob' }); - expect(scope1.getState($name)).toBe('Bob'); - - const container2 = render( - - - , - ); - const container1 = render( - - - , - ); - - const inputName1 = container1.getByTestId('name1') as HTMLInputElement; - const inputName2 = container2.getByTestId('name2') as HTMLInputElement; - - await allSettled(changeName, { scope: scope2, params: 'Alise' }); - await allSettled(changeName, { scope: scope1, params: 'Bob' }); - - expect(scope1.getState($name)).toBe('Bob'); - expect(scope2.getState($name)).toBe('Alise'); - - expect(inputName1.value).toBe('Bob'); - expect(inputName2.value).toBe('Alise'); -}); - -test('use only event for bind', async () => { - const app = createDomain(); - - const changeName = app.createEvent(); - const $name = restore(changeName, ''); - - const changeAge = app.createEvent(); - - const Name = reflect({ - view: InputBase, - bind: { - value: $name, - onChange: changeName.prepend((event) => event.currentTarget.value), - }, - }); - - const Age = reflect({ - view: InputBase, - bind: { - onChange: changeAge.prepend((event) => - Number.parseInt(event.currentTarget.value, 10), - ), - }, - }); - - const scope = fork(app); - - const container = render( - - - - , - ); - - const name = container.getByTestId('name') as HTMLInputElement; - const age = container.getByTestId('age') as HTMLInputElement; - - expect(name.value).toBe(''); - expect(age.value).toBe(''); -}); diff --git a/docs/pages/docs/_meta.json b/docs/pages/docs/_meta.json index 0c6183e..39651a0 100644 --- a/docs/pages/docs/_meta.json +++ b/docs/pages/docs/_meta.json @@ -4,5 +4,6 @@ "variant": "variant", "list": "list", "create-reflect": "createReflect", - "hooks": "Reflect Hooks" + "hooks": "Reflect Hooks", + "fromTag": "fromTag" } diff --git a/docs/pages/docs/fromTag.mdx b/docs/pages/docs/fromTag.mdx new file mode 100644 index 0000000..edb6265 --- /dev/null +++ b/docs/pages/docs/fromTag.mdx @@ -0,0 +1,57 @@ +# `fromTag` + +```ts +import { fromTag } from '@effector/reflect'; +``` + +```ts +const DomInput = fromTag('input'); +``` + +**This feature is available since `9.0.0` release of Reflect.** + +Helper to simplify `reflect` usage with pure DOM elements by creating simple components based on a html tag. +Such cases can happen, when project uses tools like Tailwind. + +## Arguments + +1. `htmlTag` - any valid and React-supported html tag. + +## Returns + +- React Component, which renders dom element. + +## Example + +Tailwind users sometimes don't create components, but simply compose classes to apply to regular HTML elements. + +```ts +import { fromTag, reflect } from '@effector/reflect'; + +const DomInput = fromTag('input'); + +const inputEl = cva('px-3 py-2', { + variants: { + size: { + base: 'text-base', + large: 'text-3xl', + }, + }, +}); + +const NameField = reflect({ + view: DomInput, + bind: { + type: 'email', + value: $value, + className: inputEl({ size: $inputSize }), + }, +}); +``` + +### Type inference caveat + +For some reason Typescript type inference works a bit worse, when `fromTag` call is inlined into `reflect` - specifically, callback types are not properly inferred. +Typescript still will check it properly, if you type your callback manually though. 🤷‍♂️ + +It is recommended to save `fromTag` call result into separate variable instead, since for some reason it works better with TS. diff --git a/docs/pages/docs/list.mdx b/docs/pages/docs/list.mdx index dfe27f7..218132b 100644 --- a/docs/pages/docs/list.mdx +++ b/docs/pages/docs/list.mdx @@ -1,8 +1,7 @@ - # `list` ```ts -import {list} from '@effector/reflect' +import { list } from '@effector/reflect'; ``` ```tsx @@ -32,6 +31,7 @@ Method creates component, which renders list of `view` components based on items 1. `bind` — Optional object of stores, events, and static values that will be bound as props to every list item. 1. [`hooks`](/docs/hooks) — Optional object `{ mounted, unmounted }` to handle when any list item component is mounted or unmounted. 1. `getKey` - Optional function `(item: Item) => React.Key` to set key for every item in the list to help React with effecient rerenders. If not provided, index is used. See [`effector-react`](https://effector.dev/docs/api/effector-react/useList) docs for more details. +1. `useUnitConfig` - Optional configuration object, which is passed directly to the second argument of `useUnit` from `effector-react`. ## Returns @@ -78,3 +78,31 @@ const Items = list({ ; ``` + +### Fork API auto-compatibility + +**This feature is available since `9.0.0` release of Reflect.** + +The `list` operator also supports automatic Fork API support for callbacks **created** from `mapItem`: + +```ts +const userChanged = createEvent(); +const Items = list({ + view: Item, + source: $users, + bind: { + color: $color, + }, + mapItem: { + id: (user) => user.id, + name: (user) => user.name, + onChange: (user) => (nextUser) => { + userChanged({ oldUser: user, nextUser }); + }, + }, + getKey: (user) => `${user.id}${user.name}`, +}); +``` + +☝️ Notice, how `mapItem.onChange` creates a event handler callback for every rendered item. Those callbacks are also binded to Scope, if it is provided. +For more details read the "Fork API auto-compatibility" part of the `reflect` operator documentation. diff --git a/docs/pages/docs/reflect.mdx b/docs/pages/docs/reflect.mdx index 3a14fb5..828a53e 100644 --- a/docs/pages/docs/reflect.mdx +++ b/docs/pages/docs/reflect.mdx @@ -1,8 +1,7 @@ - # `reflect` ```ts -import {reflect} from '@effector/reflect' +import { reflect } from '@effector/reflect'; ``` ```tsx @@ -20,6 +19,7 @@ Static method to create a component bound to effector stores and events as store 1. `view` — A react component that should be used to bind to 1. `bind` — Object of effector stores, events or any value 1. [`hooks`](/docs/hooks) — Optional object `{ mounted, unmounted }` to handle when component is mounted or unmounted. +1. `useUnitConfig` - Optional configuration object, which is passed directly to the second argument of `useUnit` from `effector-react`. ## Returns @@ -27,7 +27,7 @@ Static method to create a component bound to effector stores and events as store ## Example - ```tsx +```tsx // ./user.tsx import { reflect } from '@effector/reflect'; import { createEvent, restore } from 'effector'; @@ -83,3 +83,35 @@ export const User: FC = () => { ); }; ``` + +### Fork API auto-compatibility + +**This feature is available since `9.0.0` release of Reflect.** + +The [Fork API](https://effector.dev/en/api/effector/fork/) - is a feature of Effector, which allows to seamlessly create virtualized instances of the application's state and logic called [Scope](https://effector.dev/en/api/effector/scope/)'s. +In React to render an App in specific `Scope` a [Provider](https://effector.dev/en/api/effector-react/provider/) component should be used. + +When an external system (like React) calls an Effector event and Fork API is used - target `Scope` should be provided before call via `allSettled` or `scopeBind` API. + +The `reflect` operator does it for you under the hood, so you can provide arbitary callbacks into `bind`: + +```tsx +const Age = reflect({ + view: Input, + bind: { + value: $age, + placeholder: 'Age', + onChange: (event) => { + changeAge(parseInt(event.currentTarget.value)); + }, + }, +}); +``` + +☝️ This feature works for `bind` field in all of Reflect operators. + +In most cases your callbacks will be synchronous and you will not need to do anything besides using [Provider](https://effector.dev/en/api/effector-react/provider/) to set the Scope for the whole React tree. + +#### Special case: Asynchronous callbacks + +Asynchronous callbacks are also allowed, but those should follow the rules of [Imperative Effect calls with Scope](https://effector.dev/en/api/effector/scope/) to be compatible. diff --git a/docs/pages/docs/variant.mdx b/docs/pages/docs/variant.mdx index 425d788..0b3a041 100644 --- a/docs/pages/docs/variant.mdx +++ b/docs/pages/docs/variant.mdx @@ -1,8 +1,7 @@ - # `variant` ```ts -import {variant} from '@effector/reflect' +import { variant } from '@effector/reflect'; ``` ```tsx @@ -24,6 +23,7 @@ Method allows to change component based on value in `$typeSelector`. Optional `b 1. `cases` — Object of components, key will be used to match 1. `default` — Optional component, that would be used if no matched in `cases` 1. [`hooks`](/docs/hooks) — Optional object `{ mounted, unmounted }` to handle when component is mounted or unmounted. +1. `useUnitConfig` - Optional configuration object, which is passed directly to the second argument of `useUnit` from `effector-react`. ## Example diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 75f4f37..0000000 --- a/jest.config.js +++ /dev/null @@ -1,187 +0,0 @@ -/* - * For a detailed explanation regarding each configuration property and type check, visit: - * https://jestjs.io/docs/en/configuration.html - */ - -module.exports = { - // All imported modules in your tests should be mocked automatically - // automock: false, - - // Stop running tests after `n` failures - // bail: 0, - - // The directory where Jest should store its cached dependency information - // cacheDirectory: "/private/var/folders/hz/yzcpd231371g28ykrmnw6_ym0000gn/T/jest_dx", - - // Automatically clear mock calls and instances between every test - clearMocks: true, - - // Indicates whether the coverage information should be collected while executing the test - // collectCoverage: false, - - // An array of glob patterns indicating a set of files for which coverage information should be collected - // collectCoverageFrom: undefined, - - // The directory where Jest should output its coverage files - // coverageDirectory: undefined, - - // An array of regexp pattern strings used to skip coverage collection - // coveragePathIgnorePatterns: [ - // "/node_modules/" - // ], - - // Indicates which provider should be used to instrument code for coverage - // coverageProvider: "babel", - - // A list of reporter names that Jest uses when writing coverage reports - // coverageReporters: [ - // "json", - // "text", - // "lcov", - // "clover" - // ], - - // An object that configures minimum threshold enforcement for coverage results - // coverageThreshold: undefined, - - // A path to a custom dependency extractor - // dependencyExtractor: undefined, - - // Make calling deprecated APIs throw helpful error messages - // errorOnDeprecated: false, - - // Force coverage collection from ignored files using an array of glob patterns - // forceCoverageMatch: [], - - // A path to a module which exports an async function that is triggered once before all test suites - // globalSetup: undefined, - - // A path to a module which exports an async function that is triggered once after all test suites - // globalTeardown: undefined, - - // A set of global variables that need to be available in all test environments - // globals: {}, - - // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. - // maxWorkers: "50%", - - // An array of directory names to be searched recursively up from the requiring module's location - // moduleDirectories: [ - // "node_modules" - // ], - - // An array of file extensions your modules use - moduleFileExtensions: ['js', 'cjs', 'json', 'jsx', 'ts', 'tsx', 'node'], - - // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module - // moduleNameMapper: {}, - - // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader - // modulePathIgnorePatterns: [], - - // Activates notifications for test results - // notify: false, - - // An enum that specifies notification mode. Requires { notify: true } - // notifyMode: "failure-change", - - // A preset that is used as a base for Jest's configuration - // preset: undefined, - - // Run tests from one or more projects - // projects: undefined, - - // Use this configuration option to add custom reporters to Jest - // reporters: undefined, - - // Automatically reset mock state between every test - // resetMocks: false, - - // Reset the module registry before running each individual test - // resetModules: false, - - // A path to a custom resolver - // resolver: undefined, - - // Automatically restore mock state between every test - // restoreMocks: false, - - // The root directory that Jest should scan for tests and modules within - // rootDir: undefined, - - // A list of paths to directories that Jest should use to search for files in - // roots: [ - // "" - // ], - - // Allows you to use a custom runner instead of Jest's default test runner - // runner: "jest-runner", - - // The paths to modules that run some code to configure or set up the testing environment before each test - // setupFiles: [], - - // A list of paths to modules that run some code to configure or set up the testing framework before each test - // setupFilesAfterEnv: [], - - // The number of seconds after which a test is considered as slow and reported as such in the results. - // slowTestThreshold: 5, - - // A list of paths to snapshot serializer modules Jest should use for snapshot testing - // snapshotSerializers: [], - - // The test environment that will be used for testing - testEnvironment: 'jsdom', - - // Options that will be passed to the testEnvironment - // testEnvironmentOptions: {}, - - // Adds a location field to test results - // testLocationInResults: false, - - // The glob patterns Jest uses to detect test files - // testMatch: [ - // "**/__tests__/**/*.[jt]s?(x)", - // "**/?(*.)+(spec|test).[tj]s?(x)" - // ], - - // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - // testPathIgnorePatterns: [ - // "/node_modules/" - // ], - - // The regexp pattern or array of patterns that Jest uses to detect test files - // testRegex: [], - - // This option allows the use of a custom results processor - // testResultsProcessor: undefined, - - // This option allows use of a custom test runner - // testRunner: "jasmine2", - - // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href - // testURL: "http://localhost", - - // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" - // timers: "real", - - // A map from regular expressions to paths to transformers - // transform: undefined, - - // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - // transformIgnorePatterns: [ - // "/node_modules/", - // "\\.pnp\\.[^\\/]+$" - // ], - - // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them - // unmockedModulePathPatterns: undefined, - - // Indicates whether each individual test should be reported during the run - // verbose: undefined, - - // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode - // watchPathIgnorePatterns: [], - - // Whether to use watchman for file crawling - // watchman: true, -}; diff --git a/package.json b/package.json index ed2d61c..4430402 100644 --- a/package.json +++ b/package.json @@ -15,19 +15,10 @@ "exports": { ".": { "types": "./index.d.ts", - "import": "./reflect.mjs", - "require": "./reflect.cjs", - "default": "./reflect.mjs" + "import": "./index.mjs", + "require": "./index.cjs", + "default": "./index.mjs" }, - "./reflect.mjs": "./reflect.mjs", - "./ssr.mjs": "./ssr.mjs", - "./ssr": { - "types": "./ssr.d.ts", - "import": "./ssr.mjs", - "require": "./ssr.js", - "default": "./ssr.mjs" - }, - "./scope.mjs": "./scope.mjs", "./scope": { "types": "./scope.d.ts", "import": "./scope.mjs", @@ -35,8 +26,8 @@ "default": "./scope.mjs" } }, - "main": "reflect.cjs", - "module": "reflect.mjs", + "main": "index.cjs", + "module": "index.mjs", "typings": "index.d.ts", "files": [ "Readme.md", @@ -44,71 +35,71 @@ "index.d.ts", "ssr.d.ts", "scope.d.ts", - "reflect.cjs", - "reflect.cjs.map", - "reflect.mjs", - "reflect.mjs.map", - "ssr.js", - "ssr.js.map", - "ssr.mjs", - "ssr.mjs.map", + "index.cjs", + "index.cjs.map", + "index.mjs", + "index.mjs.map", "scope.js", "scope.js.map", "scope.mjs", "scope.mjs.map" ], "scripts": { - "test:code": "jest ./src", + "validate:dist": "node ./validate_dist.mjs", + "test:code": "vitest run ./src", "test:types": "tsc -p ./type-tests", "test": "pnpm test:code && pnpm test:types", - "test:code:build": "jest ./dist-test", "build": "pnpm clear-build && node ./build.mjs", "clear-build": "rm -rf dist", "prepublishOnly": "pnpm build", "prepare": "husky install" }, "devDependencies": { - "@babel/core": "^7.12.7", - "@babel/plugin-transform-runtime": "^7.12.1", - "@babel/preset-env": "^7.12.7", - "@babel/preset-react": "^7.12.7", - "@babel/preset-typescript": "^7.12.7", + "@arethetypeswrong/cli": "^0.13.3", + "@babel/core": "^7.21.0", + "@babel/plugin-transform-runtime": "^7.21.0", + "@babel/preset-env": "^7.20.2", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.21.0", "@rollup/plugin-babel": "^6.0.3", "@rollup/plugin-commonjs": "^24.0.1", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-terser": "^0.4.0", - "@testing-library/dom": "^7.21.4", - "@testing-library/react": "^11.2.2", - "@testing-library/user-event": "^12.2.2", + "@testing-library/dom": "^7.31.2", + "@testing-library/react": "^11.2.7", + "@testing-library/user-event": "^12.8.3", "@trivago/prettier-plugin-sort-imports": "^4.1.1", - "@types/jest": "^26.0.15", - "@types/react": "^16.9.0", - "@types/react-dom": "^16.9.0", + "@types/jest": "^26.0.24", + "@types/react": "^18.2.45", + "@types/react-dom": "^18.2.18", "babel-jest": "^29.4.3", "babel-plugin-module-resolver": "^4.1.0", - "effector": "^22.0.6", - "effector-react": "^22.1.0", - "eslint": "^8.22.0", - "eslint-kit": "^6.11.0", - "fs-extra": "^9.0.1", + "effector": "^23.1.0", + "effector-react": "^23.1.0", + "eslint": "^8.56.0", + "eslint-kit": "^6.12.0", + "fs-extra": "^9.1.0", "husky": "^8.0.3", - "jest": "^26.6.3", + "jsdom": "^23.0.1", "lint-staged": "^13.1.2", "prettier": "^2.8.4", "pretty-ms": "^8.0.0", - "react": "^17.0.1", - "react-dom": "^17.0.1", + "publint": "^0.2.6", + "react": "^18.2.0", + "react-dom": "^18.2.0", "rollup": "^3.18.0", "rollup-plugin-typescript2": "^0.34.1", - "svelte": "^3.2.0", - "ts-jest": "^26.4.4", - "tsd": "^0.19.0", - "typescript": "^4.9.5", - "uglify-js": "^3.17.4" + "svelte": "^3.55.1", + "tsd": "^0.19.1", + "typescript": "^5.3.3", + "uglify-js": "^3.17.4", + "vite-tsconfig-paths": "^4.2.2", + "vitest": "^1.0.4", + "zx": "^7.2.3" }, "peerDependencies": { - "effector": "^22.0.0 || ^23.0.0", - "effector-react": "^22.1.0 || ^23.0.0", + "effector": "^23.1.0", + "effector-react": "^23.1.0", "react": ">=16.8.0 <19.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6e9ae51..79cac94 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,45 +1,50 @@ lockfileVersion: 5.4 specifiers: - '@babel/core': ^7.12.7 - '@babel/plugin-transform-runtime': ^7.12.1 - '@babel/preset-env': ^7.12.7 - '@babel/preset-react': ^7.12.7 - '@babel/preset-typescript': ^7.12.7 + '@arethetypeswrong/cli': ^0.13.3 + '@babel/core': ^7.21.0 + '@babel/plugin-transform-runtime': ^7.21.0 + '@babel/preset-env': ^7.20.2 + '@babel/preset-react': ^7.18.6 + '@babel/preset-typescript': ^7.21.0 '@rollup/plugin-babel': ^6.0.3 '@rollup/plugin-commonjs': ^24.0.1 '@rollup/plugin-node-resolve': ^15.0.1 '@rollup/plugin-terser': ^0.4.0 - '@testing-library/dom': ^7.21.4 - '@testing-library/react': ^11.2.2 - '@testing-library/user-event': ^12.2.2 + '@testing-library/dom': ^7.31.2 + '@testing-library/react': ^11.2.7 + '@testing-library/user-event': ^12.8.3 '@trivago/prettier-plugin-sort-imports': ^4.1.1 - '@types/jest': ^26.0.15 - '@types/react': ^16.9.0 - '@types/react-dom': ^16.9.0 + '@types/jest': ^26.0.24 + '@types/react': ^18.2.45 + '@types/react-dom': ^18.2.18 babel-jest: ^29.4.3 babel-plugin-module-resolver: ^4.1.0 - effector: ^22.0.6 - effector-react: ^22.1.0 - eslint: ^8.22.0 - eslint-kit: ^6.11.0 - fs-extra: ^9.0.1 + effector: ^23.1.0 + effector-react: ^23.1.0 + eslint: ^8.56.0 + eslint-kit: ^6.12.0 + fs-extra: ^9.1.0 husky: ^8.0.3 - jest: ^26.6.3 + jsdom: ^23.0.1 lint-staged: ^13.1.2 prettier: ^2.8.4 pretty-ms: ^8.0.0 - react: ^17.0.1 - react-dom: ^17.0.1 + publint: ^0.2.6 + react: ^18.2.0 + react-dom: ^18.2.0 rollup: ^3.18.0 rollup-plugin-typescript2: ^0.34.1 - svelte: ^3.2.0 - ts-jest: ^26.4.4 - tsd: ^0.19.0 - typescript: ^4.9.5 + svelte: ^3.55.1 + tsd: ^0.19.1 + typescript: ^5.3.3 uglify-js: ^3.17.4 + vite-tsconfig-paths: ^4.2.2 + vitest: ^1.0.4 + zx: ^7.2.3 devDependencies: + '@arethetypeswrong/cli': 0.13.3 '@babel/core': 7.21.0 '@babel/plugin-transform-runtime': 7.21.0_@babel+core@7.21.0 '@babel/preset-env': 7.20.2_@babel+core@7.21.0 @@ -50,36 +55,44 @@ devDependencies: '@rollup/plugin-node-resolve': 15.0.1_rollup@3.18.0 '@rollup/plugin-terser': 0.4.0_rollup@3.18.0 '@testing-library/dom': 7.31.2 - '@testing-library/react': 11.2.7_sfoxds7t5ydpegc3knd667wn6m + '@testing-library/react': 11.2.7_biqbaboplfbrettd7655fr4n2y '@testing-library/user-event': 12.8.3_7izb363m7fjrh7ob6q4a2yqaqe '@trivago/prettier-plugin-sort-imports': 4.1.1_prettier@2.8.4 '@types/jest': 26.0.24 - '@types/react': 16.14.35 - '@types/react-dom': 16.9.18 + '@types/react': 18.2.45 + '@types/react-dom': 18.2.18 babel-jest: 29.4.3_@babel+core@7.21.0 babel-plugin-module-resolver: 4.1.0 - effector: 22.5.2 - effector-react: 22.5.0_ljphihe53hzzpqkbmewyqqpz6i - eslint: 8.22.0 - eslint-kit: 6.11.0_eqcc7dcqpetk7diz5y3u642qiq + effector: 23.1.0 + effector-react: 23.1.0_n5b7oxjg3vra2b3yx63k5eyewy + eslint: 8.56.0 + eslint-kit: 6.12.0_6oivf66i6dulewcc5as4eyqgny fs-extra: 9.1.0 husky: 8.0.3 - jest: 26.6.3 + jsdom: 23.0.1 lint-staged: 13.1.2 prettier: 2.8.4 pretty-ms: 8.0.0 - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 + publint: 0.2.6 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 rollup: 3.18.0 - rollup-plugin-typescript2: 0.34.1_fn2onl6nbsljlgjr3jlzr6w7we + rollup-plugin-typescript2: 0.34.1_vjug3yta6lblqnvu3zjesxy34m svelte: 3.55.1 - ts-jest: 26.5.6_xuote2qreek47x2di7kesslrai tsd: 0.19.1 - typescript: 4.9.5 + typescript: 5.3.3 uglify-js: 3.17.4 + vite-tsconfig-paths: 4.2.2_typescript@5.3.3 + vitest: 1.0.4_jsdom@23.0.1 + zx: 7.2.3 packages: + /@aashutoshrathi/word-wrap/1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + /@ampproject/remapping/2.2.0: resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} engines: {node: '>=6.0.0'} @@ -88,6 +101,35 @@ packages: '@jridgewell/trace-mapping': 0.3.17 dev: true + /@andrewbranch/untar.js/1.0.3: + resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} + dev: true + + /@arethetypeswrong/cli/0.13.3: + resolution: {integrity: sha512-lA29j9fkRGq+hNE3zQGxD/d8WmjhimSaPU2887CBe0Yv3C1UbIWvy51mYerp3/NoevjBLKSWhHmP5oY/eavtjQ==} + engines: {node: '>=18'} + hasBin: true + dependencies: + '@arethetypeswrong/core': 0.13.3 + chalk: 4.1.2 + cli-table3: 0.6.3 + commander: 10.0.1 + marked: 9.1.6 + marked-terminal: 6.2.0_marked@9.1.6 + semver: 7.5.4 + dev: true + + /@arethetypeswrong/core/0.13.3: + resolution: {integrity: sha512-oxa26D3z5DEv9LGzfJWV/6PhQd170dFfDOXl9J3cGRNLo2B68zj6/YOD1RJaYF/kmxechdXT1XyGUPOtkXv8Lg==} + engines: {node: '>=18'} + dependencies: + '@andrewbranch/untar.js': 1.0.3 + fflate: 0.7.4 + semver: 7.5.4 + typescript: 5.3.2 + validate-npm-package-name: 5.0.0 + dev: true + /@babel/code-frame/7.18.6: resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} engines: {node: '>=6.9.0'} @@ -123,7 +165,7 @@ packages: - supports-color dev: true - /@babel/eslint-parser/7.19.1_rghbqnosgqfoyre2cnweoyhlwq: + /@babel/eslint-parser/7.19.1_dkrwebtm74vbg4pxmm7okwicfa: resolution: {integrity: sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: @@ -132,7 +174,7 @@ packages: dependencies: '@babel/core': 7.21.0 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.22.0 + eslint: 8.56.0 eslint-visitor-keys: 2.1.0 semver: 6.3.0 dev: true @@ -1434,26 +1476,233 @@ packages: to-fast-properties: 2.0.0 dev: true - /@bcoe/v8-coverage/0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + /@colors/colors/1.5.0: + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + requiresBuild: true dev: true + optional: true - /@cnakazawa/watch/1.0.4: - resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} - engines: {node: '>=0.1.95'} - hasBin: true + /@esbuild/android-arm/0.19.9: + resolution: {integrity: sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64/0.19.9: + resolution: {integrity: sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64/0.19.9: + resolution: {integrity: sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64/0.19.9: + resolution: {integrity: sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64/0.19.9: + resolution: {integrity: sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64/0.19.9: + resolution: {integrity: sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64/0.19.9: + resolution: {integrity: sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm/0.19.9: + resolution: {integrity: sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64/0.19.9: + resolution: {integrity: sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32/0.19.9: + resolution: {integrity: sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.19.9: + resolution: {integrity: sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el/0.19.9: + resolution: {integrity: sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64/0.19.9: + resolution: {integrity: sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64/0.19.9: + resolution: {integrity: sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x/0.19.9: + resolution: {integrity: sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64/0.19.9: + resolution: {integrity: sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64/0.19.9: + resolution: {integrity: sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64/0.19.9: + resolution: {integrity: sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64/0.19.9: + resolution: {integrity: sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64/0.19.9: + resolution: {integrity: sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32/0.19.9: + resolution: {integrity: sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64/0.19.9: + resolution: {integrity: sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils/4.4.0_eslint@8.56.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: - exec-sh: 0.3.6 - minimist: 1.2.8 + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp/4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc/1.4.1: - resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} + /@eslint/eslintrc/2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.4.1 + espree: 9.6.1 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -1464,23 +1713,29 @@ packages: - supports-color dev: true - /@humanwhocodes/config-array/0.10.7: - resolution: {integrity: sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==} + /@eslint/js/8.56.0: + resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@humanwhocodes/config-array/0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 1.2.1 + '@humanwhocodes/object-schema': 2.0.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color dev: true - /@humanwhocodes/gitignore-to-minimatch/1.0.2: - resolution: {integrity: sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==} + /@humanwhocodes/module-importer/1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema/1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/object-schema/2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true /@istanbuljs/load-nyc-config/1.1.0: @@ -1499,123 +1754,6 @@ packages: engines: {node: '>=8'} dev: true - /@jest/console/26.6.2: - resolution: {integrity: sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/types': 26.6.2 - '@types/node': 18.14.4 - chalk: 4.1.2 - jest-message-util: 26.6.2 - jest-util: 26.6.2 - slash: 3.0.0 - dev: true - - /@jest/core/26.6.3: - resolution: {integrity: sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/console': 26.6.2 - '@jest/reporters': 26.6.2 - '@jest/test-result': 26.6.2 - '@jest/transform': 26.6.2 - '@jest/types': 26.6.2 - '@types/node': 18.14.4 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.10 - jest-changed-files: 26.6.2 - jest-config: 26.6.3 - jest-haste-map: 26.6.2 - jest-message-util: 26.6.2 - jest-regex-util: 26.0.0 - jest-resolve: 26.6.2 - jest-resolve-dependencies: 26.6.3 - jest-runner: 26.6.3 - jest-runtime: 26.6.3 - jest-snapshot: 26.6.2 - jest-util: 26.6.2 - jest-validate: 26.6.2 - jest-watcher: 26.6.2 - micromatch: 4.0.5 - p-each-series: 2.2.0 - rimraf: 3.0.2 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - - /@jest/environment/26.6.2: - resolution: {integrity: sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/fake-timers': 26.6.2 - '@jest/types': 26.6.2 - '@types/node': 18.14.4 - jest-mock: 26.6.2 - dev: true - - /@jest/fake-timers/26.6.2: - resolution: {integrity: sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/types': 26.6.2 - '@sinonjs/fake-timers': 6.0.1 - '@types/node': 18.14.4 - jest-message-util: 26.6.2 - jest-mock: 26.6.2 - jest-util: 26.6.2 - dev: true - - /@jest/globals/26.6.2: - resolution: {integrity: sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/environment': 26.6.2 - '@jest/types': 26.6.2 - expect: 26.6.2 - dev: true - - /@jest/reporters/26.6.2: - resolution: {integrity: sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==} - engines: {node: '>= 10.14.2'} - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 26.6.2 - '@jest/test-result': 26.6.2 - '@jest/transform': 26.6.2 - '@jest/types': 26.6.2 - chalk: 4.1.2 - collect-v8-coverage: 1.0.1 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.10 - istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 4.0.3 - istanbul-lib-report: 3.0.0 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.5 - jest-haste-map: 26.6.2 - jest-resolve: 26.6.2 - jest-util: 26.6.2 - jest-worker: 26.6.2 - slash: 3.0.0 - source-map: 0.6.1 - string-length: 4.0.2 - terminal-link: 2.1.1 - v8-to-istanbul: 7.1.2 - optionalDependencies: - node-notifier: 8.0.2 - transitivePeerDependencies: - - supports-color - dev: true - /@jest/schemas/29.4.3: resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1623,63 +1761,11 @@ packages: '@sinclair/typebox': 0.25.24 dev: true - /@jest/source-map/26.6.2: - resolution: {integrity: sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==} - engines: {node: '>= 10.14.2'} - dependencies: - callsites: 3.1.0 - graceful-fs: 4.2.10 - source-map: 0.6.1 - dev: true - - /@jest/test-result/26.6.2: - resolution: {integrity: sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/console': 26.6.2 - '@jest/types': 26.6.2 - '@types/istanbul-lib-coverage': 2.0.4 - collect-v8-coverage: 1.0.1 - dev: true - - /@jest/test-sequencer/26.6.3: - resolution: {integrity: sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/test-result': 26.6.2 - graceful-fs: 4.2.10 - jest-haste-map: 26.6.2 - jest-runner: 26.6.3 - jest-runtime: 26.6.3 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - - /@jest/transform/26.6.2: - resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} - engines: {node: '>= 10.14.2'} + /@jest/schemas/29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.21.0 - '@jest/types': 26.6.2 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 1.9.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.10 - jest-haste-map: 26.6.2 - jest-regex-util: 26.0.0 - jest-util: 26.6.2 - micromatch: 4.0.5 - pirates: 4.0.5 - slash: 3.0.0 - source-map: 0.6.1 - write-file-atomic: 3.0.3 - transitivePeerDependencies: - - supports-color + '@sinclair/typebox': 0.27.8 dev: true /@jest/transform/29.4.3: @@ -1766,6 +1852,10 @@ packages: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} dev: true + /@jridgewell/sourcemap-codec/1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + /@jridgewell/trace-mapping/0.3.17: resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: @@ -1899,37 +1989,138 @@ packages: rollup: 3.18.0 dev: true - /@sinclair/typebox/0.25.24: - resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} + /@rollup/rollup-android-arm-eabi/4.9.0: + resolution: {integrity: sha512-+1ge/xmaJpm1KVBuIH38Z94zj9fBD+hp+/5WLaHgyY8XLq1ibxk/zj6dTXaqM2cAbYKq8jYlhHd6k05If1W5xA==} + cpu: [arm] + os: [android] + requiresBuild: true dev: true + optional: true - /@sinonjs/commons/1.8.6: - resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} - dependencies: - type-detect: 4.0.8 + /@rollup/rollup-android-arm64/4.9.0: + resolution: {integrity: sha512-im6hUEyQ7ZfoZdNvtwgEJvBWZYauC9KVKq1w58LG2Zfz6zMd8gRrbN+xCVoqA2hv/v6fm9lp5LFGJ3za8EQH3A==} + cpu: [arm64] + os: [android] + requiresBuild: true dev: true + optional: true - /@sinonjs/fake-timers/6.0.1: - resolution: {integrity: sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==} - dependencies: - '@sinonjs/commons': 1.8.6 + /@rollup/rollup-darwin-arm64/4.9.0: + resolution: {integrity: sha512-u7aTMskN6Dmg1lCT0QJ+tINRt+ntUrvVkhbPfFz4bCwRZvjItx2nJtwJnJRlKMMaQCHRjrNqHRDYvE4mBm3DlQ==} + cpu: [arm64] + os: [darwin] + requiresBuild: true dev: true + optional: true - /@testing-library/dom/7.31.2: - resolution: {integrity: sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==} - engines: {node: '>=10'} - dependencies: - '@babel/code-frame': 7.18.6 - '@babel/runtime': 7.21.0 - '@types/aria-query': 4.2.2 - aria-query: 4.2.2 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.4.4 - pretty-format: 26.6.2 + /@rollup/rollup-darwin-x64/4.9.0: + resolution: {integrity: sha512-8FvEl3w2ExmpcOmX5RJD0yqXcVSOqAJJUJ29Lca29Ik+3zPS1yFimr2fr5JSZ4Z5gt8/d7WqycpgkX9nocijSw==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf/4.9.0: + resolution: {integrity: sha512-lHoKYaRwd4gge+IpqJHCY+8Vc3hhdJfU6ukFnnrJasEBUvVlydP8PuwndbWfGkdgSvZhHfSEw6urrlBj0TSSfg==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu/4.9.0: + resolution: {integrity: sha512-JbEPfhndYeWHfOSeh4DOFvNXrj7ls9S/2omijVsao+LBPTPayT1uKcK3dHW3MwDJ7KO11t9m2cVTqXnTKpeaiw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl/4.9.0: + resolution: {integrity: sha512-ahqcSXLlcV2XUBM3/f/C6cRoh7NxYA/W7Yzuv4bDU1YscTFw7ay4LmD7l6OS8EMhTNvcrWGkEettL1Bhjf+B+w==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu/4.9.0: + resolution: {integrity: sha512-uwvOYNtLw8gVtrExKhdFsYHA/kotURUmZYlinH2VcQxNCQJeJXnkmWgw2hI9Xgzhgu7J9QvWiq9TtTVwWMDa+w==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu/4.9.0: + resolution: {integrity: sha512-m6pkSwcZZD2LCFHZX/zW2aLIISyzWLU3hrLLzQKMI12+OLEzgruTovAxY5sCZJkipklaZqPy/2bEEBNjp+Y7xg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl/4.9.0: + resolution: {integrity: sha512-VFAC1RDRSbU3iOF98X42KaVicAfKf0m0OvIu8dbnqhTe26Kh6Ym9JrDulz7Hbk7/9zGc41JkV02g+p3BivOdAg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc/4.9.0: + resolution: {integrity: sha512-9jPgMvTKXARz4inw6jezMLA2ihDBvgIU9Ml01hjdVpOcMKyxFBJrn83KVQINnbeqDv0+HdO1c09hgZ8N0s820Q==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc/4.9.0: + resolution: {integrity: sha512-WE4pT2kTXQN2bAv40Uog0AsV7/s9nT9HBWXAou8+++MBCnY51QS02KYtm6dQxxosKi1VIz/wZIrTQO5UP2EW+Q==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc/4.9.0: + resolution: {integrity: sha512-aPP5Q5AqNGuT0tnuEkK/g4mnt3ZhheiXrDIiSVIHN9mcN21OyXDVbEMqmXPE7e2OplNLDkcvV+ZoGJa2ZImFgw==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@sinclair/typebox/0.25.24: + resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} + dev: true + + /@sinclair/typebox/0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + + /@sindresorhus/is/4.6.0: + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} dev: true - /@testing-library/react/11.2.7_sfoxds7t5ydpegc3knd667wn6m: + /@testing-library/dom/7.31.2: + resolution: {integrity: sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==} + engines: {node: '>=10'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/runtime': 7.21.0 + '@types/aria-query': 4.2.2 + aria-query: 4.2.2 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.4.4 + pretty-format: 26.6.2 + dev: true + + /@testing-library/react/11.2.7_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA==} engines: {node: '>=10'} peerDependencies: @@ -1938,8 +2129,8 @@ packages: dependencies: '@babel/runtime': 7.21.0 '@testing-library/dom': 7.31.2 - react: 17.0.2 - react-dom: 17.0.2_react@17.0.2 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 dev: true /@testing-library/user-event/12.8.3_7izb363m7fjrh7ob6q4a2yqaqe: @@ -1952,11 +2143,6 @@ packages: '@testing-library/dom': 7.31.2 dev: true - /@tootallnate/once/1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: true - /@trivago/prettier-plugin-sort-imports/4.1.1_prettier@2.8.4: resolution: {integrity: sha512-dQ2r2uzNr1x6pJsuh/8x0IRA3CBUB+pWEW3J/7N98axqt7SQSm+2fy0FLNXvXGg77xEDC7KHxJlHfLYyi7PDcw==} peerDependencies: @@ -2019,13 +2205,20 @@ packages: resolution: {integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==} dependencies: '@types/estree': 1.0.0 - '@types/json-schema': 7.0.11 + '@types/json-schema': 7.0.15 dev: true /@types/estree/1.0.0: resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} dev: true + /@types/fs-extra/11.0.4: + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + dependencies: + '@types/jsonfile': 6.1.4 + '@types/node': 18.19.3 + dev: true + /@types/graceful-fs/4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: @@ -2055,14 +2248,20 @@ packages: pretty-format: 26.6.2 dev: true - /@types/json-schema/7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + /@types/json-schema/7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true /@types/json5/0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true + /@types/jsonfile/6.1.4: + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + dependencies: + '@types/node': 18.19.3 + dev: true + /@types/minimist/1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true @@ -2071,20 +2270,26 @@ packages: resolution: {integrity: sha512-VhCw7I7qO2X49+jaKcAUwi3rR+hbxT5VcYF493+Z5kMLI0DL568b7JI4IDJaxWFH0D/xwmGJNoXisyX+w7GH/g==} dev: true - /@types/normalize-package-data/2.4.1: - resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} + /@types/node/18.19.3: + resolution: {integrity: sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==} + dependencies: + undici-types: 5.26.5 dev: true - /@types/prettier/2.7.2: - resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} + /@types/normalize-package-data/2.4.1: + resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true /@types/prop-types/15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} dev: true - /@types/react-dom/16.9.18: - resolution: {integrity: sha512-lmNARUX3+rNF/nmoAFqasG0jAA7q6MeGZK/fdeLwY3kAA4NPgHHrG5bNQe2B5xmD4B+x6Z6h0rEJQ7MEEgQxsw==} + /@types/ps-tree/1.1.6: + resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} + dev: true + + /@types/react-dom/18.2.18: + resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} dependencies: '@types/react': 16.14.35 dev: true @@ -2097,6 +2302,14 @@ packages: csstype: 3.1.1 dev: true + /@types/react/18.2.45: + resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} + dependencies: + '@types/prop-types': 15.7.5 + '@types/scheduler': 0.16.2 + csstype: 3.1.1 + dev: true + /@types/resolve/1.20.2: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} dev: true @@ -2105,12 +2318,12 @@ packages: resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} dev: true - /@types/semver/7.3.13: - resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} + /@types/semver/7.5.6: + resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: true - /@types/stack-utils/2.0.1: - resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} + /@types/which/3.0.3: + resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} dev: true /@types/yargs-parser/21.0.0: @@ -2129,8 +2342,8 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin/5.48.0_fnoubwmydqvb5cjqwgmzljgkee: - resolution: {integrity: sha512-SVLafp0NXpoJY7ut6VFVUU9I+YeFsDzeQwtK0WZ+xbRN3mtxJ08je+6Oi2N89qDn087COdO0u3blKZNv9VetRQ==} + /@typescript-eslint/eslint-plugin/5.57.1_nng2mkdjbd7djgr6uzehtknfyy: + resolution: {integrity: sha512-1MeobQkQ9tztuleT3v72XmY0XuKXVXusAhryoLuU5YZ+mXoYKZP9SQ7Flulh1NX4DTjpGTc2b/eMu4u7M7dhnQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -2140,24 +2353,25 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.48.0_hp3n5f6hao4yyg55iy34n6oive - '@typescript-eslint/scope-manager': 5.48.0 - '@typescript-eslint/type-utils': 5.48.0_hp3n5f6hao4yyg55iy34n6oive - '@typescript-eslint/utils': 5.48.0_hp3n5f6hao4yyg55iy34n6oive + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 5.57.1_xdgzedli73k7lw4xlyzszm74om + '@typescript-eslint/scope-manager': 5.57.1 + '@typescript-eslint/type-utils': 5.57.1_xdgzedli73k7lw4xlyzszm74om + '@typescript-eslint/utils': 5.57.1_xdgzedli73k7lw4xlyzszm74om debug: 4.3.4 - eslint: 8.22.0 - ignore: 5.2.4 + eslint: 8.56.0 + grapheme-splitter: 1.0.4 + ignore: 5.3.0 natural-compare-lite: 1.4.0 - regexpp: 3.2.0 semver: 7.3.8 - tsutils: 3.21.0_typescript@4.9.5 - typescript: 4.9.5 + tsutils: 3.21.0_typescript@5.3.3 + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser/5.48.0_hp3n5f6hao4yyg55iy34n6oive: - resolution: {integrity: sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==} + /@typescript-eslint/parser/5.57.1_xdgzedli73k7lw4xlyzszm74om: + resolution: {integrity: sha512-hlA0BLeVSA/wBPKdPGxoVr9Pp6GutGoY380FEhbVi0Ph4WNe8kLvqIRx76RSQt1lynZKfrXKs0/XeEk4zZycuA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2166,24 +2380,16 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.48.0 - '@typescript-eslint/types': 5.48.0 - '@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.5 + '@typescript-eslint/scope-manager': 5.57.1 + '@typescript-eslint/types': 5.57.1 + '@typescript-eslint/typescript-estree': 5.57.1_typescript@5.3.3 debug: 4.3.4 - eslint: 8.22.0 - typescript: 4.9.5 + eslint: 8.56.0 + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.48.0: - resolution: {integrity: sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.48.0 - '@typescript-eslint/visitor-keys': 5.48.0 - dev: true - /@typescript-eslint/scope-manager/5.54.0: resolution: {integrity: sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2192,8 +2398,16 @@ packages: '@typescript-eslint/visitor-keys': 5.54.0 dev: true - /@typescript-eslint/type-utils/5.48.0_hp3n5f6hao4yyg55iy34n6oive: - resolution: {integrity: sha512-vbtPO5sJyFjtHkGlGK4Sthmta0Bbls4Onv0bEqOGm7hP9h8UpRsHJwsrCiWtCUndTRNQO/qe6Ijz9rnT/DB+7g==} + /@typescript-eslint/scope-manager/5.57.1: + resolution: {integrity: sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.57.1 + '@typescript-eslint/visitor-keys': 5.57.1 + dev: true + + /@typescript-eslint/type-utils/5.57.1_xdgzedli73k7lw4xlyzszm74om: + resolution: {integrity: sha512-/RIPQyx60Pt6ga86hKXesXkJ2WOS4UemFrmmq/7eOyiYjYv/MUSHPlkhU6k9T9W1ytnTJueqASW+wOmW4KrViw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -2202,28 +2416,28 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.5 - '@typescript-eslint/utils': 5.48.0_hp3n5f6hao4yyg55iy34n6oive + '@typescript-eslint/typescript-estree': 5.57.1_typescript@5.3.3 + '@typescript-eslint/utils': 5.57.1_xdgzedli73k7lw4xlyzszm74om debug: 4.3.4 - eslint: 8.22.0 - tsutils: 3.21.0_typescript@4.9.5 - typescript: 4.9.5 + eslint: 8.56.0 + tsutils: 3.21.0_typescript@5.3.3 + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.48.0: - resolution: {integrity: sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==} + /@typescript-eslint/types/5.54.0: + resolution: {integrity: sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types/5.54.0: - resolution: {integrity: sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ==} + /@typescript-eslint/types/5.57.1: + resolution: {integrity: sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.48.0_typescript@4.9.5: - resolution: {integrity: sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==} + /@typescript-eslint/typescript-estree/5.54.0_typescript@5.3.3: + resolution: {integrity: sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -2231,20 +2445,20 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.48.0 - '@typescript-eslint/visitor-keys': 5.48.0 + '@typescript-eslint/types': 5.54.0 + '@typescript-eslint/visitor-keys': 5.54.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.8 - tsutils: 3.21.0_typescript@4.9.5 - typescript: 4.9.5 + tsutils: 3.21.0_typescript@5.3.3 + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree/5.54.0_typescript@4.9.5: - resolution: {integrity: sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ==} + /@typescript-eslint/typescript-estree/5.57.1_typescript@5.3.3: + resolution: {integrity: sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -2252,83 +2466,122 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.54.0 - '@typescript-eslint/visitor-keys': 5.54.0 + '@typescript-eslint/types': 5.57.1 + '@typescript-eslint/visitor-keys': 5.57.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.8 - tsutils: 3.21.0_typescript@4.9.5 - typescript: 4.9.5 + tsutils: 3.21.0_typescript@5.3.3 + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils/5.48.0_hp3n5f6hao4yyg55iy34n6oive: - resolution: {integrity: sha512-x2jrMcPaMfsHRRIkL+x96++xdzvrdBCnYRd5QiW5Wgo1OB4kDYPbC1XjWP/TNqlfK93K/lUL92erq5zPLgFScQ==} + /@typescript-eslint/utils/5.54.0_xdgzedli73k7lw4xlyzszm74om: + resolution: {integrity: sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.48.0 - '@typescript-eslint/types': 5.48.0 - '@typescript-eslint/typescript-estree': 5.48.0_typescript@4.9.5 - eslint: 8.22.0 + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 5.54.0 + '@typescript-eslint/types': 5.54.0 + '@typescript-eslint/typescript-estree': 5.54.0_typescript@5.3.3 + eslint: 8.56.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.22.0 + eslint-utils: 3.0.0_eslint@8.56.0 semver: 7.3.8 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/utils/5.54.0_hp3n5f6hao4yyg55iy34n6oive: - resolution: {integrity: sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw==} + /@typescript-eslint/utils/5.57.1_xdgzedli73k7lw4xlyzszm74om: + resolution: {integrity: sha512-kN6vzzf9NkEtawECqze6v99LtmDiUJCVpvieTFA1uL7/jDghiJGubGZ5csicYHU1Xoqb3oH/R5cN5df6W41Nfg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@types/json-schema': 7.0.11 - '@types/semver': 7.3.13 - '@typescript-eslint/scope-manager': 5.54.0 - '@typescript-eslint/types': 5.54.0 - '@typescript-eslint/typescript-estree': 5.54.0_typescript@4.9.5 - eslint: 8.22.0 + '@eslint-community/eslint-utils': 4.4.0_eslint@8.56.0 + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 5.57.1 + '@typescript-eslint/types': 5.57.1 + '@typescript-eslint/typescript-estree': 5.57.1_typescript@5.3.3 + eslint: 8.56.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.22.0 semver: 7.3.8 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys/5.48.0: - resolution: {integrity: sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==} + /@typescript-eslint/visitor-keys/5.54.0: + resolution: {integrity: sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.48.0 - eslint-visitor-keys: 3.3.0 + '@typescript-eslint/types': 5.54.0 + eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys/5.54.0: - resolution: {integrity: sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA==} + /@typescript-eslint/visitor-keys/5.57.1: + resolution: {integrity: sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.54.0 - eslint-visitor-keys: 3.3.0 + '@typescript-eslint/types': 5.57.1 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone/1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /@vitest/expect/1.0.4: + resolution: {integrity: sha512-/NRN9N88qjg3dkhmFcCBwhn/Ie4h064pY3iv7WLRsDJW7dXnEgeoa8W9zy7gIPluhz6CkgqiB3HmpIXgmEY5dQ==} + dependencies: + '@vitest/spy': 1.0.4 + '@vitest/utils': 1.0.4 + chai: 4.3.10 + dev: true + + /@vitest/runner/1.0.4: + resolution: {integrity: sha512-rhOQ9FZTEkV41JWXozFM8YgOqaG9zA7QXbhg5gy6mFOVqh4PcupirIJ+wN7QjeJt8S8nJRYuZH1OjJjsbxAXTQ==} + dependencies: + '@vitest/utils': 1.0.4 + p-limit: 5.0.0 + pathe: 1.1.1 + dev: true + + /@vitest/snapshot/1.0.4: + resolution: {integrity: sha512-vkfXUrNyNRA/Gzsp2lpyJxh94vU2OHT1amoD6WuvUAA12n32xeVZQ0KjjQIf8F6u7bcq2A2k969fMVxEsxeKYA==} + dependencies: + magic-string: 0.30.5 + pathe: 1.1.1 + pretty-format: 29.7.0 + dev: true + + /@vitest/spy/1.0.4: + resolution: {integrity: sha512-9ojTFRL1AJVh0hvfzAQpm0QS6xIS+1HFIw94kl/1ucTfGCaj1LV/iuJU4Y6cdR03EzPDygxTHwE1JOm+5RCcvA==} + dependencies: + tinyspy: 2.2.0 dev: true - /abab/2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + /@vitest/utils/1.0.4: + resolution: {integrity: sha512-gsswWDXxtt0QvtK/y/LWukN7sGMYmnCcv1qv05CsY6cU/Y1zpGX1QuvLs+GO1inczpE6Owixeel3ShkjhYtGfA==} + dependencies: + diff-sequences: 29.6.3 + loupe: 2.3.7 + pretty-format: 29.7.0 dev: true - /acorn-globals/6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + /acorn-jsx/5.3.2_acorn@8.11.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 + acorn: 8.11.2 dev: true /acorn-jsx/5.3.2_acorn@8.8.2: @@ -2339,13 +2592,13 @@ packages: acorn: 8.8.2 dev: true - /acorn-walk/7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + /acorn-walk/8.3.1: + resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} engines: {node: '>=0.4.0'} dev: true - /acorn/7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + /acorn/8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -2356,9 +2609,9 @@ packages: hasBin: true dev: true - /agent-base/6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + /agent-base/7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} dependencies: debug: 4.3.4 transitivePeerDependencies: @@ -2389,6 +2642,13 @@ packages: 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'} @@ -2413,18 +2673,18 @@ packages: color-convert: 2.0.1 dev: true + /ansi-styles/5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + /ansi-styles/6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} dev: true - /anymatch/2.0.0: - resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} - dependencies: - micromatch: 3.1.10 - normalize-path: 2.1.1 - transitivePeerDependencies: - - supports-color + /ansicolors/0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} dev: true /anymatch/3.1.3: @@ -2453,21 +2713,6 @@ packages: '@babel/runtime-corejs3': 7.21.0 dev: true - /arr-diff/4.0.0: - resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} - engines: {node: '>=0.10.0'} - dev: true - - /arr-flatten/1.1.0: - resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} - engines: {node: '>=0.10.0'} - dev: true - - /arr-union/3.1.0: - resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} - engines: {node: '>=0.10.0'} - dev: true - /array-includes/3.1.6: resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} engines: {node: '>= 0.4'} @@ -2484,11 +2729,6 @@ packages: engines: {node: '>=8'} dev: true - /array-unique/0.3.2: - resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} - engines: {node: '>=0.10.0'} - dev: true - /array.prototype.flat/1.3.1: resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} engines: {node: '>= 0.4'} @@ -2514,9 +2754,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /assign-symbols/1.0.0: - resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} - engines: {node: '>=0.10.0'} + /assertion-error/1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true /ast-types-flow/0.0.7: @@ -2537,12 +2776,6 @@ packages: engines: {node: '>= 4.0.0'} dev: true - /atob/2.1.2: - resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} - engines: {node: '>= 4.5.0'} - hasBin: true - dev: true - /available-typed-arrays/1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} @@ -2557,25 +2790,6 @@ packages: resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} dev: true - /babel-jest/26.6.3_@babel+core@7.21.0: - resolution: {integrity: sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==} - engines: {node: '>= 10.14.2'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.21.0 - '@jest/transform': 26.6.2 - '@jest/types': 26.6.2 - '@types/babel__core': 7.20.0 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 26.6.2_@babel+core@7.21.0 - chalk: 4.1.2 - graceful-fs: 4.2.10 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - /babel-jest/29.4.3_@babel+core@7.21.0: resolution: {integrity: sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2607,16 +2821,6 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist/26.6.2: - resolution: {integrity: sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==} - engines: {node: '>= 10.14.2'} - dependencies: - '@babel/template': 7.20.7 - '@babel/types': 7.21.2 - '@types/babel__core': 7.20.0 - '@types/babel__traverse': 7.18.3 - dev: true - /babel-plugin-jest-hoist/29.4.3: resolution: {integrity: sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2707,17 +2911,6 @@ packages: '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.21.0 dev: true - /babel-preset-jest/26.6.2_@babel+core@7.21.0: - resolution: {integrity: sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==} - engines: {node: '>= 10.14.2'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.21.0 - babel-plugin-jest-hoist: 26.6.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.21.0 - dev: true - /babel-preset-jest/29.4.3_@babel+core@7.21.0: resolution: {integrity: sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2742,19 +2935,6 @@ packages: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /base/0.11.2: - resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} - engines: {node: '>=0.10.0'} - dependencies: - cache-base: 1.0.1 - class-utils: 0.3.6 - component-emitter: 1.3.0 - define-property: 1.0.0 - isobject: 3.0.1 - mixin-deep: 1.3.2 - pascalcase: 0.1.1 - dev: true - /boolbase/1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: true @@ -2772,24 +2952,6 @@ packages: balanced-match: 1.0.2 dev: true - /braces/2.3.2: - resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} - engines: {node: '>=0.10.0'} - dependencies: - arr-flatten: 1.1.0 - array-unique: 0.3.2 - extend-shallow: 2.0.1 - fill-range: 4.0.0 - isobject: 3.0.1 - repeat-element: 1.1.4 - snapdragon: 0.8.2 - snapdragon-node: 2.1.1 - split-string: 3.1.0 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color - dev: true - /braces/3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} @@ -2797,28 +2959,17 @@ packages: fill-range: 7.0.1 dev: true - /browser-process-hrtime/1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: true - /browserslist/4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001458 + caniuse-lite: 1.0.30001570 electron-to-chromium: 1.4.315 node-releases: 2.0.10 update-browserslist-db: 1.0.10_browserslist@4.21.5 dev: true - /bs-logger/0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - dependencies: - fast-json-stable-stringify: 2.1.0 - dev: true - /bser/2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: @@ -2834,19 +2985,15 @@ packages: engines: {node: '>=6'} dev: true - /cache-base/1.0.1: - resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} - engines: {node: '>=0.10.0'} + /builtins/5.0.1: + resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - collection-visit: 1.0.0 - component-emitter: 1.3.0 - get-value: 2.0.6 - has-value: 1.0.0 - isobject: 3.0.1 - set-value: 2.0.1 - to-object-path: 0.3.0 - union-value: 1.0.1 - unset-value: 1.0.0 + semver: 7.5.4 + dev: true + + /cac/6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} dev: true /call-bind/1.0.2: @@ -2875,20 +3022,29 @@ packages: engines: {node: '>=6'} dev: true - /camelcase/6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + /caniuse-lite/1.0.30001570: + resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} dev: true - /caniuse-lite/1.0.30001458: - resolution: {integrity: sha512-lQ1VlUUq5q9ro9X+5gOEyH7i3vm+AYVT1WDCVB69XOZ17KZRhnZ9J0Sqz7wTHQaLBJccNCHq8/Ww5LlOIZbB0w==} + /cardinal/2.1.1: + resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} + hasBin: true + dependencies: + ansicolors: 0.3.2 + redeyed: 2.1.1 dev: true - /capture-exit/2.0.0: - resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} - engines: {node: 6.* || 8.* || >= 10.*} + /chai/4.3.10: + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} + engines: {node: '>=4'} dependencies: - rsvp: 4.8.5 + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 dev: true /chalk/2.4.2: @@ -2908,13 +3064,20 @@ packages: 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'} dev: true - /ci-info/2.0.0: - resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + /check-error/1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 dev: true /ci-info/3.8.0: @@ -2922,20 +3085,6 @@ packages: engines: {node: '>=8'} dev: true - /cjs-module-lexer/0.6.0: - resolution: {integrity: sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==} - dev: true - - /class-utils/0.3.6: - resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} - engines: {node: '>=0.10.0'} - dependencies: - arr-union: 3.1.0 - define-property: 0.2.5 - isobject: 3.0.1 - static-extend: 0.1.2 - dev: true - /clean-regexp/1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -2955,6 +3104,15 @@ packages: restore-cursor: 3.1.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 + /cli-truncate/2.1.0: resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} engines: {node: '>=8'} @@ -2971,31 +3129,6 @@ packages: string-width: 5.1.2 dev: true - /cliui/6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - dev: true - - /co/4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true - - /collect-v8-coverage/1.0.1: - resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} - dev: true - - /collection-visit/1.0.0: - resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} - engines: {node: '>=0.10.0'} - dependencies: - map-visit: 1.0.0 - object-visit: 1.0.1 - dev: true - /color-convert/1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -3028,6 +3161,11 @@ packages: delayed-stream: 1.0.0 dev: true + /commander/10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + dev: true + /commander/2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true @@ -3041,10 +3179,6 @@ packages: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true - /component-emitter/1.3.0: - resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} - dev: true - /concat-map/0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true @@ -3057,11 +3191,6 @@ packages: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true - /copy-descriptor/0.1.1: - resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} - engines: {node: '>=0.10.0'} - dev: true - /core-js-compat/3.29.0: resolution: {integrity: sha512-ScMn3uZNAFhK2DGoEfErguoiAHhV2Ju+oJo/jK08p7B3f3UhocUrCCkTvnZaiS+edl5nlIoiBXKcwMc6elv4KQ==} dependencies: @@ -3073,17 +3202,6 @@ packages: requiresBuild: true dev: true - /cross-spawn/6.0.5: - resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} - engines: {node: '>=4.8'} - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.1 - shebang-command: 1.2.0 - which: 1.3.1 - dev: true - /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -3099,19 +3217,11 @@ packages: hasBin: true dev: true - /cssom/0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: true - - /cssom/0.4.4: - resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} - dev: true - - /cssstyle/2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} + /cssstyle/3.0.0: + resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==} + engines: {node: '>=14'} dependencies: - cssom: 0.3.8 + rrweb-cssom: 0.6.0 dev: true /csstype/3.1.1: @@ -3122,13 +3232,17 @@ packages: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: true - /data-urls/2.0.0: - resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} - engines: {node: '>=10'} + /data-uri-to-buffer/4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: true + + /data-urls/5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} dependencies: - abab: 2.0.6 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 dev: true /debug/2.6.9: @@ -3182,9 +3296,11 @@ packages: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: true - /decode-uri-component/0.2.2: - resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} - engines: {node: '>=0.10'} + /deep-eql/4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 dev: true /deep-is/0.1.4: @@ -3204,43 +3320,21 @@ packages: object-keys: 1.1.1 dev: true - /define-property/0.2.5: - resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} - engines: {node: '>=0.10.0'} - dependencies: - is-descriptor: 0.1.6 - dev: true - - /define-property/1.0.0: - resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} - engines: {node: '>=0.10.0'} - dependencies: - is-descriptor: 1.0.2 - dev: true - - /define-property/2.0.2: - resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} - engines: {node: '>=0.10.0'} - dependencies: - is-descriptor: 1.0.2 - isobject: 3.0.1 - dev: true - /delayed-stream/1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} dev: true - /detect-newline/3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: true - /diff-sequences/26.6.2: resolution: {integrity: sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==} engines: {node: '>= 10.14.2'} dev: true + /diff-sequences/29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + /dir-glob/3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -3266,31 +3360,28 @@ packages: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} dev: true - /domexception/2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} - engines: {node: '>=8'} - dependencies: - webidl-conversions: 5.0.0 + /duplexer/0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true /eastasianwidth/0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /effector-react/22.5.0_ljphihe53hzzpqkbmewyqqpz6i: - resolution: {integrity: sha512-f9aOWFKr4i6fhdoV1uHa2n89f9+9edmOJL9UhMgjUcs2al3fyh3R5j1WDx0cHU6TuFtrlnFsulbhd2D/8q7reQ==} + /effector-react/23.1.0_n5b7oxjg3vra2b3yx63k5eyewy: + resolution: {integrity: sha512-RrCyu45zhxzIwzy6azjgPjXENRM2AM4y3TJF4faj5vN6z0u8ItR9W91wokHu5+BwFj6MKg2NxQkL4r4jWtIRoQ==} engines: {node: '>=11.0.0'} peerDependencies: - effector: ^22.0.2 + effector: ^23.0.0 react: '>=16.8.0 <19.0.0' dependencies: - effector: 22.5.2 - react: 17.0.2 - use-sync-external-store: 1.2.0_react@17.0.2 + effector: 23.1.0 + react: 18.2.0 + use-sync-external-store: 1.2.0_react@18.2.0 dev: true - /effector/22.5.2: - resolution: {integrity: sha512-xEINDCZYZdtmyS9LbjaLMUF1PBmlm3LqPowaKP2sNdBUDHirfGXhWzczWkufdGTJFGBN5sB2pWipmSIUMprbPg==} + /effector/23.1.0: + resolution: {integrity: sha512-PsiNE2UmEnS/xmyshISjMwqqGcUKF0upnA/8o1qXafyfrV1kYkOwhs9fuDfUKIAbgZVSZb+bowymPpfrNu7jFw==} engines: {node: '>=11.0.0'} dev: true @@ -3298,11 +3389,6 @@ packages: resolution: {integrity: sha512-ndBQYz3Eyy3rASjjQ9poMJGoAlsZ/aZnq6GBsGL4w/4sWIAwiUHVSsMuADbxa8WJw7pZ0oxLpGbtoDt4vRTdCg==} dev: true - /emittery/0.7.2: - resolution: {integrity: sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==} - engines: {node: '>=10'} - dev: true - /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true @@ -3311,10 +3397,13 @@ packages: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true - /end-of-stream/1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - dependencies: - once: 1.4.0 + /emojilib/2.4.0: + resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} + dev: true + + /entities/4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} dev: true /error-ex/1.3.2: @@ -3386,6 +3475,36 @@ packages: is-symbol: 1.0.4 dev: true + /esbuild/0.19.9: + resolution: {integrity: sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.19.9 + '@esbuild/android-arm64': 0.19.9 + '@esbuild/android-x64': 0.19.9 + '@esbuild/darwin-arm64': 0.19.9 + '@esbuild/darwin-x64': 0.19.9 + '@esbuild/freebsd-arm64': 0.19.9 + '@esbuild/freebsd-x64': 0.19.9 + '@esbuild/linux-arm': 0.19.9 + '@esbuild/linux-arm64': 0.19.9 + '@esbuild/linux-ia32': 0.19.9 + '@esbuild/linux-loong64': 0.19.9 + '@esbuild/linux-mips64el': 0.19.9 + '@esbuild/linux-ppc64': 0.19.9 + '@esbuild/linux-riscv64': 0.19.9 + '@esbuild/linux-s390x': 0.19.9 + '@esbuild/linux-x64': 0.19.9 + '@esbuild/netbsd-x64': 0.19.9 + '@esbuild/openbsd-x64': 0.19.9 + '@esbuild/sunos-x64': 0.19.9 + '@esbuild/win32-arm64': 0.19.9 + '@esbuild/win32-ia32': 0.19.9 + '@esbuild/win32-x64': 0.19.9 + dev: true + /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -3396,29 +3515,11 @@ packages: engines: {node: '>=0.8.0'} dev: true - /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'} dev: true - /escodegen/2.0.0: - resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 - dev: true - /eslint-formatter-pretty/4.1.0: resolution: {integrity: sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==} engines: {node: '>=10'} @@ -3438,7 +3539,7 @@ packages: peerDependencies: eslint-plugin-import: '>=2.2.0' dependencies: - eslint-plugin-import: 2.26.0_zznokraecjt4ixvvqcdste35vq + eslint-plugin-import: 2.26.0_f4ys4s7zkl2mdirrprvcfybpte glob-parent: 5.1.2 resolve: 1.22.1 dev: true @@ -3461,7 +3562,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript/2.7.1_2iahngt3u2tkbdlu6s4gkur3pu: + /eslint-import-resolver-typescript/2.7.1_zvsnalgsyvncnva2npvrrk24m4: resolution: {integrity: sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==} engines: {node: '>=4'} peerDependencies: @@ -3469,8 +3570,8 @@ packages: eslint-plugin-import: '*' dependencies: debug: 4.3.4 - eslint: 8.22.0 - eslint-plugin-import: 2.26.0_zznokraecjt4ixvvqcdste35vq + eslint: 8.56.0 + eslint-plugin-import: 2.26.0_f4ys4s7zkl2mdirrprvcfybpte glob: 7.2.3 is-glob: 4.0.3 resolve: 1.22.1 @@ -3479,37 +3580,37 @@ packages: - supports-color dev: true - /eslint-kit/6.11.0_eqcc7dcqpetk7diz5y3u642qiq: - resolution: {integrity: sha512-k3I5xrcpSVAXFkjLEL1/lfLHzZtrjmlFm5CmLEKzkTRnWl9pJ2EajOGfcYGKkLgH5F8BfT6tmRXQaLqglKtUNw==} + /eslint-kit/6.12.0_6oivf66i6dulewcc5as4eyqgny: + resolution: {integrity: sha512-NPW2t3XVeiJX2yn1ui3EXbExeoFYdkNHF6dLFRusrwRkKjwsinGv/Sr914700EGz+xqO6OdDA4LSToQOoxHmDg==} peerDependencies: eslint: ^8.16.0 dependencies: '@babel/core': 7.21.0 - '@babel/eslint-parser': 7.19.1_rghbqnosgqfoyre2cnweoyhlwq + '@babel/eslint-parser': 7.19.1_dkrwebtm74vbg4pxmm7okwicfa '@babel/preset-react': 7.18.6_@babel+core@7.21.0 '@next/eslint-plugin-next': 12.3.4 - '@typescript-eslint/eslint-plugin': 5.48.0_fnoubwmydqvb5cjqwgmzljgkee - '@typescript-eslint/parser': 5.48.0_hp3n5f6hao4yyg55iy34n6oive + '@typescript-eslint/eslint-plugin': 5.57.1_nng2mkdjbd7djgr6uzehtknfyy + '@typescript-eslint/parser': 5.57.1_xdgzedli73k7lw4xlyzszm74om babel-preset-solid: 1.6.10_@babel+core@7.21.0 - eslint: 8.22.0 + eslint: 8.56.0 eslint-import-resolver-custom-alias: 1.3.0_fkfqfehjtk7sk2efaqbgxsuasa eslint-import-resolver-jsconfig: 1.1.0 - eslint-import-resolver-typescript: 2.7.1_2iahngt3u2tkbdlu6s4gkur3pu - eslint-plugin-effector: 0.8.1_cu7mi643ugjcisd2zyg7fsgm34 - eslint-plugin-import: 2.26.0_zznokraecjt4ixvvqcdste35vq - eslint-plugin-jsx-a11y: 6.5.1_eslint@8.22.0 - eslint-plugin-prettier: 4.0.0_byfczlb2qtn5q2l2jf6clujxw4 - eslint-plugin-react: 7.30.0_eslint@8.22.0 - eslint-plugin-react-hooks: 4.5.0_eslint@8.22.0 - eslint-plugin-simple-import-sort: 7.0.0_eslint@8.22.0 - eslint-plugin-solid: 0.4.7_hp3n5f6hao4yyg55iy34n6oive - eslint-plugin-sonarjs: 0.13.0_eslint@8.22.0 - eslint-plugin-svelte3: 4.0.0_i3ku6u2keygdduzorqmifrlrvi - eslint-plugin-unicorn: 42.0.0_eslint@8.22.0 - eslint-plugin-vue: 9.0.1_eslint@8.22.0 + eslint-import-resolver-typescript: 2.7.1_zvsnalgsyvncnva2npvrrk24m4 + eslint-plugin-effector: 0.8.1_npainx27e3v45mksrcmsdgsgmm + eslint-plugin-import: 2.26.0_f4ys4s7zkl2mdirrprvcfybpte + eslint-plugin-jsx-a11y: 6.5.1_eslint@8.56.0 + eslint-plugin-prettier: 4.0.0_ow77vrim5k6dyc7pybszqy6yqq + eslint-plugin-react: 7.30.0_eslint@8.56.0 + eslint-plugin-react-hooks: 4.5.0_eslint@8.56.0 + eslint-plugin-simple-import-sort: 7.0.0_eslint@8.56.0 + eslint-plugin-solid: 0.4.7_xdgzedli73k7lw4xlyzszm74om + eslint-plugin-sonarjs: 0.13.0_eslint@8.56.0 + eslint-plugin-svelte3: 4.0.0_pnwvbr5gicnq736esygrnsqlbi + eslint-plugin-unicorn: 42.0.0_eslint@8.56.0 + eslint-plugin-vue: 9.0.1_eslint@8.56.0 prettier: 2.6.2 semver: 7.3.8 - vue-eslint-parser: 9.0.2_eslint@8.22.0 + vue-eslint-parser: 9.0.2_eslint@8.56.0 transitivePeerDependencies: - effector - eslint-config-prettier @@ -3519,7 +3620,7 @@ packages: - typescript dev: true - /eslint-module-utils/2.7.4_jmtkdf3hovbfyxfkbu4ev6qzze: + /eslint-module-utils/2.7.4_6np5j5sca3gyo67poufsk6dmkm: resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -3540,28 +3641,28 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.48.0_hp3n5f6hao4yyg55iy34n6oive + '@typescript-eslint/parser': 5.57.1_xdgzedli73k7lw4xlyzszm74om debug: 3.2.7 - eslint: 8.22.0 + eslint: 8.56.0 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 2.7.1_2iahngt3u2tkbdlu6s4gkur3pu + eslint-import-resolver-typescript: 2.7.1_zvsnalgsyvncnva2npvrrk24m4 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-effector/0.8.1_cu7mi643ugjcisd2zyg7fsgm34: + /eslint-plugin-effector/0.8.1_npainx27e3v45mksrcmsdgsgmm: resolution: {integrity: sha512-r+wV4qkyxdrmBjKhuqbrhcIQReCPGFLQS5z2s0w+pmyRExZ2Ge2BkwWs6TCIN0xTYU98CmD2q31BqQOj2yUFZQ==} engines: {node: ^14 || ^16 || ^18} peerDependencies: effector: '*' eslint: 7 || 8 dependencies: - effector: 22.5.2 - eslint: 8.22.0 + effector: 23.1.0 + eslint: 8.56.0 prettier: 2.8.4 dev: true - /eslint-plugin-import/2.26.0_zznokraecjt4ixvvqcdste35vq: + /eslint-plugin-import/2.26.0_f4ys4s7zkl2mdirrprvcfybpte: resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} engines: {node: '>=4'} peerDependencies: @@ -3571,14 +3672,14 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.48.0_hp3n5f6hao4yyg55iy34n6oive + '@typescript-eslint/parser': 5.57.1_xdgzedli73k7lw4xlyzszm74om array-includes: 3.1.6 array.prototype.flat: 1.3.1 debug: 2.6.9 doctrine: 2.1.0 - eslint: 8.22.0 + eslint: 8.56.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4_jmtkdf3hovbfyxfkbu4ev6qzze + eslint-module-utils: 2.7.4_6np5j5sca3gyo67poufsk6dmkm has: 1.0.3 is-core-module: 2.11.0 is-glob: 4.0.3 @@ -3592,7 +3693,7 @@ packages: - supports-color dev: true - /eslint-plugin-jsx-a11y/6.5.1_eslint@8.22.0: + /eslint-plugin-jsx-a11y/6.5.1_eslint@8.56.0: resolution: {integrity: sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==} engines: {node: '>=4.0'} peerDependencies: @@ -3606,14 +3707,14 @@ packages: axobject-query: 2.2.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.22.0 + eslint: 8.56.0 has: 1.0.3 jsx-ast-utils: 3.3.3 language-tags: 1.0.8 minimatch: 3.1.2 dev: true - /eslint-plugin-prettier/4.0.0_byfczlb2qtn5q2l2jf6clujxw4: + /eslint-plugin-prettier/4.0.0_ow77vrim5k6dyc7pybszqy6yqq: resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==} engines: {node: '>=6.0.0'} peerDependencies: @@ -3624,21 +3725,21 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.22.0 + eslint: 8.56.0 prettier: 2.6.2 prettier-linter-helpers: 1.0.0 dev: true - /eslint-plugin-react-hooks/4.5.0_eslint@8.22.0: + /eslint-plugin-react-hooks/4.5.0_eslint@8.56.0: resolution: {integrity: sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==} 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.22.0 + eslint: 8.56.0 dev: true - /eslint-plugin-react/7.30.0_eslint@8.22.0: + /eslint-plugin-react/7.30.0_eslint@8.56.0: resolution: {integrity: sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A==} engines: {node: '>=4'} peerDependencies: @@ -3647,7 +3748,7 @@ packages: array-includes: 3.1.6 array.prototype.flatmap: 1.3.1 doctrine: 2.1.0 - eslint: 8.22.0 + eslint: 8.56.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.3 minimatch: 3.1.2 @@ -3661,22 +3762,22 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /eslint-plugin-simple-import-sort/7.0.0_eslint@8.22.0: + /eslint-plugin-simple-import-sort/7.0.0_eslint@8.56.0: resolution: {integrity: sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==} peerDependencies: eslint: '>=5.0.0' dependencies: - eslint: 8.22.0 + eslint: 8.56.0 dev: true - /eslint-plugin-solid/0.4.7_hp3n5f6hao4yyg55iy34n6oive: + /eslint-plugin-solid/0.4.7_xdgzedli73k7lw4xlyzszm74om: resolution: {integrity: sha512-oWjW1YhhcGF6guWzdC44m/350A3l/5wgg9Gry+aWjeWpCeD2PMQT9jnjV3Sdibprjjvqe8w9db/H+oqpm3JHmg==} engines: {node: '>=12.0.0'} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.54.0_hp3n5f6hao4yyg55iy34n6oive - eslint: 8.22.0 + '@typescript-eslint/utils': 5.54.0_xdgzedli73k7lw4xlyzszm74om + eslint: 8.56.0 is-html: 2.0.0 jsx-ast-utils: 3.3.3 kebab-case: 1.0.2 @@ -3687,26 +3788,26 @@ packages: - typescript dev: true - /eslint-plugin-sonarjs/0.13.0_eslint@8.22.0: + /eslint-plugin-sonarjs/0.13.0_eslint@8.56.0: resolution: {integrity: sha512-t3m7ta0EspzDxSOZh3cEOJIJVZgN/TlJYaBGnQlK6W/PZNbWep8q4RQskkJkA7/zwNpX0BaoEOSUUrqaADVoqA==} engines: {node: '>=12'} peerDependencies: eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.22.0 + eslint: 8.56.0 dev: true - /eslint-plugin-svelte3/4.0.0_i3ku6u2keygdduzorqmifrlrvi: + /eslint-plugin-svelte3/4.0.0_pnwvbr5gicnq736esygrnsqlbi: resolution: {integrity: sha512-OIx9lgaNzD02+MDFNLw0GEUbuovNcglg+wnd/UY0fbZmlQSz7GlQiQ1f+yX0XvC07XPcDOnFcichqI3xCwp71g==} peerDependencies: eslint: '>=8.0.0' svelte: ^3.2.0 dependencies: - eslint: 8.22.0 + eslint: 8.56.0 svelte: 3.55.1 dev: true - /eslint-plugin-unicorn/42.0.0_eslint@8.22.0: + /eslint-plugin-unicorn/42.0.0_eslint@8.56.0: resolution: {integrity: sha512-ixBsbhgWuxVaNlPTT8AyfJMlhyC5flCJFjyK3oKE8TRrwBnaHvUbuIkCM1lqg8ryYrFStL/T557zfKzX4GKSlg==} engines: {node: '>=12'} peerDependencies: @@ -3715,8 +3816,8 @@ packages: '@babel/helper-validator-identifier': 7.19.1 ci-info: 3.8.0 clean-regexp: 1.0.0 - eslint: 8.22.0 - eslint-utils: 3.0.0_eslint@8.22.0 + eslint: 8.56.0 + eslint-utils: 3.0.0_eslint@8.56.0 esquery: 1.5.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -3729,19 +3830,19 @@ packages: strip-indent: 3.0.0 dev: true - /eslint-plugin-vue/9.0.1_eslint@8.22.0: + /eslint-plugin-vue/9.0.1_eslint@8.56.0: resolution: {integrity: sha512-/w/9/vzz+4bSYtp5UqXgJ0CfycXTMtpp6lkz7/fMp0CcJxPWyRP6Pr88ihhrsNEcVt2ZweMupWRNYa+5Md41LQ==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.22.0 - eslint-utils: 3.0.0_eslint@8.22.0 + eslint: 8.56.0 + eslint-utils: 3.0.0_eslint@8.56.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.0.11 semver: 7.3.8 - vue-eslint-parser: 9.0.2_eslint@8.22.0 + vue-eslint-parser: 9.0.2_eslint@8.56.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -3767,13 +3868,21 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils/3.0.0_eslint@8.22.0: + /eslint-scope/7.2.2: + 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-utils/3.0.0_eslint@8.56.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.22.0 + eslint: 8.56.0 eslint-visitor-keys: 2.1.0 dev: true @@ -3787,50 +3896,54 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.22.0: - resolution: {integrity: sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==} + /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 + + /eslint/8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint/eslintrc': 1.4.1 - '@humanwhocodes/config-array': 0.10.7 - '@humanwhocodes/gitignore-to-minimatch': 1.0.2 + '@eslint-community/eslint-utils': 4.4.0_eslint@8.56.0 + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.22.0 - eslint-visitor-keys: 3.3.0 - espree: 9.4.1 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 - functional-red-black-tree: 1.0.1 glob-parent: 6.0.2 globals: 13.20.0 - globby: 11.1.0 - grapheme-splitter: 1.0.4 + graphemer: 1.4.0 ignore: 5.2.4 - import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 + is-path-inside: 3.0.3 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.1 - regexpp: 3.2.0 + optionator: 0.9.3 strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 text-table: 0.2.0 - v8-compile-cache: 2.3.0 transitivePeerDependencies: - supports-color dev: true @@ -3844,6 +3957,15 @@ packages: eslint-visitor-keys: 3.3.0 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} + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2_acorn@8.11.2 + eslint-visitor-keys: 3.4.3 + dev: true + /esprima/4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -3883,36 +4005,16 @@ packages: engines: {node: '>=0.10.0'} dev: true - /exec-sh/0.3.6: - resolution: {integrity: sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==} - dev: true - - /execa/1.0.0: - resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} - engines: {node: '>=6'} - dependencies: - cross-spawn: 6.0.5 - get-stream: 4.1.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 - dev: true - - /execa/4.1.0: - resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} - engines: {node: '>=10'} + /event-stream/3.3.4: + resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} dependencies: - cross-spawn: 7.0.3 - get-stream: 5.2.0 - human-signals: 1.1.1 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 + duplexer: 0.1.2 + from: 0.1.7 + map-stream: 0.1.0 + pause-stream: 0.0.11 + split: 0.3.3 + stream-combiner: 0.0.4 + through: 2.3.8 dev: true /execa/6.1.0: @@ -3930,67 +4032,19 @@ packages: strip-final-newline: 3.0.0 dev: true - /exit/0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - dev: true - - /expand-brackets/2.1.4: - resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} - engines: {node: '>=0.10.0'} - dependencies: - debug: 2.6.9 - define-property: 0.2.5 - extend-shallow: 2.0.1 - posix-character-classes: 0.1.1 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /expect/26.6.2: - resolution: {integrity: sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/types': 26.6.2 - ansi-styles: 4.3.0 - jest-get-type: 26.3.0 - jest-matcher-utils: 26.6.2 - jest-message-util: 26.6.2 - jest-regex-util: 26.0.0 - dev: true - - /extend-shallow/2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} - dependencies: - is-extendable: 0.1.1 - dev: true - - /extend-shallow/3.0.2: - resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} - engines: {node: '>=0.10.0'} - dependencies: - assign-symbols: 1.0.0 - is-extendable: 1.0.1 - dev: true - - /extglob/2.0.4: - resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} - engines: {node: '>=0.10.0'} + /execa/8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} dependencies: - array-unique: 0.3.2 - define-property: 1.0.0 - expand-brackets: 2.1.4 - extend-shallow: 2.0.1 - fragment-cache: 0.2.1 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color + 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 /fast-deep-equal/3.1.3: @@ -4001,8 +4055,8 @@ packages: resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} dev: true - /fast-glob/3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + /fast-glob/3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 @@ -4032,6 +4086,18 @@ packages: bser: 2.1.1 dev: true + /fetch-blob/3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.2.1 + dev: true + + /fflate/0.7.4: + resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} + dev: true + /file-entry-cache/6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -4039,16 +4105,6 @@ packages: flat-cache: 3.0.4 dev: true - /fill-range/4.0.0: - resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} - engines: {node: '>=0.10.0'} - dependencies: - extend-shallow: 2.0.1 - is-number: 3.0.0 - repeat-string: 1.6.1 - to-regex-range: 2.1.1 - dev: true - /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -4118,13 +4174,8 @@ packages: is-callable: 1.2.7 dev: true - /for-in/1.0.2: - resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} - engines: {node: '>=0.10.0'} - dev: true - - /form-data/3.0.1: - resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + /form-data/4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} dependencies: asynckit: 0.4.0 @@ -4132,11 +4183,15 @@ packages: mime-types: 2.1.35 dev: true - /fragment-cache/0.2.1: - resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} - engines: {node: '>=0.10.0'} + /formdata-polyfill/4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} dependencies: - map-cache: 0.2.2 + fetch-blob: 3.2.0 + dev: true + + /from/0.1.7: + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} dev: true /fs-extra/10.1.0: @@ -4148,6 +4203,15 @@ packages: universalify: 2.0.0 dev: true + /fs-extra/11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.10 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + /fs-extra/9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} @@ -4162,8 +4226,8 @@ packages: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents/2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + /fsevents/2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true @@ -4184,22 +4248,22 @@ packages: functions-have-names: 1.2.3 dev: true - /functional-red-black-tree/1.0.1: - resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} - dev: true - /functions-have-names/1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true + /fx/31.0.0: + resolution: {integrity: sha512-OoeYSPKqNKmfnH4s+rGYI0c8OZmqqOOXsUtqy0YyHqQQoQSDiDs3m3M9uXKx5OQR+jDx7/FhYqpO3kl/As/xgg==} + hasBin: true + dev: true + /gensync/1.0.0-beta.2: 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.*} + /get-func-name/2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true /get-intrinsic/1.2.0: @@ -4215,25 +4279,16 @@ packages: engines: {node: '>=8.0.0'} dev: true - /get-stream/4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} - engines: {node: '>=6'} - dependencies: - pump: 3.0.0 - dev: true - - /get-stream/5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - dependencies: - pump: 3.0.0 - dev: true - /get-stream/6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} dev: true + /get-stream/8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + /get-symbol-description/1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} @@ -4242,11 +4297,6 @@ packages: get-intrinsic: 1.2.0 dev: true - /get-value/2.0.6: - resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} - engines: {node: '>=0.10.0'} - dev: true - /glob-parent/5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -4319,12 +4369,27 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 - ignore: 5.2.4 + fast-glob: 3.3.2 + ignore: 5.3.0 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.2 + ignore: 5.3.0 + merge2: 1.4.1 + slash: 4.0.0 + dev: true + + /globrex/0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + dev: true + /gopd/1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: @@ -4339,10 +4404,9 @@ packages: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /growly/1.3.0: - resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} + /graphemer/1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - optional: true /hard-rejection/2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} @@ -4386,37 +4450,6 @@ packages: has-symbols: 1.0.3 dev: true - /has-value/0.3.1: - resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} - engines: {node: '>=0.10.0'} - dependencies: - get-value: 2.0.6 - has-values: 0.1.4 - isobject: 2.1.0 - dev: true - - /has-value/1.0.0: - resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} - engines: {node: '>=0.10.0'} - dependencies: - get-value: 2.0.6 - has-values: 1.0.0 - isobject: 3.0.1 - dev: true - - /has-values/0.1.4: - resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} - engines: {node: '>=0.10.0'} - dev: true - - /has-values/1.0.0: - resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} - engines: {node: '>=0.10.0'} - dependencies: - is-number: 3.0.0 - kind-of: 4.0.0 - dev: true - /has/1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} @@ -4435,75 +4468,82 @@ packages: lru-cache: 6.0.0 dev: true - /html-encoding-sniffer/2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} - engines: {node: '>=10'} + /html-encoding-sniffer/4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} dependencies: - whatwg-encoding: 1.0.5 + whatwg-encoding: 3.1.1 dev: true /html-entities/2.3.3: resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} dev: true - /html-escaper/2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true - /html-tags/3.2.0: resolution: {integrity: sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==} engines: {node: '>=8'} dev: true - /http-proxy-agent/4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} + /http-proxy-agent/7.0.0: + resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} + engines: {node: '>= 14'} dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 + agent-base: 7.1.0 debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true - /https-proxy-agent/5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + /https-proxy-agent/7.0.2: + resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} + engines: {node: '>= 14'} dependencies: - agent-base: 6.0.2 + agent-base: 7.1.0 debug: 4.3.4 transitivePeerDependencies: - supports-color dev: true - /human-signals/1.1.1: - resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} - engines: {node: '>=8.12.0'} - dev: true - /human-signals/3.0.1: resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==} engines: {node: '>=12.20.0'} dev: true + /human-signals/5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + /husky/8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} hasBin: true dev: true - /iconv-lite/0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + /iconv-lite/0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 dev: true + /ignore-walk/5.0.1: + resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + minimatch: 5.1.6 + dev: true + /ignore/5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} dev: true + /ignore/5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} + dev: true + /import-fresh/3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -4512,15 +4552,6 @@ packages: resolve-from: 4.0.0 dev: true - /import-local/3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - dev: true - /imurmurhash/0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -4560,20 +4591,6 @@ packages: engines: {node: '>=8'} dev: true - /is-accessor-descriptor/0.1.6: - resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - - /is-accessor-descriptor/1.0.0: - resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 6.0.3 - dev: true - /is-array-buffer/3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: @@ -4600,10 +4617,6 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-buffer/1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - dev: true - /is-builtin-module/3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} @@ -4616,33 +4629,12 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-ci/2.0.0: - resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} - hasBin: true - dependencies: - ci-info: 2.0.0 - dev: true - /is-core-module/2.11.0: resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 dev: true - /is-data-descriptor/0.1.4: - resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - - /is-data-descriptor/1.0.0: - resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 6.0.3 - dev: true - /is-date-object/1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} @@ -4650,50 +4642,13 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-descriptor/0.1.6: - resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} - engines: {node: '>=0.10.0'} - dependencies: - is-accessor-descriptor: 0.1.6 - is-data-descriptor: 0.1.4 - kind-of: 5.1.0 - dev: true - - /is-descriptor/1.0.2: - resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - dependencies: - is-accessor-descriptor: 1.0.0 - is-data-descriptor: 1.0.0 - kind-of: 6.0.3 dev: true - /is-docker/2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true - optional: true - - /is-extendable/0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} - dev: true - - /is-extendable/1.0.1: - resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} - engines: {node: '>=0.10.0'} - dependencies: - is-plain-object: 2.0.4 - dev: true - - /is-extglob/2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true - - /is-fullwidth-code-point/3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} dev: true @@ -4702,11 +4657,6 @@ packages: engines: {node: '>=12'} dev: true - /is-generator-fn/2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: true - /is-glob/4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -4737,28 +4687,19 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-number/3.0.0: - resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - /is-number/7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} dev: true - /is-plain-obj/1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} + /is-path-inside/3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} dev: true - /is-plain-object/2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + /is-plain-obj/1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 dev: true /is-potential-custom-element-name/1.0.1: @@ -4785,16 +4726,6 @@ packages: call-bind: 1.0.2 dev: true - /is-stream/1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} - dev: true - - /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} @@ -4825,10 +4756,6 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-typedarray/1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: true - /is-unicode-supported/0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} @@ -4840,56 +4767,15 @@ packages: call-bind: 1.0.2 dev: true - /is-windows/1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true - - /is-wsl/2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: true - optional: true - - /isarray/1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true - /isexe/2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /isobject/2.1.0: - resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} - engines: {node: '>=0.10.0'} - dependencies: - isarray: 1.0.0 - dev: true - - /isobject/3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - dev: true - /istanbul-lib-coverage/3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} dev: true - /istanbul-lib-instrument/4.0.3: - resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} - engines: {node: '>=8'} - dependencies: - '@babel/core': 7.21.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - /istanbul-lib-instrument/5.2.1: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} @@ -4898,112 +4784,15 @@ packages: '@babel/parser': 7.21.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-lib-report/3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} - dependencies: - istanbul-lib-coverage: 3.2.0 - make-dir: 3.1.0 - supports-color: 7.2.0 - dev: true - - /istanbul-lib-source-maps/4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - dependencies: - debug: 4.3.4 - istanbul-lib-coverage: 3.2.0 - source-map: 0.6.1 + semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports/3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} - engines: {node: '>=8'} - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 - dev: true - /javascript-natural-sort/0.7.1: resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} dev: true - /jest-changed-files/26.6.2: - resolution: {integrity: sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/types': 26.6.2 - execa: 4.1.0 - throat: 5.0.0 - dev: true - - /jest-cli/26.6.3: - resolution: {integrity: sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==} - engines: {node: '>= 10.14.2'} - hasBin: true - dependencies: - '@jest/core': 26.6.3 - '@jest/test-result': 26.6.2 - '@jest/types': 26.6.2 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.10 - import-local: 3.1.0 - is-ci: 2.0.0 - jest-config: 26.6.3 - jest-util: 26.6.2 - jest-validate: 26.6.2 - prompts: 2.4.2 - yargs: 15.4.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - - /jest-config/26.6.3: - resolution: {integrity: sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==} - engines: {node: '>= 10.14.2'} - peerDependencies: - ts-node: '>=9.0.0' - peerDependenciesMeta: - ts-node: - optional: true - dependencies: - '@babel/core': 7.21.0 - '@jest/test-sequencer': 26.6.3 - '@jest/types': 26.6.2 - babel-jest: 26.6.3_@babel+core@7.21.0 - chalk: 4.1.2 - deepmerge: 4.3.0 - glob: 7.2.3 - graceful-fs: 4.2.10 - jest-environment-jsdom: 26.6.2 - jest-environment-node: 26.6.2 - jest-get-type: 26.3.0 - jest-jasmine2: 26.6.3 - jest-regex-util: 26.0.0 - jest-resolve: 26.6.2 - jest-util: 26.6.2 - jest-validate: 26.6.2 - micromatch: 4.0.5 - pretty-format: 26.6.2 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: true - /jest-diff/26.6.2: resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} engines: {node: '>= 10.14.2'} @@ -5014,82 +4803,11 @@ packages: pretty-format: 26.6.2 dev: true - /jest-docblock/26.0.0: - resolution: {integrity: sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==} - engines: {node: '>= 10.14.2'} - dependencies: - detect-newline: 3.1.0 - dev: true - - /jest-each/26.6.2: - resolution: {integrity: sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/types': 26.6.2 - chalk: 4.1.2 - jest-get-type: 26.3.0 - jest-util: 26.6.2 - pretty-format: 26.6.2 - dev: true - - /jest-environment-jsdom/26.6.2: - resolution: {integrity: sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/environment': 26.6.2 - '@jest/fake-timers': 26.6.2 - '@jest/types': 26.6.2 - '@types/node': 18.14.4 - jest-mock: 26.6.2 - jest-util: 26.6.2 - jsdom: 16.7.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: true - - /jest-environment-node/26.6.2: - resolution: {integrity: sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/environment': 26.6.2 - '@jest/fake-timers': 26.6.2 - '@jest/types': 26.6.2 - '@types/node': 18.14.4 - jest-mock: 26.6.2 - jest-util: 26.6.2 - dev: true - /jest-get-type/26.3.0: resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==} engines: {node: '>= 10.14.2'} dev: true - /jest-haste-map/26.6.2: - resolution: {integrity: sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/types': 26.6.2 - '@types/graceful-fs': 4.1.6 - '@types/node': 18.14.4 - anymatch: 3.1.3 - fb-watchman: 2.0.2 - graceful-fs: 4.2.10 - jest-regex-util: 26.0.0 - jest-serializer: 26.6.2 - jest-util: 26.6.2 - jest-worker: 26.6.2 - micromatch: 4.0.5 - sane: 4.1.0 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.2 - transitivePeerDependencies: - - supports-color - dev: true - /jest-haste-map/29.4.3: resolution: {integrity: sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5106,95 +4824,7 @@ packages: micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: - fsevents: 2.3.2 - dev: true - - /jest-jasmine2/26.6.3: - resolution: {integrity: sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==} - engines: {node: '>= 10.14.2'} - dependencies: - '@babel/traverse': 7.21.2 - '@jest/environment': 26.6.2 - '@jest/source-map': 26.6.2 - '@jest/test-result': 26.6.2 - '@jest/types': 26.6.2 - '@types/node': 18.14.4 - chalk: 4.1.2 - co: 4.6.0 - expect: 26.6.2 - is-generator-fn: 2.1.0 - jest-each: 26.6.2 - jest-matcher-utils: 26.6.2 - jest-message-util: 26.6.2 - jest-runtime: 26.6.3 - jest-snapshot: 26.6.2 - jest-util: 26.6.2 - pretty-format: 26.6.2 - throat: 5.0.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - - /jest-leak-detector/26.6.2: - resolution: {integrity: sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==} - engines: {node: '>= 10.14.2'} - dependencies: - jest-get-type: 26.3.0 - pretty-format: 26.6.2 - dev: true - - /jest-matcher-utils/26.6.2: - resolution: {integrity: sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==} - engines: {node: '>= 10.14.2'} - dependencies: - chalk: 4.1.2 - jest-diff: 26.6.2 - jest-get-type: 26.3.0 - pretty-format: 26.6.2 - dev: true - - /jest-message-util/26.6.2: - resolution: {integrity: sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==} - engines: {node: '>= 10.14.2'} - dependencies: - '@babel/code-frame': 7.18.6 - '@jest/types': 26.6.2 - '@types/stack-utils': 2.0.1 - chalk: 4.1.2 - graceful-fs: 4.2.10 - micromatch: 4.0.5 - pretty-format: 26.6.2 - slash: 3.0.0 - stack-utils: 2.0.6 - dev: true - - /jest-mock/26.6.2: - resolution: {integrity: sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/types': 26.6.2 - '@types/node': 18.14.4 - dev: true - - /jest-pnp-resolver/1.2.3_jest-resolve@26.6.2: - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - dependencies: - jest-resolve: 26.6.2 - dev: true - - /jest-regex-util/26.0.0: - resolution: {integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==} - engines: {node: '>= 10.14.2'} + fsevents: 2.3.3 dev: true /jest-regex-util/29.4.3: @@ -5202,191 +4832,16 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies/26.6.3: - resolution: {integrity: sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/types': 26.6.2 - jest-regex-util: 26.0.0 - jest-snapshot: 26.6.2 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-resolve/26.6.2: - resolution: {integrity: sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/types': 26.6.2 - chalk: 4.1.2 - graceful-fs: 4.2.10 - jest-pnp-resolver: 1.2.3_jest-resolve@26.6.2 - jest-util: 26.6.2 - read-pkg-up: 7.0.1 - resolve: 1.22.1 - slash: 3.0.0 - dev: true - - /jest-runner/26.6.3: - resolution: {integrity: sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/console': 26.6.2 - '@jest/environment': 26.6.2 - '@jest/test-result': 26.6.2 - '@jest/types': 26.6.2 - '@types/node': 18.14.4 - chalk: 4.1.2 - emittery: 0.7.2 - exit: 0.1.2 - graceful-fs: 4.2.10 - jest-config: 26.6.3 - jest-docblock: 26.0.0 - jest-haste-map: 26.6.2 - jest-leak-detector: 26.6.2 - jest-message-util: 26.6.2 - jest-resolve: 26.6.2 - jest-runtime: 26.6.3 - jest-util: 26.6.2 - jest-worker: 26.6.2 - source-map-support: 0.5.21 - throat: 5.0.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - - /jest-runtime/26.6.3: - resolution: {integrity: sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==} - engines: {node: '>= 10.14.2'} - hasBin: true - dependencies: - '@jest/console': 26.6.2 - '@jest/environment': 26.6.2 - '@jest/fake-timers': 26.6.2 - '@jest/globals': 26.6.2 - '@jest/source-map': 26.6.2 - '@jest/test-result': 26.6.2 - '@jest/transform': 26.6.2 - '@jest/types': 26.6.2 - '@types/yargs': 15.0.15 - chalk: 4.1.2 - cjs-module-lexer: 0.6.0 - collect-v8-coverage: 1.0.1 - exit: 0.1.2 - glob: 7.2.3 - graceful-fs: 4.2.10 - jest-config: 26.6.3 - jest-haste-map: 26.6.2 - jest-message-util: 26.6.2 - jest-mock: 26.6.2 - jest-regex-util: 26.0.0 - jest-resolve: 26.6.2 - jest-snapshot: 26.6.2 - jest-util: 26.6.2 - jest-validate: 26.6.2 - slash: 3.0.0 - strip-bom: 4.0.0 - yargs: 15.4.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - - /jest-serializer/26.6.2: - resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} - engines: {node: '>= 10.14.2'} - dependencies: - '@types/node': 18.14.4 - graceful-fs: 4.2.10 - dev: true - - /jest-snapshot/26.6.2: - resolution: {integrity: sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==} - engines: {node: '>= 10.14.2'} - dependencies: - '@babel/types': 7.21.2 - '@jest/types': 26.6.2 - '@types/babel__traverse': 7.18.3 - '@types/prettier': 2.7.2 - chalk: 4.1.2 - expect: 26.6.2 - graceful-fs: 4.2.10 - jest-diff: 26.6.2 - jest-get-type: 26.3.0 - jest-haste-map: 26.6.2 - jest-matcher-utils: 26.6.2 - jest-message-util: 26.6.2 - jest-resolve: 26.6.2 - natural-compare: 1.4.0 - pretty-format: 26.6.2 - semver: 7.3.8 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-util/26.6.2: - resolution: {integrity: sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/types': 26.6.2 - '@types/node': 18.14.4 - chalk: 4.1.2 - graceful-fs: 4.2.10 - is-ci: 2.0.0 - micromatch: 4.0.5 - dev: true - /jest-util/29.4.3: resolution: {integrity: sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.4.3 - '@types/node': 18.14.4 - chalk: 4.1.2 - ci-info: 3.8.0 - graceful-fs: 4.2.10 - picomatch: 2.3.1 - dev: true - - /jest-validate/26.6.2: - resolution: {integrity: sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/types': 26.6.2 - camelcase: 6.3.0 - chalk: 4.1.2 - jest-get-type: 26.3.0 - leven: 3.1.0 - pretty-format: 26.6.2 - dev: true - - /jest-watcher/26.6.2: - resolution: {integrity: sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/test-result': 26.6.2 - '@jest/types': 26.6.2 - '@types/node': 18.14.4 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - jest-util: 26.6.2 - string-length: 4.0.2 - dev: true - - /jest-worker/26.6.2: - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} - engines: {node: '>= 10.13.0'} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: + '@jest/types': 29.4.3 '@types/node': 18.14.4 - merge-stream: 2.0.0 - supports-color: 7.2.0 + chalk: 4.1.2 + ci-info: 3.8.0 + graceful-fs: 4.2.10 + picomatch: 2.3.1 dev: true /jest-worker/29.4.3: @@ -5399,22 +4854,6 @@ packages: supports-color: 8.1.1 dev: true - /jest/26.6.3: - resolution: {integrity: sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==} - engines: {node: '>= 10.14.2'} - hasBin: true - dependencies: - '@jest/core': 26.6.3 - import-local: 3.1.0 - jest-cli: 26.6.3 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true @@ -5434,42 +4873,36 @@ packages: argparse: 2.0.1 dev: true - /jsdom/16.7.0: - resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} - engines: {node: '>=10'} + /jsdom/23.0.1: + resolution: {integrity: sha512-2i27vgvlUsGEBO9+/kJQRbtqtm+191b5zAZrU/UezVmnC2dlDAFLgDYJvAEi94T4kjsRKkezEtLQTgsNEsW2lQ==} + engines: {node: '>=18'} peerDependencies: - canvas: ^2.5.0 + canvas: ^2.11.2 peerDependenciesMeta: canvas: optional: true dependencies: - abab: 2.0.6 - acorn: 8.8.2 - acorn-globals: 6.0.0 - cssom: 0.4.4 - cssstyle: 2.3.0 - data-urls: 2.0.0 + cssstyle: 3.0.0 + data-urls: 5.0.0 decimal.js: 10.4.3 - domexception: 2.0.1 - escodegen: 2.0.0 - form-data: 3.0.1 - html-encoding-sniffer: 2.0.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 + form-data: 4.0.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.2 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.2 - parse5: 6.0.1 - saxes: 5.0.1 + nwsapi: 2.2.7 + parse5: 7.1.2 + rrweb-cssom: 0.6.0 + saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.2 - w3c-hr-time: 1.0.2 - w3c-xmlserializer: 2.0.0 - webidl-conversions: 6.1.0 - whatwg-encoding: 1.0.5 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - ws: 7.5.9 - xml-name-validator: 3.0.0 + tough-cookie: 4.1.3 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + ws: 8.15.1 + xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil - supports-color @@ -5517,6 +4950,10 @@ packages: hasBin: true dev: true + /jsonc-parser/3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + dev: true + /jsonfile/6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: @@ -5537,35 +4974,11 @@ packages: resolution: {integrity: sha512-7n6wXq4gNgBELfDCpzKc+mRrZFs7D+wgfF5WRFLNAr4DA/qtr9Js8uOAVAfHhuLMfAcQ0pRKqbpjx+TcJVdE1Q==} dev: true - /kind-of/3.2.2: - resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} - engines: {node: '>=0.10.0'} - dependencies: - is-buffer: 1.1.6 - dev: true - - /kind-of/4.0.0: - resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} - engines: {node: '>=0.10.0'} - dependencies: - is-buffer: 1.1.6 - dev: true - - /kind-of/5.1.0: - resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} - engines: {node: '>=0.10.0'} - dev: true - /kind-of/6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} dev: true - /kleur/3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: true - /known-css-properties/0.24.0: resolution: {integrity: sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==} dev: true @@ -5580,19 +4993,6 @@ packages: language-subtag-registry: 0.3.22 dev: true - /leven/3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: true - - /levn/0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 - dev: true - /levn/0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -5652,6 +5052,14 @@ packages: wrap-ansi: 7.0.0 dev: true + /local-pkg/0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + dependencies: + mlly: 1.4.2 + pkg-types: 1.0.3 + dev: true + /locate-path/3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -5711,6 +5119,12 @@ packages: js-tokens: 4.0.0 dev: true + /loupe/2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: true + /lru-cache/5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -5736,15 +5150,18 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true + /magic-string/0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /make-dir/3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} dependencies: - semver: 6.3.0 - dev: true - - /make-error/1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + semver: 6.3.1 dev: true /makeerror/1.0.12: @@ -5753,11 +5170,6 @@ packages: tmpl: 1.0.5 dev: true - /map-cache/0.2.2: - resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} - engines: {node: '>=0.10.0'} - dev: true - /map-obj/1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} @@ -5768,11 +5180,29 @@ packages: engines: {node: '>=8'} dev: true - /map-visit/1.0.0: - resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} - engines: {node: '>=0.10.0'} + /map-stream/0.1.0: + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + dev: true + + /marked-terminal/6.2.0_marked@9.1.6: + resolution: {integrity: sha512-ubWhwcBFHnXsjYNsu+Wndpg0zhY4CahSpPlA70PlO0rR9r2sZpkyU+rkCsOWH+KMEkx847UpALON+HWgxowFtw==} + engines: {node: '>=16.0.0'} + peerDependencies: + marked: '>=1 <12' dependencies: - object-visit: 1.0.1 + ansi-escapes: 6.2.0 + cardinal: 2.1.1 + chalk: 5.3.0 + cli-table3: 0.6.3 + marked: 9.1.6 + node-emoji: 2.1.3 + supports-hyperlinks: 3.0.0 + dev: true + + /marked/9.1.6: + resolution: {integrity: sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==} + engines: {node: '>= 16'} + hasBin: true dev: true /meow/9.0.0: @@ -5802,27 +5232,6 @@ packages: engines: {node: '>= 8'} dev: true - /micromatch/3.1.10: - resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} - engines: {node: '>=0.10.0'} - dependencies: - arr-diff: 4.0.0 - array-unique: 0.3.2 - braces: 2.3.2 - define-property: 2.0.2 - extend-shallow: 3.0.2 - extglob: 2.0.4 - fragment-cache: 0.2.1 - kind-of: 6.0.3 - nanomatch: 1.2.13 - object.pick: 1.3.0 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color - dev: true - /micromatch/4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -5884,18 +5293,18 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /mixin-deep/1.3.2: - resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} - engines: {node: '>=0.10.0'} + /mlly/1.4.2: + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} dependencies: - for-in: 1.0.2 - is-extendable: 1.0.1 + acorn: 8.11.2 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.3.2 dev: true - /mkdirp/1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true + /mri/1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} dev: true /ms/2.0.0: @@ -5906,23 +5315,10 @@ packages: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true - /nanomatch/1.2.13: - resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} - engines: {node: '>=0.10.0'} - dependencies: - arr-diff: 4.0.0 - array-unique: 0.3.2 - define-property: 2.0.2 - extend-shallow: 3.0.2 - fragment-cache: 0.2.1 - is-windows: 1.0.2 - kind-of: 6.0.3 - object.pick: 1.3.0 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color + /nanoid/3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true dev: true /natural-compare-lite/1.4.0: @@ -5933,26 +5329,33 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /nice-try/1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + /node-domexception/1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} dev: true - /node-int64/0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + /node-emoji/2.1.3: + resolution: {integrity: sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==} + engines: {node: '>=18'} + dependencies: + '@sindresorhus/is': 4.6.0 + char-regex: 1.0.2 + emojilib: 2.4.0 + skin-tone: 2.0.0 dev: true - /node-notifier/8.0.2: - resolution: {integrity: sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==} - requiresBuild: true + /node-fetch/3.3.1: + resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - growly: 1.3.0 - is-wsl: 2.2.0 - semver: 7.3.8 - shellwords: 0.1.1 - uuid: 8.3.2 - which: 2.0.2 + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: true + + /node-int64/0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - optional: true /node-releases/2.0.10: resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} @@ -5963,7 +5366,7 @@ packages: dependencies: hosted-git-info: 2.8.9 resolve: 1.22.1 - semver: 5.7.1 + semver: 5.7.2 validate-npm-package-license: 3.0.4 dev: true @@ -5973,34 +5376,36 @@ packages: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.11.0 - semver: 7.3.8 + semver: 7.5.4 validate-npm-package-license: 3.0.4 dev: true - /normalize-path/2.1.1: - resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} - engines: {node: '>=0.10.0'} - dependencies: - remove-trailing-separator: 1.1.0 - dev: true - /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} dev: true - /npm-run-path/2.0.2: - resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} - engines: {node: '>=4'} + /npm-bundled/2.0.1: + resolution: {integrity: sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: - path-key: 2.0.1 + npm-normalize-package-bin: 2.0.0 dev: true - /npm-run-path/4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + /npm-normalize-package-bin/2.0.0: + resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dev: true + + /npm-packlist/5.1.3: + resolution: {integrity: sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true dependencies: - path-key: 3.1.1 + glob: 8.1.0 + ignore-walk: 5.0.1 + npm-bundled: 2.0.1 + npm-normalize-package-bin: 2.0.0 dev: true /npm-run-path/5.1.0: @@ -6016,8 +5421,8 @@ packages: boolbase: 1.0.0 dev: true - /nwsapi/2.2.2: - resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} + /nwsapi/2.2.7: + resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} dev: true /object-assign/4.1.1: @@ -6025,15 +5430,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /object-copy/0.1.0: - resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} - engines: {node: '>=0.10.0'} - dependencies: - copy-descriptor: 0.1.1 - define-property: 0.2.5 - kind-of: 3.2.2 - dev: true - /object-inspect/1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true @@ -6043,13 +5439,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /object-visit/1.0.1: - resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} - engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 - dev: true - /object.assign/4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} @@ -6085,13 +5474,6 @@ packages: es-abstract: 1.21.1 dev: true - /object.pick/1.3.0: - resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} - engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 - dev: true - /object.values/1.1.6: resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} engines: {node: '>= 0.4'} @@ -6121,38 +5503,16 @@ packages: mimic-fn: 4.0.0 dev: true - /optionator/0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - word-wrap: 1.2.3 - dev: true - - /optionator/0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + /optionator/0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - word-wrap: 1.2.3 - dev: true - - /p-each-series/2.2.0: - resolution: {integrity: sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==} - engines: {node: '>=8'} - dev: true - - /p-finally/1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} dev: true /p-limit/2.3.0: @@ -6169,6 +5529,13 @@ packages: yocto-queue: 0.1.0 dev: true + /p-limit/5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} + dependencies: + yocto-queue: 1.0.0 + dev: true + /p-locate/3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} @@ -6224,13 +5591,10 @@ packages: engines: {node: '>=12'} dev: true - /parse5/6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: true - - /pascalcase/0.1.1: - resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} - engines: {node: '>=0.10.0'} + /parse5/7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + dependencies: + entities: 4.5.0 dev: true /path-exists/3.0.0: @@ -6248,11 +5612,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /path-key/2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - dev: true - /path-key/3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -6272,6 +5631,20 @@ packages: engines: {node: '>=8'} dev: true + /pathe/1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + dev: true + + /pathval/1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + + /pause-stream/0.0.11: + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + dependencies: + through: 2.3.8 + dev: true + /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true @@ -6299,6 +5672,14 @@ packages: find-up: 4.1.0 dev: true + /pkg-types/1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.4.2 + pathe: 1.1.1 + dev: true + /pkg-up/3.1.0: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} @@ -6318,11 +5699,6 @@ packages: engines: {node: '>=4'} dev: true - /posix-character-classes/0.1.1: - resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} - engines: {node: '>=0.10.0'} - dev: true - /postcss-selector-parser/6.0.11: resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} engines: {node: '>=4'} @@ -6331,9 +5707,13 @@ packages: util-deprecate: 1.0.2 dev: true - /prelude-ls/1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} - engines: {node: '>= 0.8.0'} + /postcss/8.4.32: + resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 dev: true /prelude-ls/1.2.1: @@ -6370,6 +5750,15 @@ packages: react-is: 17.0.2 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} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + /pretty-ms/8.0.0: resolution: {integrity: sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==} engines: {node: '>=14.16'} @@ -6377,14 +5766,6 @@ packages: parse-ms: 3.0.0 dev: true - /prompts/2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - dev: true - /prop-types/15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: @@ -6393,15 +5774,26 @@ packages: react-is: 16.13.1 dev: true + /ps-tree/1.2.0: + resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} + engines: {node: '>= 0.10'} + hasBin: true + dependencies: + event-stream: 3.3.4 + dev: true + /psl/1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true - /pump/3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + /publint/0.2.6: + resolution: {integrity: sha512-zMwDVwrlLnCsviDXlczhuc5nIljsjZUgbLeKNyMYqbIJLRhcW81xrKsHlEu21YUaIxpa8T66tdIqP0mZm9ym3A==} + engines: {node: '>=16'} + hasBin: true dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 + npm-packlist: 5.1.3 + picocolors: 1.0.0 + sade: 1.8.1 dev: true /punycode/2.3.0: @@ -6409,6 +5801,11 @@ packages: engines: {node: '>=6'} dev: true + /punycode/2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + /querystringify/2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} dev: true @@ -6428,15 +5825,14 @@ packages: safe-buffer: 5.2.1 dev: true - /react-dom/17.0.2_react@17.0.2: - resolution: {integrity: sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==} + /react-dom/18.2.0_react@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: - react: 17.0.2 + react: ^18.2.0 dependencies: loose-envify: 1.4.0 - object-assign: 4.1.1 - react: 17.0.2 - scheduler: 0.20.2 + react: 18.2.0 + scheduler: 0.23.0 dev: true /react-is/16.13.1: @@ -6447,12 +5843,15 @@ packages: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} dev: true - /react/17.0.2: - resolution: {integrity: sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==} + /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 - object-assign: 4.1.1 dev: true /read-pkg-up/7.0.1: @@ -6482,6 +5881,12 @@ packages: strip-indent: 3.0.0 dev: true + /redeyed/2.1.1: + resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} + dependencies: + esprima: 4.0.1 + dev: true + /regenerate-unicode-properties/10.1.0: resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} engines: {node: '>=4'} @@ -6503,14 +5908,6 @@ packages: '@babel/runtime': 7.21.0 dev: true - /regex-not/1.0.2: - resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} - engines: {node: '>=0.10.0'} - dependencies: - extend-shallow: 3.0.2 - safe-regex: 1.1.0 - dev: true - /regexp-tree/0.1.24: resolution: {integrity: sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==} hasBin: true @@ -6525,11 +5922,6 @@ packages: functions-have-names: 1.2.3 dev: true - /regexpp/3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true - /regexpu-core/5.3.1: resolution: {integrity: sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==} engines: {node: '>=4'} @@ -6549,29 +5941,6 @@ packages: jsesc: 0.5.0 dev: true - /remove-trailing-separator/1.1.0: - resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} - dev: true - - /repeat-element/1.1.4: - resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} - engines: {node: '>=0.10.0'} - dev: true - - /repeat-string/1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} - engines: {node: '>=0.10'} - dev: true - - /require-directory/2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true - - /require-main-filename/2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: true - /requires-port/1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true @@ -6580,13 +5949,6 @@ packages: resolution: {integrity: sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==} dev: true - /resolve-cwd/3.0.0: - 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'} @@ -6597,11 +5959,6 @@ packages: engines: {node: '>=8'} dev: true - /resolve-url/0.2.1: - resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} - deprecated: https://github.com/lydell/resolve-url#deprecated - dev: true - /resolve/1.22.1: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true @@ -6628,11 +5985,6 @@ packages: signal-exit: 3.0.7 dev: true - /ret/0.1.15: - resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} - engines: {node: '>=0.12'} - dev: true - /reusify/1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -6649,7 +6001,7 @@ packages: glob: 7.2.3 dev: true - /rollup-plugin-typescript2/0.34.1_fn2onl6nbsljlgjr3jlzr6w7we: + /rollup-plugin-typescript2/0.34.1_vjug3yta6lblqnvu3zjesxy34m: resolution: {integrity: sha512-P4cHLtGikESmqi1CA+tdMDUv8WbQV48mzPYt77TSTOPJpERyZ9TXdDgjSDix8Fkqce6soYz3+fa4lrC93IEkcw==} peerDependencies: rollup: '>=1.26.3' @@ -6661,7 +6013,7 @@ packages: rollup: 3.18.0 semver: 7.3.8 tslib: 2.5.0 - typescript: 4.9.5 + typescript: 5.3.3 dev: true /rollup/3.18.0: @@ -6669,12 +6021,32 @@ packages: engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true - /rsvp/4.8.5: - resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==} - engines: {node: 6.* || >= 7.*} + /rollup/4.9.0: + resolution: {integrity: sha512-bUHW/9N21z64gw8s6tP4c88P382Bq/L5uZDowHlHx6s/QWpjJXivIAbEw6LZthgSvlEizZBfLC4OAvWe7aoF7A==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.9.0 + '@rollup/rollup-android-arm64': 4.9.0 + '@rollup/rollup-darwin-arm64': 4.9.0 + '@rollup/rollup-darwin-x64': 4.9.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.9.0 + '@rollup/rollup-linux-arm64-gnu': 4.9.0 + '@rollup/rollup-linux-arm64-musl': 4.9.0 + '@rollup/rollup-linux-riscv64-gnu': 4.9.0 + '@rollup/rollup-linux-x64-gnu': 4.9.0 + '@rollup/rollup-linux-x64-musl': 4.9.0 + '@rollup/rollup-win32-arm64-msvc': 4.9.0 + '@rollup/rollup-win32-ia32-msvc': 4.9.0 + '@rollup/rollup-win32-x64-msvc': 4.9.0 + fsevents: 2.3.3 + dev: true + + /rrweb-cssom/0.6.0: + resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} dev: true /run-parallel/1.2.0: @@ -6686,7 +6058,14 @@ packages: /rxjs/7.8.0: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: - tslib: 2.5.0 + tslib: 2.6.2 + dev: true + + /sade/1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 dev: true /safe-buffer/5.2.1: @@ -6701,12 +6080,6 @@ packages: is-regex: 1.1.4 dev: true - /safe-regex/1.1.0: - resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} - dependencies: - ret: 0.1.15 - dev: true - /safe-regex/2.1.1: resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} dependencies: @@ -6717,41 +6090,21 @@ packages: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true - /sane/4.1.0: - resolution: {integrity: sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==} - engines: {node: 6.* || 8.* || >= 10.*} - deprecated: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added - hasBin: true - dependencies: - '@cnakazawa/watch': 1.0.4 - anymatch: 2.0.0 - capture-exit: 2.0.0 - exec-sh: 0.3.6 - execa: 1.0.0 - fb-watchman: 2.0.2 - micromatch: 3.1.10 - minimist: 1.2.8 - walker: 1.0.8 - transitivePeerDependencies: - - supports-color - dev: true - - /saxes/5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} - engines: {node: '>=10'} + /saxes/6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} dependencies: xmlchars: 2.2.0 dev: true - /scheduler/0.20.2: - resolution: {integrity: sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==} + /scheduler/0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} dependencies: loose-envify: 1.4.0 - object-assign: 4.1.1 dev: true - /semver/5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + /semver/5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true dev: true @@ -6760,6 +6113,11 @@ packages: hasBin: true dev: true + /semver/6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + /semver/7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} @@ -6768,31 +6126,18 @@ packages: lru-cache: 6.0.0 dev: true - /serialize-javascript/6.0.1: - resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} - dependencies: - randombytes: 2.1.0 - dev: true - - /set-blocking/2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true - - /set-value/2.0.1: - resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} - engines: {node: '>=0.10.0'} + /semver/7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true dependencies: - extend-shallow: 2.0.1 - is-extendable: 0.1.1 - is-plain-object: 2.0.4 - split-string: 3.1.0 + lru-cache: 6.0.0 dev: true - /shebang-command/1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + /serialize-javascript/6.0.1: + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} dependencies: - shebang-regex: 1.0.0 + randombytes: 2.1.0 dev: true /shebang-command/2.0.0: @@ -6802,21 +6147,11 @@ packages: shebang-regex: 3.0.0 dev: true - /shebang-regex/1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - dev: true - /shebang-regex/3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} dev: true - /shellwords/0.1.1: - resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} - dev: true - optional: true - /side-channel/1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -6825,12 +6160,24 @@ packages: object-inspect: 1.12.3 dev: true + /siginfo/2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: true + /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true - /sisteransi/1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + /signal-exit/4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + + /skin-tone/2.0.0: + resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} + engines: {node: '>=8'} + dependencies: + unicode-emoji-modifier-base: 1.0.0 dev: true /slash/3.0.0: @@ -6838,6 +6185,11 @@ packages: engines: {node: '>=8'} dev: true + /slash/4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: true + /slice-ansi/3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} @@ -6868,47 +6220,9 @@ packages: resolution: {integrity: sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==} dev: true - /snapdragon-node/2.1.1: - resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} - engines: {node: '>=0.10.0'} - dependencies: - define-property: 1.0.0 - isobject: 3.0.1 - snapdragon-util: 3.0.1 - dev: true - - /snapdragon-util/3.0.1: - resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - - /snapdragon/0.8.2: - resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dependencies: - base: 0.11.2 - debug: 2.6.9 - define-property: 0.2.5 - extend-shallow: 2.0.1 - map-cache: 0.2.2 - source-map: 0.5.7 - source-map-resolve: 0.5.3 - use: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /source-map-resolve/0.5.3: - resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} - deprecated: See https://github.com/lydell/source-map-resolve#deprecated - dependencies: - atob: 2.1.2 - decode-uri-component: 0.2.2 - resolve-url: 0.2.1 - source-map-url: 0.4.1 - urix: 0.1.0 dev: true /source-map-support/0.5.21: @@ -6918,11 +6232,6 @@ packages: source-map: 0.6.1 dev: true - /source-map-url/0.4.1: - resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} - deprecated: See https://github.com/lydell/source-map-url#deprecated - dev: true - /source-map/0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} @@ -6933,11 +6242,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /source-map/0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: true - /spdx-correct/3.1.1: resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} dependencies: @@ -6960,30 +6264,28 @@ packages: resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} dev: true - /split-string/3.1.0: - resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} - engines: {node: '>=0.10.0'} + /split/0.3.3: + resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} dependencies: - extend-shallow: 3.0.2 + through: 2.3.8 dev: true /sprintf-js/1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true - /stack-utils/2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - dependencies: - escape-string-regexp: 2.0.0 + /stackback/0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} dev: true - /static-extend/0.1.2: - resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} - engines: {node: '>=0.10.0'} + /std-env/3.6.0: + resolution: {integrity: sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==} + dev: true + + /stream-combiner/0.0.4: + resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} dependencies: - define-property: 0.2.5 - object-copy: 0.1.0 + duplexer: 0.1.2 dev: true /string-argv/0.3.1: @@ -6991,14 +6293,6 @@ packages: engines: {node: '>=0.6.19'} dev: true - /string-length/4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 - dev: true - /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -7065,21 +6359,6 @@ packages: engines: {node: '>=4'} dev: true - /strip-bom/4.0.0: - 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'} - dev: true - - /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'} @@ -7097,6 +6376,12 @@ packages: engines: {node: '>=8'} dev: true + /strip-literal/1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + dependencies: + acorn: 8.11.2 + dev: true + /style-to-object/0.3.0: resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} dependencies: @@ -7132,6 +6417,14 @@ packages: supports-color: 7.2.0 dev: true + /supports-hyperlinks/3.0.0: + resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==} + engines: {node: '>=14.18'} + 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'} @@ -7146,14 +6439,6 @@ packages: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /terminal-link/2.1.1: - resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} - engines: {node: '>=8'} - dependencies: - ansi-escapes: 4.3.2 - supports-hyperlinks: 2.3.0 - dev: true - /terser/5.16.5: resolution: {integrity: sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==} engines: {node: '>=10'} @@ -7178,14 +6463,24 @@ packages: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /throat/5.0.0: - resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} - dev: true - /through/2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true + /tinybench/2.5.1: + resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} + dev: true + + /tinypool/0.8.1: + resolution: {integrity: sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy/2.2.0: + resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} + engines: {node: '>=14.0.0'} + dev: true + /tmpl/1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true @@ -7195,21 +6490,6 @@ packages: engines: {node: '>=4'} dev: true - /to-object-path/0.3.0: - resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - - /to-regex-range/2.1.1: - resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} - engines: {node: '>=0.10.0'} - dependencies: - is-number: 3.0.0 - repeat-string: 1.6.1 - dev: true - /to-regex-range/5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -7217,18 +6497,8 @@ packages: is-number: 7.0.0 dev: true - /to-regex/3.0.2: - resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} - engines: {node: '>=0.10.0'} - dependencies: - define-property: 2.0.2 - extend-shallow: 3.0.2 - regex-not: 1.0.2 - safe-regex: 1.1.0 - dev: true - - /tough-cookie/4.1.2: - resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} + /tough-cookie/4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} dependencies: psl: 1.9.0 @@ -7237,11 +6507,11 @@ packages: url-parse: 1.5.10 dev: true - /tr46/2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} - engines: {node: '>=8'} + /tr46/5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 dev: true /trim-newlines/3.0.1: @@ -7249,26 +6519,17 @@ packages: engines: {node: '>=8'} dev: true - /ts-jest/26.5.6_xuote2qreek47x2di7kesslrai: - resolution: {integrity: sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==} - engines: {node: '>= 10'} + /tsconfck/2.1.2_typescript@5.3.3: + resolution: {integrity: sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==} + engines: {node: ^14.13.1 || ^16 || >=18} hasBin: true peerDependencies: - jest: '>=26 <27' - typescript: '>=3.8 <5.0' + typescript: ^4.3.5 || ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true dependencies: - bs-logger: 0.2.6 - buffer-from: 1.1.2 - fast-json-stable-stringify: 2.1.0 - jest: 26.6.3 - jest-util: 26.6.2 - json5: 2.2.3 - lodash: 4.17.21 - make-error: 1.3.6 - mkdirp: 1.0.4 - semver: 7.3.8 - typescript: 4.9.5 - yargs-parser: 20.2.9 + typescript: 5.3.3 dev: true /tsconfig-paths/3.14.2: @@ -7301,21 +6562,18 @@ packages: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} dev: true - /tsutils/3.21.0_typescript@4.9.5: + /tslib/2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true + + /tsutils/3.21.0_typescript@5.3.3: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 4.9.5 - dev: true - - /type-check/0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 + typescript: 5.3.3 dev: true /type-check/0.4.0: @@ -7355,6 +6613,11 @@ packages: engines: {node: '>=8'} dev: true + /type-fest/3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + dev: true + /typed-array-length/1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: @@ -7363,18 +6626,22 @@ packages: is-typed-array: 1.1.10 dev: true - /typedarray-to-buffer/3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 + /typescript/5.3.2: + resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} + engines: {node: '>=14.17'} + hasBin: true dev: true - /typescript/4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} + /typescript/5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} hasBin: true dev: true + /ufo/1.3.2: + resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} + dev: true + /uglify-js/3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} @@ -7390,11 +6657,20 @@ packages: which-boxed-primitive: 1.0.2 dev: true + /undici-types/5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + /unicode-canonical-property-names-ecmascript/2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} dev: true + /unicode-emoji-modifier-base/1.0.0: + resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} + engines: {node: '>=4'} + dev: true + /unicode-match-property-ecmascript/2.0.0: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} @@ -7413,16 +6689,6 @@ packages: engines: {node: '>=4'} dev: true - /union-value/1.0.1: - resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} - engines: {node: '>=0.10.0'} - dependencies: - arr-union: 3.1.0 - get-value: 2.0.6 - is-extendable: 0.1.1 - set-value: 2.0.1 - dev: true - /universalify/0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} @@ -7433,14 +6699,6 @@ packages: engines: {node: '>= 10.0.0'} dev: true - /unset-value/1.0.0: - resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} - engines: {node: '>=0.10.0'} - dependencies: - has-value: 0.3.1 - isobject: 3.0.1 - dev: true - /update-browserslist-db/1.0.10_browserslist@4.21.5: resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true @@ -7458,11 +6716,6 @@ packages: punycode: 2.3.0 dev: true - /urix/0.1.0: - resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} - deprecated: Please see https://github.com/lydell/urix#deprecated - dev: true - /url-parse/1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} dependencies: @@ -7470,61 +6723,173 @@ packages: requires-port: 1.0.0 dev: true - /use-sync-external-store/1.2.0_react@17.0.2: + /use-sync-external-store/1.2.0_react@18.2.0: resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - react: 17.0.2 - dev: true - - /use/3.1.1: - resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} - engines: {node: '>=0.10.0'} + react: 18.2.0 dev: true /util-deprecate/1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /uuid/8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true + /validate-html-nesting/1.2.1: + resolution: {integrity: sha512-T1ab131NkP3BfXB7KUSgV7Rhu81R2id+L6NaJ7NypAAG5iV6gXnPpQE5RK1fvb+3JYsPTL+ihWna5sr5RN9gaQ==} dev: true - optional: true - /v8-compile-cache/2.3.0: - resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} + /validate-npm-package-license/3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.1.1 + spdx-expression-parse: 3.0.1 dev: true - /v8-to-istanbul/7.1.2: - resolution: {integrity: sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==} - engines: {node: '>=10.10.0'} + /validate-npm-package-name/5.0.0: + resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.9.0 - source-map: 0.7.4 + builtins: 5.0.1 dev: true - /validate-html-nesting/1.2.1: - resolution: {integrity: sha512-T1ab131NkP3BfXB7KUSgV7Rhu81R2id+L6NaJ7NypAAG5iV6gXnPpQE5RK1fvb+3JYsPTL+ihWna5sr5RN9gaQ==} + /vite-node/1.0.4: + resolution: {integrity: sha512-9xQQtHdsz5Qn8hqbV7UKqkm8YkJhzT/zr41Dmt5N7AlD8hJXw/Z7y0QiD5I8lnTthV9Rvcvi0QW7PI0Fq83ZPg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 5.0.10 + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser dev: true - /validate-npm-package-license/3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + /vite-tsconfig-paths/4.2.2_typescript@5.3.3: + resolution: {integrity: sha512-dq0FjyxHHDnp0uS3P12WEOX2W7NeuLzX9AWP38D7Zw2CTbFErapwQVlCiT5DMJcVWKQ1MMdTe92PZl/rBQ7qcw==} + peerDependencies: + vite: '*' + peerDependenciesMeta: + vite: + optional: true dependencies: - spdx-correct: 3.1.1 - spdx-expression-parse: 3.0.1 + debug: 4.3.4 + globrex: 0.1.2 + tsconfck: 2.1.2_typescript@5.3.3 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /vite/5.0.10: + resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.19.9 + postcss: 8.4.32 + rollup: 4.9.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitest/1.0.4_jsdom@23.0.1: + resolution: {integrity: sha512-s1GQHp/UOeWEo4+aXDOeFBJwFzL6mjycbQwwKWX2QcYfh/7tIerS59hWQ20mxzupTJluA2SdwiBuWwQHH67ckg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': ^1.0.0 + '@vitest/ui': ^1.0.0 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@vitest/expect': 1.0.4 + '@vitest/runner': 1.0.4 + '@vitest/snapshot': 1.0.4 + '@vitest/spy': 1.0.4 + '@vitest/utils': 1.0.4 + acorn-walk: 8.3.1 + cac: 6.7.14 + chai: 4.3.10 + debug: 4.3.4 + execa: 8.0.1 + jsdom: 23.0.1 + local-pkg: 0.5.0 + magic-string: 0.30.5 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.6.0 + strip-literal: 1.3.0 + tinybench: 2.5.1 + tinypool: 0.8.1 + vite: 5.0.10 + vite-node: 1.0.4 + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser dev: true - /vue-eslint-parser/9.0.2_eslint@8.22.0: + /vue-eslint-parser/9.0.2_eslint@8.56.0: resolution: {integrity: sha512-uCPQwTGjOtAYrwnU+76pYxalhjsh7iFBsHwBqDHiOPTxtICDaraO4Szw54WFTNZTAEsgHHzqFOu1mmnBOBRzDA==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: debug: 4.3.4 - eslint: 8.22.0 + eslint: 8.56.0 eslint-scope: 7.1.1 eslint-visitor-keys: 3.3.0 espree: 9.4.1 @@ -7535,18 +6900,11 @@ packages: - supports-color dev: true - /w3c-hr-time/1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - deprecated: Use your platform's native performance.now() and performance.timeOrigin. - dependencies: - browser-process-hrtime: 1.0.0 - dev: true - - /w3c-xmlserializer/2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} - engines: {node: '>=10'} + /w3c-xmlserializer/5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} dependencies: - xml-name-validator: 3.0.0 + xml-name-validator: 5.0.0 dev: true /walker/1.0.8: @@ -7555,33 +6913,39 @@ packages: makeerror: 1.0.12 dev: true - /webidl-conversions/5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} - engines: {node: '>=8'} + /web-streams-polyfill/3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} + dev: true + + /webidl-conversions/7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} dev: true - /webidl-conversions/6.1.0: - resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} - engines: {node: '>=10.4'} + /webpod/0.0.2: + resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} + hasBin: true dev: true - /whatwg-encoding/1.0.5: - resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + /whatwg-encoding/3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} dependencies: - iconv-lite: 0.4.24 + iconv-lite: 0.6.3 dev: true - /whatwg-mimetype/2.3.0: - resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + /whatwg-mimetype/4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} dev: true - /whatwg-url/8.7.0: - resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} - engines: {node: '>=10'} + /whatwg-url/14.0.0: + resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} + engines: {node: '>=18'} dependencies: - lodash: 4.17.21 - tr46: 2.1.0 - webidl-conversions: 6.1.0 + tr46: 5.0.0 + webidl-conversions: 7.0.0 dev: true /which-boxed-primitive/1.0.2: @@ -7594,10 +6958,6 @@ packages: is-symbol: 1.0.4 dev: true - /which-module/2.0.0: - resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} - dev: true - /which-typed-array/1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} engines: {node: '>= 0.4'} @@ -7610,24 +6970,29 @@ packages: is-typed-array: 1.1.10 dev: true - /which/1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} hasBin: true dependencies: isexe: 2.0.0 dev: true - /which/2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} + /which/3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true dependencies: isexe: 2.0.0 dev: true - /word-wrap/1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} + /why-is-node-running/2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 dev: true /wrap-ansi/6.2.0: @@ -7652,15 +7017,6 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /write-file-atomic/3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - dev: true - /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} @@ -7669,12 +7025,12 @@ packages: signal-exit: 3.0.7 dev: true - /ws/7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} + /ws/8.15.1: + resolution: {integrity: sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==} + engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: '>=5.0.2' peerDependenciesMeta: bufferutil: optional: true @@ -7682,21 +7038,18 @@ packages: optional: true dev: true - /xml-name-validator/3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - dev: true - /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} dev: true - /xmlchars/2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + /xml-name-validator/5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} dev: true - /y18n/4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + /xmlchars/2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true /yallist/3.1.1: @@ -7712,12 +7065,9 @@ packages: engines: {node: '>= 14'} dev: true - /yargs-parser/18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 + /yaml/2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} dev: true /yargs-parser/20.2.9: @@ -7725,24 +7075,34 @@ packages: engines: {node: '>=10'} dev: true - /yargs/15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.0 - y18n: 4.0.3 - yargs-parser: 18.1.3 - dev: true - /yocto-queue/0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true + + /yocto-queue/1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true + + /zx/7.2.3: + resolution: {integrity: sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==} + engines: {node: '>= 16.0.0'} + hasBin: true + dependencies: + '@types/fs-extra': 11.0.4 + '@types/minimist': 1.2.2 + '@types/node': 18.19.3 + '@types/ps-tree': 1.1.6 + '@types/which': 3.0.3 + chalk: 5.3.0 + fs-extra: 11.2.0 + fx: 31.0.0 + globby: 13.2.2 + minimist: 1.2.8 + node-fetch: 3.3.1 + ps-tree: 1.2.0 + webpod: 0.0.2 + which: 3.0.1 + yaml: 2.3.4 + dev: true diff --git a/public-types/reflect.d.ts b/public-types/reflect.d.ts new file mode 100644 index 0000000..0a2a520 --- /dev/null +++ b/public-types/reflect.d.ts @@ -0,0 +1,227 @@ +/* eslint-disable @typescript-eslint/consistent-type-definitions */ +import type { EventCallable, Store } from 'effector'; +import type { useUnit } from 'effector-react'; +import type { ComponentType, FC, PropsWithChildren, ReactHTML } from 'react'; + +type UseUnitConfig = Parameters[1]; + +type UnbindableProps = 'key' | 'ref'; + +type Hooks = { + mounted?: EventCallable | (() => unknown); + unmounted?: EventCallable | (() => unknown); +}; + +type BindFromProps = { + [K in keyof Props]?: K extends UnbindableProps + ? never + : Props[K] extends (...args: any[]) => any + ? // To force TS infer types for any provided callback + | ((...args: Parameters) => ReturnType) + // Edge-case: allow to pass an event listener without any parameters (e.g. onClick: () => ...) + | (() => ReturnType) + : Store | Props[K]; +}; + +// relfect types +/** + * Operator that creates a component, which props are reactively bound to a store or statically - to any other value. + * + * @example + * ``` + * const Name = reflect({ + * view: Input, + * bind: { + * value: $name, + * placeholder: 'Name', + * onChange: changeName.prepend(inputChanged), + * }, + * }); + * ``` + */ +export function reflect>(config: { + view: ComponentType; + bind: Bind; + hooks?: Hooks; + /** + * This configuration is passed directly to `useUnit`'s hook second argument. + */ + useUnitConfig?: UseUnitConfig; +}): FC>; + +// Note: FC is used as a return type, because tests on a real Next.js project showed, +// that if theoretically better option like (props: ...) => React.ReactNode is used, +// then TS type inference works worse in some cases - didn't manage to reproduce it in a reflect type tests though. +// +// It is not clear why it works this way (FC return type is actually compatible with ReactNode), but it seems that FC is the best option here :shrug: + +// createReflect types +/** + * Method to create a `reflect` function with a predefined `view` component. + * + * @example + * ``` + * const reflectInput = createReflect(Input); + * + * const Name = reflectInput({ + * value: $name, + * placeholder: 'Name', + * onChange: changeName.prepend(inputChanged), + * }); + * ``` + */ +export function createReflect>( + component: ComponentType, +): ( + bind: Bind, + features?: { + hooks?: Hooks; + /** + * This configuration is passed directly to `useUnit`'s hook second argument. + */ + useUnitConfig?: UseUnitConfig; + }, +) => FC>; + +// list types +type PropsifyBind = { + [K in keyof Bind]: Bind[K] extends Store ? Value : Bind[K]; +}; + +type ReflectedProps = Item & PropsifyBind; + +/** + * Operator to create a component, which reactivly renders a list of `view` components based on the `source` store with an array value. + * Also supports `bind`, like the `reflect` operator. + * + * @example + * ``` + * const List = list({ + * source: $items, + * view: Item, + * mapItem: { + * id: (item) => item.id, + * value: (item) => item.value, + * onChange: (_item) => (_params) => {}, + * }, + *}); + * + * ``` + */ +export function list< + Props, + Item, + MapItem extends { + [M in keyof Omit]: (item: Item, index: number) => Props[M]; + }, + Bind extends BindFromProps = object, +>( + config: ReflectedProps extends Props + ? { + source: Store; + view: ComponentType; + bind?: Bind; + mapItem?: MapItem; + getKey?: (item: Item) => React.Key; + hooks?: Hooks; + /** + * This configuration is passed directly to `useUnit`'s hook second argument. + */ + useUnitConfig?: UseUnitConfig; + } + : { + source: Store; + view: ComponentType; + bind?: Bind; + mapItem: MapItem; + getKey?: (item: Item) => React.Key; + hooks?: Hooks; + /** + * This configuration is passed directly to `useUnit`'s hook second argument. + */ + useUnitConfig?: UseUnitConfig; + }, +): FC; + +// variant types + +/** + * Operator to conditionally render a component based on the reactive `source` store value. + * + * @example + * ``` + * // source is a store with a string + * const Component = variant({ + * source: $isError.map((isError) => (isError ? 'error' : 'success')), + * cases: { + * error: ErrorComponent, + * success: SuccessComponent, + * }, + *}); + * // shorthand for boolean source + * const Component = variant({ + * if: $isError, + * then: ErrorComponent, + * else: SuccessComponent, + * }); + * ``` + */ +export function variant< + Props, + CaseType extends string, + Bind extends BindFromProps, +>( + config: + | { + source: Store; + cases: Partial>>; + default?: ComponentType; + bind?: Bind; + hooks?: Hooks; + /** + * This configuration is passed directly to `useUnit`'s hook second argument. + */ + useUnitConfig?: UseUnitConfig; + } + | { + if: Store; + then: ComponentType; + else?: ComponentType; + bind?: Bind; + hooks?: Hooks; + /** + * This configuration is passed directly to `useUnit`'s hook second argument. + */ + useUnitConfig?: UseUnitConfig; + }, +): FC>; + +// fromTag types +type GetProps = Exclude< + Parameters[0], + null | undefined +>; + +/** + * + * Simple helper to allow to use `reflect` with any valid html tag + * + * @example + * ``` + * import { reflect, fromTag } from '@effector/reflect' + * + * const DomInput = fromTag("input") + * + * const View = reflect({ + * view: DomInput, + * bind: { + * type: 'radio', + * value: $value, + * onChange: (e) => e.target.value, + * } + * }) + * ``` + */ +export function fromTag( + htmlTag: HtmlTag, +): FC>>; diff --git a/rollup.config.cjs b/rollup.config.cjs index 9b8e28e..70f76c0 100644 --- a/rollup.config.cjs +++ b/rollup.config.cjs @@ -8,10 +8,8 @@ const babelConfig = require('./babel.config.json'); const plugins = () => [ typescript({ - useTsconfigDeclarationDir: true, - tsconfigDefaults: { - compilerOptions: { declaration: true, declarationDir: './dist' }, - }, + tsconfig: './tsconfig.json', + check: false, }), babel({ exclude: 'node_modules/**', @@ -26,19 +24,12 @@ const plugins = () => [ extensions: ['.js', '.mjs'], }), commonjs({ extensions: ['.js', '.mjs'] }), - terser(), + // terser(), ]; const noSsr = './src/index.ts'; -const ssr = './src/ssr.ts'; const scope = './src/scope.ts'; -const external = [ - 'effector', - 'effector-react', - 'react', - 'effector-react/ssr', - 'effector-react/scope', -]; +const external = ['effector', 'effector-react', 'react', 'effector-react/scope']; module.exports = [ { @@ -46,18 +37,7 @@ module.exports = [ external, plugins: plugins(), output: { - file: './dist/reflect.mjs', - format: 'es', - sourcemap: true, - externalLiveBindings: false, - }, - }, - { - input: ssr, - external, - plugins: plugins(), - output: { - file: './dist/ssr.mjs', + file: './dist/index.mjs', format: 'es', sourcemap: true, externalLiveBindings: false, @@ -79,20 +59,7 @@ module.exports = [ external, plugins: plugins(), output: { - file: './dist/reflect.cjs', - format: 'cjs', - freeze: false, - exports: 'named', - sourcemap: true, - externalLiveBindings: false, - }, - }, - { - input: ssr, - external, - plugins: plugins(), - output: { - file: './dist/ssr.js', + file: './dist/index.cjs', format: 'cjs', freeze: false, exports: 'named', diff --git a/src/core/fromTag.ts b/src/core/fromTag.ts new file mode 100644 index 0000000..ccfffa8 --- /dev/null +++ b/src/core/fromTag.ts @@ -0,0 +1,8 @@ +import type { ReactNode } from 'react'; +import { createElement } from 'react'; + +export function fromTag(htmlTag: HtmlTag) { + return (props: Record): ReactNode => { + return createElement(htmlTag, props); + }; +} diff --git a/src/core/index.ts b/src/core/index.ts index ec7f020..2f84036 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -1,3 +1,4 @@ export { reflectFactory, reflectCreateFactory } from './reflect'; export { variantFactory } from './variant'; export { listFactory } from './list'; +export { fromTag } from './fromTag'; diff --git a/src/core/list.ts b/src/core/list.ts index d942af0..e01837e 100644 --- a/src/core/list.ts +++ b/src/core/list.ts @@ -1,47 +1,9 @@ -import { Store } from 'effector'; +import { scopeBind, Store } from 'effector'; +import { useProvidedScope } from 'effector-react'; import React from 'react'; import { reflectFactory } from './reflect'; -import { BindableProps, Context, Hooks, PartialBoundProps, View } from './types'; - -type ReflectListConfig = Item extends Props - ? { - view: View; - source: Store; - bind?: Bind; - hooks?: Hooks; - getKey?: (item: Item) => React.Key; - mapItem?: { - [P in keyof PartialBoundProps]: ( - item: Item, - index: number, - ) => PartialBoundProps[P]; - }; - } - : - | { - view: View; - source: Store; - bind?: undefined; - hooks?: Hooks; - getKey?: (item: Item) => React.Key; - mapItem: { - [P in keyof Props]: (item: Item, index: number) => Props[P]; - }; - } - | { - view: View; - source: Store; - bind: Bind; - hooks?: Hooks; - getKey?: (item: Item) => React.Key; - mapItem?: { - [P in keyof PartialBoundProps]: ( - item: Item, - index: number, - ) => PartialBoundProps[P]; - }; - }; +import { BindProps, Context, Hooks, UseUnitConifg, View } from './types'; export function listFactory(context: Context) { const reflect = reflectFactory(context); @@ -49,17 +11,29 @@ export function listFactory(context: Context) { return function list< Item extends Record, Props, - Bind extends BindableProps = BindableProps, - >(config: ReflectListConfig): React.FC { + Bind extends BindProps, + >(config: { + source: Store; + view: View; + bind?: Bind; + mapItem?: { + [K in keyof Props]: (item: Item, index: number) => Props[K]; + }; + getKey?: (item: Item) => React.Key; + hooks?: Hooks; + useUnitConfig?: UseUnitConifg; + }): React.FC { const ItemView = reflect({ view: config.view, bind: config.bind ? config.bind : ({} as Bind), hooks: config.hooks, + useUnitConfig: config.useUnitConfig, }); const listConfig = { getKey: config.getKey, fn: (value: Item, index: number) => { + const scope = useProvidedScope(); const finalProps = React.useMemo(() => { const props: any = {}; @@ -70,7 +44,14 @@ export function listFactory(context: Context) { config.mapItem![prop]; const propValue = fn(value, index); - props[prop] = propValue; + if (typeof propValue === 'function') { + props[prop] = scopeBind(propValue, { + safe: true, + scope: scope || undefined, + }); + } else { + props[prop] = propValue; + } }); } else { forIn(value, (prop) => { diff --git a/src/core/reflect.ts b/src/core/reflect.ts index 3539f51..041c928 100644 --- a/src/core/reflect.ts +++ b/src/core/reflect.ts @@ -1,55 +1,57 @@ -import { Effect, Event, is, Store } from 'effector'; +import { Effect, Event, EventCallable, is, scopeBind, Store } from 'effector'; +import { useProvidedScope } from 'effector-react'; import React from 'react'; -import { - BindableProps, - Context, - Hook, - Hooks, - PartialBoundProps, - View, -} from './types'; +import { BindProps, Context, Hook, Hooks, UseUnitConifg, View } from './types'; -export interface ReflectConfig> { +export interface ReflectConfig> { view: View; bind: Bind; hooks?: Hooks; + useUnitConfig?: UseUnitConifg; } export function reflectCreateFactory(context: Context) { const reflect = reflectFactory(context); return function createReflect(view: View) { - return = BindableProps>( + return = BindProps>( bind: Bind, - params?: Pick, 'hooks'>, + params?: Pick, 'hooks' | 'useUnitConfig'>, ) => reflect({ view, bind, ...params }); }; } export function reflectFactory(context: Context) { - return function reflect< - Props, - Bind extends BindableProps = BindableProps, - >( + return function reflect = BindProps>( config: ReflectConfig, - ): React.ExoticComponent> { - const { stores, events, data } = sortProps(config); + ): React.ExoticComponent<{}> { + const { stores, events, data, functions } = sortProps(config); return React.forwardRef((props, ref) => { - const storeProps = context.useUnit(stores); - const eventsProps = context.useUnit(events); + const storeProps = context.useUnit(stores, config.useUnitConfig); + const eventsProps = context.useUnit(events as any, config.useUnitConfig); + const functionProps = useBindedFunctions(functions); const elementProps: Props = Object.assign( { ref }, storeProps, eventsProps, data, + functionProps, props, ); - const mounted = wrapToHook(config.hooks?.mounted, context); - const unmounted = wrapToHook(config.hooks?.unmounted, context); + const mounted = wrapToHook( + config.hooks?.mounted, + context, + config.useUnitConfig, + ); + const unmounted = wrapToHook( + config.hooks?.unmounted, + context, + config.useUnitConfig, + ); React.useEffect(() => { if (mounted) mounted(); @@ -64,7 +66,7 @@ export function reflectFactory(context: Context) { }; } -function sortProps = BindableProps>( +function sortProps = BindProps>( config: ReflectConfig, ) { type GenericEvent = Event | Effect; @@ -72,6 +74,7 @@ function sortProps = BindableProps = {}; const stores: Record> = {}; const data: Record = {}; + const functions: Record = {}; for (const key in config.bind) { const value = config.bind[key]; @@ -80,17 +83,35 @@ function sortProps = BindableProps) { + const scope = useProvidedScope(); + + return React.useMemo(() => { + const bindedFunctions: Record = {}; + + for (const key in functions) { + const fn = functions[key]; + + bindedFunctions[key] = scopeBind(fn, { scope: scope || undefined, safe: true }); + } + + return bindedFunctions; + }, [scope, functions]); } -function wrapToHook(hook: Hook | void, context: Context) { +function wrapToHook(hook: Hook | void, context: Context, config?: UseUnitConifg) { if (hookDefined(hook)) { - return context.useUnit(hook as Event); + return context.useUnit(hook as EventCallable, config); } return hook; diff --git a/src/core/types.ts b/src/core/types.ts index 108f0e3..b5c78ad 100644 --- a/src/core/types.ts +++ b/src/core/types.ts @@ -1,38 +1,30 @@ -import { Effect, Event, Store } from 'effector'; +import { Effect, EventCallable, Store } from 'effector'; import { useList, useUnit } from 'effector-react'; -import { ComponentClass, FC } from 'react'; +import { ComponentType } from 'react'; + +/** + * This is the internal typings - for the library internals, where we do not really care about real-world user data. + * + * Public types are stored separately from the source code, so it is easier to develop and test them. + * You can find public types in `public-types` folder and tests for type inference at the `type-tests` folder. + */ export interface Context { useUnit: typeof useUnit; useList: typeof useList; } -type UnbindableProps = 'key' | 'ref'; - -type Storify = Omit, 'updates' | 'reset' | 'on' | 'off' | 'thru'>; +export type View = ComponentType; -export type BindableProps = { - [Key in Exclude]?: Props[Key] extends ( - payload: any, - ) => void - ? Storify | Props[Key] | Event - : Storify | Props[Key]; +export type BindProps = { + [K in keyof Props]: Props[K] | Store | EventCallable; }; -export type View = FC | ComponentClass; - -type UnboundProps = Omit; -type BoundProps = Omit>; - -export type PartialBoundProps = UnboundProps & - Partial>; - -export type Hook = (() => any) | Event | Effect; +export type Hook = (() => any) | EventCallable | Effect; export interface Hooks { mounted?: Hook; unmounted?: Hook; } -export type AtLeastOne }> = Partial & - U[keyof U]; +export type UseUnitConifg = Parameters[1]; diff --git a/src/core/variant.ts b/src/core/variant.ts index e799967..f3c62d5 100644 --- a/src/core/variant.ts +++ b/src/core/variant.ts @@ -2,14 +2,7 @@ import { Store } from 'effector'; import React from 'react'; import { reflectFactory } from './reflect'; -import { - AtLeastOne, - BindableProps, - Context, - Hooks, - PartialBoundProps, - View, -} from './types'; +import { BindProps, Context, Hooks, UseUnitConifg, View } from './types'; const Default = () => null; @@ -19,15 +12,16 @@ export function variantFactory(context: Context) { return function variant< Props, Variant extends string, - Bind extends BindableProps, + Bind extends BindProps, >( config: | { source: Store; bind?: Bind; - cases: AtLeastOne>>; + cases: Record>; hooks?: Hooks; default?: View; + useUnitConfig?: UseUnitConifg; } | { if: Store; @@ -35,10 +29,11 @@ export function variantFactory(context: Context) { else?: View; hooks?: Hooks; bind?: Bind; + useUnitConfig?: UseUnitConifg; }, - ): React.FC> { + ): (p: Props) => React.ReactNode { let $case: Store; - let cases: AtLeastOne>>; + let cases: Record>; let def: View; // Shortcut for Store @@ -48,7 +43,7 @@ export function variantFactory(context: Context) { cases = { then: config.then, else: config.else, - } as unknown as AtLeastOne>>; + } as unknown as Record>; def = Default; } // Full form for Store @@ -59,7 +54,7 @@ export function variantFactory(context: Context) { } function View(props: Props) { - const nameOfCase = context.useUnit($case); + const nameOfCase = context.useUnit($case, config.useUnitConfig); const Component = cases[nameOfCase] ?? def; return React.createElement(Component as any, props as any); @@ -71,6 +66,7 @@ export function variantFactory(context: Context) { bind, view: View, hooks: config.hooks, - }); + useUnitConfig: config.useUnitConfig, + }) as unknown as (p: Props) => React.ReactNode; }; } diff --git a/src/index.ts b/src/index.ts index 7c0ed19..49233e8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,7 @@ import * as context from 'effector-react'; import { + fromTag, listFactory, reflectCreateFactory, reflectFactory, @@ -13,3 +14,5 @@ export const createReflect = reflectCreateFactory(context); export const variant = variantFactory(context); export const list = listFactory(context); + +export { fromTag }; diff --git a/src/no-ssr/create-reflect.test.tsx b/src/no-ssr/create-reflect.test.tsx index adff300..77c9087 100644 --- a/src/no-ssr/create-reflect.test.tsx +++ b/src/no-ssr/create-reflect.test.tsx @@ -1,11 +1,10 @@ +import { createReflect } from '@effector/reflect'; import { render } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { createEffect, createEvent, createStore, restore } from 'effector'; import React, { FC, InputHTMLAttributes } from 'react'; import { act } from 'react-dom/test-utils'; -import { createReflect } from '../index'; - // Example1 (InputCustom) const InputCustom: FC<{ value: string | number | string[]; @@ -112,7 +111,7 @@ describe('hooks', () => { const changeName = createEvent(); const $name = restore(changeName, ''); - const mounted = jest.fn(() => {}); + const mounted = vi.fn(() => {}); const Name = inputBase( { @@ -132,7 +131,7 @@ describe('hooks', () => { const $name = restore(changeName, ''); const mounted = createEvent(); - const fn = jest.fn(() => {}); + const fn = vi.fn(() => {}); mounted.watch(fn); @@ -173,7 +172,7 @@ describe('hooks', () => { const changeName = createEvent(); const $name = restore(changeName, ''); - const unmounted = jest.fn(() => {}); + const unmounted = vi.fn(() => {}); const Name = inputBase( { @@ -197,7 +196,7 @@ describe('hooks', () => { const $name = restore(changeName, ''); const unmounted = createEvent(); - const fn = jest.fn(() => {}); + const fn = vi.fn(() => {}); unmounted.watch(fn); @@ -219,3 +218,14 @@ describe('hooks', () => { }); }); }); + +describe('useUnitConfig', () => { + test('useUnit config should be passed to underlying useUnit', () => { + expect(() => { + const Name = inputBase({}, { useUnitConfig: { forceScope: true } }); + render(); + }).toThrowErrorMatchingInlineSnapshot( + `[Error: No scope found, consider adding to app root]`, + ); + }); +}); diff --git a/src/no-ssr/list.test.tsx b/src/no-ssr/list.test.tsx index 3c4f61d..e6170ac 100644 --- a/src/no-ssr/list.test.tsx +++ b/src/no-ssr/list.test.tsx @@ -1,11 +1,10 @@ +import { list } from '@effector/reflect'; import { render } from '@testing-library/react'; -import { createEvent, createStore } from 'effector'; -import { useStore } from 'effector-react'; +import { allSettled, createEffect, createEvent, createStore, fork } from 'effector'; +import { Provider, useStore } from 'effector-react'; import React, { FC, memo } from 'react'; import { act } from 'react-dom/test-utils'; -import { list } from '../index'; - const List: FC = (props) => { return
    {props.children}
; }; @@ -56,13 +55,13 @@ test('relfect-list: reflect hooks called once for every item', async () => { const mounted = createEvent(); - const fn = jest.fn(() => {}); + const fn = vi.fn(() => {}); mounted.watch(fn); const unmounted = createEvent(); - const unfn = jest.fn(() => {}); + const unfn = vi.fn(() => {}); mounted.watch(unfn); @@ -359,8 +358,8 @@ const Member: FC = (props) => { }; test('reflect-list: getKey option', async () => { - const fn = jest.fn(); - const fn2 = jest.fn(); + const fn = vi.fn(); + const fn2 = vi.fn(); const renameUser = createEvent<{ id: number; name: string }>(); const removeUser = createEvent(); const sortById = createEvent(); @@ -495,3 +494,74 @@ test('reflect-list: getKey option', async () => { fn2.mock.calls.map(([arg]) => arg), ); }); + +test('scoped callback support in mapItem', async () => { + const sleepFx = createEffect( + async (ms: number) => new Promise((rs) => setTimeout(rs, ms)), + ); + let sendRender = (v: string) => {}; + const Input = (props: { + value: string; + onChange: (_event: string) => Promise; + }) => { + const [render, setRender] = React.useState(null); + React.useLayoutEffect(() => { + if (render) { + props.onChange(render); + } + }, [render]); + sendRender = setRender; + return ; + }; + + const $names = createStore(['name']); + const $name = createStore(''); + const changeName = createEvent(); + $name.on(changeName, (_, next) => next); + + const Names = list({ + source: $names, + view: Input, + bind: { + value: $name, + }, + mapItem: { + onChange: (_name) => async (event: string) => { + await sleepFx(100); + changeName(event); + }, + }, + }); + + const scope = fork(); + render( + + + , + ); + + await act(async () => { + sendRender('Bob'); + }); + await allSettled(scope); + + expect(scope.getState($name)).toBe('Bob'); + expect($name.getState()).toBe(''); +}); + +describe('useUnitConfig', () => { + test('useUnit config should be passed to underlying useUnit', () => { + expect(() => { + const Test = list({ + view: () => null, + source: createStore([42]), + useUnitConfig: { + forceScope: true, + }, + }); + render(); + }).toThrowErrorMatchingInlineSnapshot( + `[Error: No scope found, consider adding to app root]`, + ); + }); +}); diff --git a/src/no-ssr/reflect.test.tsx b/src/no-ssr/reflect.test.tsx index df39d22..917580d 100644 --- a/src/no-ssr/reflect.test.tsx +++ b/src/no-ssr/reflect.test.tsx @@ -1,11 +1,18 @@ +import { fromTag, reflect } from '@effector/reflect'; import { render } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; -import { createEffect, createEvent, createStore, restore } from 'effector'; +import { + allSettled, + createEffect, + createEvent, + createStore, + fork, + restore, +} from 'effector'; +import { Provider } from 'effector-react'; import React, { ChangeEvent, FC, InputHTMLAttributes } from 'react'; import { act } from 'react-dom/test-utils'; -import { reflect } from '../index'; - // Example1 (InputCustom) const InputCustom: FC<{ value: string | number | string[]; @@ -159,13 +166,142 @@ test('forwardRef', async () => { expect(container.getByTestId('name')).toBe(ref.current); }); +describe('plain callbacks with scopeBind under the hood', () => { + test('sync callback in bind', async () => { + let sendRender = (v: string) => {}; + const Input = (props: { value: string; onChange: (_event: string) => void }) => { + const [render, setRender] = React.useState(null); + React.useLayoutEffect(() => { + if (render) { + props.onChange(render); + } + }, [render]); + sendRender = setRender; + return ; + }; + + const $name = createStore(''); + const changeName = createEvent(); + $name.on(changeName, (_, next) => next); + + const Name = reflect({ + view: Input, + bind: { + value: $name, + onChange: (v) => changeName(v), + }, + }); + + render(); + + await act(() => { + sendRender('Bob'); + }); + + expect($name.getState()).toBe('Bob'); + }); + + test('sync callback in bind (scope)', async () => { + let sendRender = (v: string) => {}; + const Input = (props: { value: string; onChange: (_event: string) => void }) => { + const [render, setRender] = React.useState(null); + React.useLayoutEffect(() => { + if (render) { + props.onChange(render); + } + }, [render]); + sendRender = setRender; + return ; + }; + + const $name = createStore(''); + const changeName = createEvent(); + $name.on(changeName, (_, next) => next); + + const Name = reflect({ + view: Input, + bind: { + value: $name, + onChange: (v) => changeName(v), + }, + }); + + const scope = fork(); + + render( + + + , + ); + + await act(() => { + sendRender('Bob'); + }); + + expect(scope.getState($name)).toBe('Bob'); + expect($name.getState()).toBe(''); + }); + + test('async callback in bind (scope)', async () => { + const sleepFx = createEffect( + async (ms: number) => new Promise((rs) => setTimeout(rs, ms)), + ); + let sendRender = (v: string) => {}; + const Input = (props: { + value: string; + onChange: (_event: string) => Promise; + }) => { + const [render, setRender] = React.useState(null); + React.useLayoutEffect(() => { + if (render) { + props.onChange(render); + } + }, [render]); + sendRender = setRender; + return ; + }; + + const $name = createStore(''); + const changeName = createEvent(); + $name.on(changeName, (_, next) => next); + + const Name = reflect({ + view: Input, + bind: { + value: $name, + onChange: async (v) => { + await sleepFx(1); + changeName(v); + }, + }, + }); + + const scope = fork(); + + render( + + + , + ); + + await act(() => { + sendRender('Bob'); + }); + + await allSettled(scope); + + expect(scope.getState($name)).toBe('Bob'); + expect($name.getState()).toBe(''); + }); +}); + describe('hooks', () => { describe('mounted', () => { test('callback', () => { const changeName = createEvent(); const $name = restore(changeName, ''); - const mounted = jest.fn(() => {}); + const mounted = vi.fn(() => {}); const Name = reflect({ view: InputBase, @@ -186,7 +322,7 @@ describe('hooks', () => { const $name = restore(changeName, ''); const mounted = createEvent(); - const fn = jest.fn(() => {}); + const fn = vi.fn(() => {}); mounted.watch(fn); @@ -227,7 +363,7 @@ describe('hooks', () => { const changeName = createEvent(); const $name = restore(changeName, ''); - const unmounted = jest.fn(() => {}); + const unmounted = vi.fn(() => {}); const Name = reflect({ view: InputBase, @@ -252,7 +388,7 @@ describe('hooks', () => { const $name = restore(changeName, ''); const unmounted = createEvent(); - const fn = jest.fn(() => {}); + const fn = vi.fn(() => {}); unmounted.watch(fn); @@ -275,3 +411,66 @@ describe('hooks', () => { }); }); }); + +describe('fromTag helper', () => { + test('Basic usage work', async () => { + const changed = createEvent(); + const $fromHandler = createStore(null).on(changed, (_, next) => next); + const $type = createStore('hidden'); + + const DomInput = fromTag('input'); + + const Input = reflect({ + view: DomInput, + bind: { + type: $type, + onChange: changed.prepend((event) => event), + 'data-testid': 'test-input', + }, + }); + + const scopeText = fork({ + values: [[$type, 'text']], + }); + const scopeEmail = fork({ + values: [[$type, 'email']], + }); + + const body = render( + + + , + ); + + expect((body.container.firstChild as any).type).toBe('text'); + + await userEvent.type(body.getByTestId('test-input'), 'bob'); + + expect(scopeText.getState($fromHandler).target.value).toBe('bob'); + + const body2 = render( + + + , + ); + + expect((body2.container.firstChild as any).type).toBe('email'); + }); +}); + +describe('useUnitConfig', () => { + test('useUnit config should be passed to underlying useUnit', () => { + expect(() => { + const Test = reflect({ + view: () => null, + bind: {}, + useUnitConfig: { + forceScope: true, + }, + }); + render(); + }).toThrowErrorMatchingInlineSnapshot( + `[Error: No scope found, consider adding to app root]`, + ); + }); +}); diff --git a/src/no-ssr/variant.test.tsx b/src/no-ssr/variant.test.tsx index 11dc212..ecce031 100644 --- a/src/no-ssr/variant.test.tsx +++ b/src/no-ssr/variant.test.tsx @@ -1,10 +1,9 @@ +import { variant } from '@effector/reflect'; import { act, render } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { createEvent, createStore, restore } from 'effector'; import React from 'react'; -import { variant } from '../index'; - test('matches first', async () => { const changeValue = createEvent(); const changeType = createEvent<'first' | 'second' | 'third'>(); @@ -79,7 +78,7 @@ test('hooks works once on mount', async () => { const changeType = createEvent<'first' | 'second' | 'third'>(); const $type = restore(changeType, 'first'); const mounted = createEvent(); - const fn = jest.fn(); + const fn = vi.fn(); mounted.watch(fn); const Input = variant({ @@ -108,7 +107,7 @@ test('hooks works once on unmount', async () => { const changeType = createEvent<'first' | 'second' | 'third'>(); const $type = restore(changeType, 'first'); const unmounted = createEvent(); - const fn = jest.fn(); + const fn = vi.fn(); unmounted.watch(fn); const setVisible = createEvent(); const $visible = restore(setVisible, true); @@ -147,10 +146,10 @@ test('hooks works on remount', async () => { const $type = restore(changeType, 'first'); const unmounted = createEvent(); - const onUnmount = jest.fn(); + const onUnmount = vi.fn(); unmounted.watch(onUnmount); const mounted = createEvent(); - const onMount = jest.fn(); + const onMount = vi.fn(); mounted.watch(onMount); const setVisible = createEvent(); @@ -287,3 +286,40 @@ describe('overload for Store', () => { expect(() => container.getByTestId('then')).toThrowError(); }); }); + +describe('useUnitConfig', () => { + test('useUnit config should be passed to underlying useUnit', () => { + expect(() => { + const Test = variant({ + source: createStore<'a' | 'b'>('a'), + cases: { + a: () => null, + b: () => null, + }, + bind: {}, + useUnitConfig: { + forceScope: true, + }, + }); + render(); + }).toThrowErrorMatchingInlineSnapshot( + `[Error: No scope found, consider adding to app root]`, + ); + }); + test('useUnit config should be passed to underlying useUnit (bool overload)', () => { + expect(() => { + const Test = variant({ + if: createStore(true), + then: () => null, + else: () => null, + bind: {}, + useUnitConfig: { + forceScope: true, + }, + }); + render(); + }).toThrowErrorMatchingInlineSnapshot( + `[Error: No scope found, consider adding to app root]`, + ); + }); +}); diff --git a/src/scope.ts b/src/scope.ts index 2a02474..3da450c 100644 --- a/src/scope.ts +++ b/src/scope.ts @@ -7,6 +7,10 @@ import { variantFactory, } from './core'; +console.error( + '`@effector/reflect/scope` is deprecated, use main `@effector/reflect` package instead', +); + export const reflect = reflectFactory(effectorReactSSR); export const createReflect = reflectCreateFactory(effectorReactSSR); diff --git a/src/ssr.ts b/src/ssr.ts deleted file mode 100644 index 871cdef..0000000 --- a/src/ssr.ts +++ /dev/null @@ -1,4 +0,0 @@ -console.error( - '`@effector/reflect/ssr` is deprecated, import from `@effector/reflect/scope` instead', -); -export * from './scope'; diff --git a/src/ssr/create-reflect.test.tsx b/src/ssr/create-reflect.test.tsx index ebf2f95..b76f7be 100644 --- a/src/ssr/create-reflect.test.tsx +++ b/src/ssr/create-reflect.test.tsx @@ -1,11 +1,10 @@ +import { createReflect } from '@effector/reflect/scope'; import { act, render } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { allSettled, createDomain, fork, restore } from 'effector'; -import { Provider } from 'effector-react/ssr'; +import { Provider } from 'effector-react/scope'; import React, { ChangeEvent, FC, InputHTMLAttributes } from 'react'; -import { createReflect } from '../scope'; - // Example1 (InputCustom) const InputCustom: FC<{ value: string | number | string[]; diff --git a/src/ssr/list.test.tsx b/src/ssr/list.test.tsx index 075e3db..f06d6c8 100644 --- a/src/ssr/list.test.tsx +++ b/src/ssr/list.test.tsx @@ -1,10 +1,9 @@ +import { list } from '@effector/reflect/scope'; import { act, render } from '@testing-library/react'; import { allSettled, createDomain, fork } from 'effector'; import { Provider, useStore } from 'effector-react/scope'; import React, { FC, memo } from 'react'; -import { list } from '../scope'; - const List: FC = (props) => { return
    {props.children}
; }; @@ -61,13 +60,13 @@ test('relfect-list: reflect hooks called once for every item', async () => { const mounted = app.createEvent(); - const fn = jest.fn(() => {}); + const fn = vi.fn(() => {}); mounted.watch(fn); const unmounted = app.createEvent(); - const unfn = jest.fn(() => {}); + const unfn = vi.fn(() => {}); unmounted.watch(unfn); @@ -226,8 +225,8 @@ const Member: FC = (props) => { }; test('reflect-list: getKey option', async () => { - const fn = jest.fn(); - const fn2 = jest.fn(); + const fn = vi.fn(); + const fn2 = vi.fn(); const app = createDomain(); const renameUser = app.createEvent<{ id: number; name: string }>(); diff --git a/src/ssr/reflect.test.tsx b/src/ssr/reflect.test.tsx index 071c4ec..703c058 100644 --- a/src/ssr/reflect.test.tsx +++ b/src/ssr/reflect.test.tsx @@ -1,11 +1,10 @@ +import { reflect } from '@effector/reflect/scope'; import { render } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { allSettled, createDomain, fork, restore } from 'effector'; -import { Provider } from 'effector-react/ssr'; +import { Provider } from 'effector-react/scope'; import React, { ChangeEvent, FC, InputHTMLAttributes } from 'react'; -import { reflect } from '../ssr'; - // Example1 (InputCustom) const InputCustom: FC<{ value: string | number | string[]; diff --git a/src/ssr/variant.test.tsx b/src/ssr/variant.test.tsx index f0d7254..48964dc 100644 --- a/src/ssr/variant.test.tsx +++ b/src/ssr/variant.test.tsx @@ -1,11 +1,10 @@ +import { variant } from '@effector/reflect/scope'; import { act, render } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { allSettled, createDomain, fork, restore } from 'effector'; -import { Provider } from 'effector-react/ssr'; +import { Provider } from 'effector-react/scope'; import React from 'react'; -import { variant } from '../ssr'; - test('matches first', async () => { const app = createDomain(); const changeValue = app.createEvent(); @@ -56,7 +55,7 @@ test('hooks works once on mount', async () => { const changeType = app.createEvent<'first' | 'second' | 'third'>(); const $type = restore(changeType, 'first'); const mounted = app.createEvent(); - const fn = jest.fn(); + const fn = vi.fn(); mounted.watch(fn); const Input = variant({ @@ -92,7 +91,7 @@ test('hooks works once on unmount', async () => { const changeType = app.createEvent<'first' | 'second' | 'third'>(); const $type = restore(changeType, 'first'); const unmounted = app.createEvent(); - const fn = jest.fn(); + const fn = vi.fn(); unmounted.watch(fn); const setVisible = app.createEvent(); const $visible = restore(setVisible, true); @@ -138,10 +137,10 @@ test('hooks works on remount', async () => { const $type = restore(changeType, 'first'); const unmounted = app.createEvent(); - const onUnmount = jest.fn(); + const onUnmount = vi.fn(); unmounted.watch(onUnmount); const mounted = app.createEvent(); - const onMount = jest.fn(); + const onMount = vi.fn(); mounted.watch(onMount); const setVisible = app.createEvent(); diff --git a/tsconfig.json b/tsconfig.json index 8a1aa48..dee8d67 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,3 +1,10 @@ { - "extends": "./.config/tsconfig.base.json" + "extends": "./.config/tsconfig.base.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@effector/reflect": ["./public-types/reflect.d.ts"], + "@effector/reflect/scope": ["./public-types/reflect.d.ts"] + } + } } diff --git a/type-tests/tsconfig.json b/type-tests/tsconfig.json index d4b6e44..64bf00d 100644 --- a/type-tests/tsconfig.json +++ b/type-tests/tsconfig.json @@ -12,8 +12,12 @@ "noImplicitThis": true, "noUnusedLocals": false, "strict": true, + "skipLibCheck": true, "jsx": "react", "strictNullChecks": true, - "suppressImplicitAnyIndexErrors": true + "paths": { + "@effector/reflect": ["../public-types/reflect.d.ts"], + "@effector/reflect/scope": ["../public-types/reflect.d.ts"] + } } } diff --git a/type-tests/types-create-reflect.tsx b/type-tests/types-create-reflect.tsx new file mode 100644 index 0000000..53941b9 --- /dev/null +++ b/type-tests/types-create-reflect.tsx @@ -0,0 +1,26 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +import { createReflect } from '@effector/reflect'; +import { createEvent, createStore } from 'effector'; +import React from 'react'; +import { expectType } from 'tsd'; + +// basic createReflect +{ + const Input: React.FC<{ + value: string; + onChange: (newValue: string) => void; + color: 'red'; + }> = () => null; + const $value = createStore(''); + const changed = createEvent(); + + const reflectInput = createReflect(Input); + + const ReflectedInput = reflectInput({ + value: $value, + onChange: changed, + color: 'red', + }); + + expectType(ReflectedInput); +} diff --git a/type-tests/types-from-tag.ts b/type-tests/types-from-tag.ts new file mode 100644 index 0000000..ee09c5f --- /dev/null +++ b/type-tests/types-from-tag.ts @@ -0,0 +1,91 @@ +import { fromTag, reflect } from '@effector/reflect'; +import { createEvent, createStore } from 'effector'; +import React from 'react'; +import { expectType } from 'tsd'; + +// fromTag creates a valid component +{ + const Input = fromTag('input'); + + expectType< + ( + props: React.PropsWithChildren< + React.ClassAttributes & + React.InputHTMLAttributes + >, + ) => React.ReactNode + >(Input); +} + +// fromTag compoment is allowed in reflect +{ + const Input = fromTag('input'); + + const $value = createStore(''); + + const View = reflect({ + view: Input, + bind: { + value: $value, + onChange: (e) => { + const strValue = e.target.value; + + strValue.trim(); + }, + }, + }); +} + +// inline fromTag is supported +{ + const $value = createStore(''); + + const handleChange = createEvent(); + + const View = reflect({ + view: fromTag('input'), + bind: { + type: 'text', + value: $value, + /** + * Type inference for inline fromTag is slightly worse, than for non-inline version :( + * + * I don't known why, but in this case `onChange` argument type must be type explicitly, + * type inference doesn't work here + * + * TypeScript won't allow invalid value, + * but also won't infer correct type for us here, like it does with non-inline usage :shrug: + */ + onChange: (e: React.ChangeEvent) => { + handleChange(e.target.value); + }, + }, + }); +} + +// invalid props are not supported +{ + const Input = fromTag('input'); + + const $value = createStore({}); + + const View = reflect({ + view: Input, + bind: { + // @ts-expect-error + value: $value, + // @ts-expect-error + onChange: (e: string) => {}, + }, + }); + + const View2 = reflect({ + view: fromTag('input'), + bind: { + // @ts-expect-error + value: $value, + // @ts-expect-error + onChange: 'kek', + }, + }); +} diff --git a/type-tests/types-list.tsx b/type-tests/types-list.tsx index e89c753..8bfc681 100644 --- a/type-tests/types-list.tsx +++ b/type-tests/types-list.tsx @@ -1,10 +1,9 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ +import { list } from '@effector/reflect'; import { createEvent, createStore } from 'effector'; import React from 'react'; import { expectType } from 'tsd'; -import { list } from '../src'; - // basic usage of list { const Item: React.FC<{ @@ -123,6 +122,31 @@ import { list } from '../src'; expectType(List); } +// list does not allow to set prop in mapItem, if it is already set in bind +{ + const Item: React.FC<{ + id: number; + value: string; + common: string; + }> = () => null; + const $common = createStore('common prop'); + const $items = createStore<{ id: number; value: string }[]>([]); + + const List = list({ + source: $items, + bind: { + common: $common, + }, + mapItem: { + // @ts-expect-error + common: () => 'common prop', + }, + view: Item, + }); + + expectType(List); +} + // list allows not to set both `bind` and `mapItem` if source type matches with props { const Item: React.FC<{ diff --git a/type-tests/types-reflect.tsx b/type-tests/types-reflect.tsx index ac7af3a..7a6b15f 100644 --- a/type-tests/types-reflect.tsx +++ b/type-tests/types-reflect.tsx @@ -1,10 +1,9 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ +import { reflect } from '@effector/reflect'; import { createEvent, createStore } from 'effector'; -import React from 'react'; +import React, { ComponentType, PropsWithChildren, ReactNode } from 'react'; import { expectType } from 'tsd'; -import { reflect } from '../src'; - // basic reflect { const Input: React.FC<{ @@ -105,7 +104,7 @@ import { reflect } from '../src'; expectType(AppFixed); } -// reflect should allow to pass Event as click event handler +// reflect should allow to pass EventCallable as click event handler { const Button: React.FC<{ onClick: React.EventHandler>; @@ -160,3 +159,86 @@ import { reflect } from '../src'; expectType(App); } + +// reflect should allow to pass any callback +{ + const Input: React.FC<{ + value: string; + onChange: (newValue: string) => void; + }> = () => null; + const changed = createEvent(); + + const ReflectedInput = reflect({ + view: Input, + bind: { + value: 'plain string', + onChange: (e) => { + expectType(e); + changed(e); + }, + }, + }); + + expectType(ReflectedInput); +} + +// should support useUnit configuration +{ + const Input: React.FC<{ + value: string; + onChange: (newValue: string) => void; + }> = () => null; + const changed = createEvent(); + + const ReflectedInput = reflect({ + view: Input, + bind: { + value: 'plain string', + onChange: (e) => { + expectType(e); + changed(e); + }, + }, + useUnitConfig: { + forceScope: true, + }, + }); +} + +// should not support invalud useUnit configuration +{ + const Input: React.FC<{ + value: string; + onChange: (newValue: string) => void; + }> = () => null; + const changed = createEvent(); + + const ReflectedInput = reflect({ + view: Input, + bind: { + value: 'plain string', + onChange: (e) => { + expectType(e); + changed(e); + }, + }, + useUnitConfig: { + // @ts-expect-error + forseScope: true, + }, + }); +} + +// reflect fits ComponentType +{ + const Input = (props: PropsWithChildren<{ value: string }>) => null; + + const ReflectedInput = reflect({ + view: Input, + bind: { + value: 'plain string', + }, + }); + + const Test: ComponentType<{ value: string; children: ReactNode }> = Input; +} diff --git a/type-tests/types-variant.tsx b/type-tests/types-variant.tsx index f54f402..f0cf828 100644 --- a/type-tests/types-variant.tsx +++ b/type-tests/types-variant.tsx @@ -1,10 +1,9 @@ /* eslint-disable @typescript-eslint/ban-ts-comment */ +import { reflect, variant } from '@effector/reflect'; import { createEvent, createStore } from 'effector'; -import React from 'react'; +import React, { PropsWithChildren } from 'react'; import { expectType } from 'tsd'; -import { variant } from '../src'; - // basic variant usage { const Input: React.FC<{ @@ -52,7 +51,6 @@ import { variant } from '../src'; source: $type, bind: { value: $value, - // @ts-expect-error onChange: changed, }, cases: { @@ -65,29 +63,7 @@ import { variant } from '../src'; expectType(VariableInput); } -// variant warns, if no cases provided -{ - type PageProps = { - context: { - route: string; - }; - }; - const NotFoundPage: React.FC = () => null; - const $page = createStore<'home' | 'faq' | 'profile' | 'products'>('home'); - const $pageContext = $page.map((route) => ({ route })); - - const CurrentPage = variant({ - source: $page, - bind: { context: $pageContext }, - // @ts-expect-error - cases: {}, - default: NotFoundPage, - }); - - expectType(CurrentPage); -} - -// variant allows to set every possble case +// variant allows not to set every possble case // for e.g. if we want to cover only specific ones and render default for the rest { type PageProps = { @@ -172,3 +148,43 @@ import { variant } from '../src'; }); expectType(CurrentPageOnlyThen); } + +// supports nesting +{ + const Test = (props: { test: string }) => <>; + + const $test = createStore('test'); + const $bool = createStore(true); + + const NestedVariant = variant({ + source: $test, + cases: { + test: variant({ + if: $bool, + then: reflect({ + view: Test, + bind: {}, + }), + }), + }, + }); +} + +// allows variants of compatible types +{ + const Test = (props: PropsWithChildren<{ test: string }>) =>
content
; + const Loader = () => <>loader; + + const $test = createStore(false); + + const View = variant({ + if: $test, + then: reflect({ + view: Test, + bind: { + test: $test.map(() => 'test'), + }, + }), + else: Loader, + }); +} diff --git a/validate_dist.mjs b/validate_dist.mjs new file mode 100644 index 0000000..f7d3144 --- /dev/null +++ b/validate_dist.mjs @@ -0,0 +1,16 @@ +/* eslint-disable no-undef */ +import { dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +import 'zx/globals'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +const pkgDir = resolve(__dirname, './dist'); +try { + const attwResult = await $`pnpm attw --pack ${pkgDir}`; +} catch (error) {} +console.log(); +try { + const publintResult = await $`pnpm publint ${pkgDir}`; +} catch (error) {} diff --git a/vitest.config.mts b/vitest.config.mts new file mode 100644 index 0000000..54b6098 --- /dev/null +++ b/vitest.config.mts @@ -0,0 +1,28 @@ +import { dirname, resolve } from 'path'; +import { fileURLToPath } from 'url'; +import { defineConfig } from 'vitest/config'; +import { $ } from 'zx'; + +if (!process.env.CI) { + /** + * Vitest tests are always run against the built package. + */ + console.log('Building the package...'); + await $`pnpm build`; + $.log = () => {}; +} + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +export default defineConfig({ + test: { + globals: true, + environment: 'jsdom', + }, + resolve: { + alias: { + '@effector/reflect/scope': resolve(__dirname, './dist/scope.mjs'), + '@effector/reflect': resolve(__dirname, './dist/index.mjs'), + }, + }, +});