diff --git a/apps/decap/src/helpers/frame.tsx b/apps/decap/src/helpers/frame.tsx index 49d75d532..53cf90af3 100644 --- a/apps/decap/src/helpers/frame.tsx +++ b/apps/decap/src/helpers/frame.tsx @@ -1,5 +1,6 @@ -import { FrameQuery, Locale, registerOperator, Url } from '@custom/schema'; +import { FrameQuery, Locale, Url } from '@custom/schema'; import { NavigationItemSource } from '@custom/schema/source'; +import { registerExecutor } from '@custom/ui'; import { IntlProvider } from '@custom/ui/intl'; import { Frame } from '@custom/ui/routes/Frame'; import { PropsWithChildren } from 'react'; @@ -16,23 +17,20 @@ const menuItems = (amount: number) => ); export function PreviewFrame({ children }: PropsWithChildren) { - registerOperator( - () => ({ - mainNavigation: [ - { - locale: Locale.En, - items: menuItems(4), - }, - ], - footerNavigation: [ - { - locale: Locale.En, - items: menuItems(4), - }, - ], - }), - FrameQuery, - ); + registerExecutor(FrameQuery, () => ({ + mainNavigation: [ + { + locale: Locale.En, + items: menuItems(4), + }, + ], + footerNavigation: [ + { + locale: Locale.En, + items: menuItems(4), + }, + ], + })); return ( {children} diff --git a/apps/decap/src/main.tsx b/apps/decap/src/main.tsx index ecb692e17..24cfa23e2 100644 --- a/apps/decap/src/main.tsx +++ b/apps/decap/src/main.tsx @@ -1,4 +1,5 @@ -import { PreviewDecapPageQuery, registerOperator } from '@custom/schema'; +import { PreviewDecapPageQuery } from '@custom/schema'; +import { registerExecutor } from '@custom/ui'; import { Page } from '@custom/ui/routes/Page'; import CMS from 'decap-cms-app'; @@ -66,7 +67,7 @@ CMS.registerPreviewTemplate( PreviewDecapPageQuery, pageSchema, (data) => { - registerOperator(() => data, PreviewDecapPageQuery); + registerExecutor(PreviewDecapPageQuery, data); return ; }, 'previewDecapPage', diff --git a/apps/website/gatsby-browser.ts b/apps/website/gatsby-browser.ts index 4fc5ee1e8..0dfcf39dd 100644 --- a/apps/website/gatsby-browser.ts +++ b/apps/website/gatsby-browser.ts @@ -1,10 +1,12 @@ import './styles.css'; -import { drupalOperator, registerOperator } from '@custom/schema'; +import { registerExecutor } from '@custom/ui'; import { GatsbyBrowser } from 'gatsby'; +import { drupalExecutor } from './src/utils/drupal-executor'; + export const onClientEntry: GatsbyBrowser['onClientEntry'] = async () => { - registerOperator(drupalOperator(`/graphql`)); + registerExecutor(drupalExecutor(`/graphql`)); }; export const shouldUpdateScroll: GatsbyBrowser['shouldUpdateScroll'] = ( diff --git a/apps/website/gatsby-ssr.ts b/apps/website/gatsby-ssr.ts index 7a79c6494..32dc01824 100644 --- a/apps/website/gatsby-ssr.ts +++ b/apps/website/gatsby-ssr.ts @@ -1,13 +1,16 @@ import './styles.css'; -import { drupalOperator, Locale, registerOperator } from '@custom/schema'; +import { Locale } from '@custom/schema'; +import { registerExecutor } from '@custom/ui'; import { GatsbySSR } from 'gatsby'; +import { drupalExecutor } from './src/utils/drupal-executor'; + export const onRenderBody: GatsbySSR['onRenderBody'] = ({ setHtmlAttributes, pathname, }) => { - registerOperator(drupalOperator(`/graphql`)); + registerExecutor(drupalExecutor(`/graphql`)); const locales = Object.values(Locale); if (locales.length === 1) { // Single-language project. diff --git a/apps/website/src/layouts/index.tsx b/apps/website/src/layouts/index.tsx index de31e1d2e..59ce7bdf0 100644 --- a/apps/website/src/layouts/index.tsx +++ b/apps/website/src/layouts/index.tsx @@ -1,5 +1,6 @@ import { SilverbackPageContext } from '@amazeelabs/gatsby-source-silverback'; -import { FrameQuery, registerOperator } from '@custom/schema'; +import { FrameQuery } from '@custom/schema'; +import { registerExecutor } from '@custom/ui'; import { IntlProvider } from '@custom/ui/intl'; import { Frame } from '@custom/ui/routes/Frame'; import { graphql, useStaticQuery, WrapPageElementNodeArgs } from 'gatsby'; @@ -22,7 +23,7 @@ export default function Layout({ } } `); - registerOperator(data, FrameQuery); + registerExecutor(FrameQuery, data); return ( {children} diff --git a/apps/website/src/pages/404.tsx b/apps/website/src/pages/404.tsx index 1b837fb32..5a8bd07dc 100644 --- a/apps/website/src/pages/404.tsx +++ b/apps/website/src/pages/404.tsx @@ -1,8 +1,5 @@ -import { - NotFoundPageQuery, - registerOperator, - ViewPageQuery, -} from '@custom/schema'; +import { NotFoundPageQuery, ViewPageQuery } from '@custom/schema'; +import { registerExecutor } from '@custom/ui'; import { Page } from '@custom/ui/routes/Page'; import { graphql, PageProps } from 'gatsby'; import React from 'react'; @@ -34,15 +31,15 @@ export default function Index({ data }: PageProps) { data.websiteSettings?.notFoundPage?.translations ?.filter(isTruthy) .forEach(({ id, locale, ...page }) => { - registerOperator( - () => ({ - page, - }), + registerExecutor( ViewPageQuery, { id, locale, }, + { + page, + }, ); }); return ( diff --git a/apps/website/src/preview/page.tsx b/apps/website/src/preview/page.tsx index 6d3c10ed7..53d48009e 100644 --- a/apps/website/src/preview/page.tsx +++ b/apps/website/src/preview/page.tsx @@ -1,32 +1,35 @@ -'use client'; - -import { - drupalOperator, - registerOperator, - ViewPageQuery, -} from '@custom/schema'; -import { Loading } from '@custom/ui/routes/Loading'; -// import { Page } from '@custom/ui/routes/Page'; +import { PreviewDrupalPageQuery, ViewPageQuery } from '@custom/schema'; +import { registerExecutor } from '@custom/ui'; +import { Page } from '@custom/ui/routes/Page'; import React from 'react'; -// import { usePreviewParameters } from '../utils/preview'; +import { drupalExecutor } from '../utils/drupal-executor'; +import { usePreviewParameters } from '../utils/preview'; + +const previewExecutor = drupalExecutor( + `${process.env.GATSBY_DRUPAL_URL}/graphql`, +); export default function PagePreview() { - // const { nid, rid, lang } = usePreviewParameters(); - registerOperator( - drupalOperator(`${process.env.GATSBY_DRUPAL_URL}/graphql`), - ViewPageQuery, - ); - return ; - // const data = useOperation( - // PreviewPageQuery, - // nid && rid && lang - // ? { - // id: nid, - // rid: rid, - // locale: lang, - // } - // : undefined, - // ); - // return data?.previewPage ? : ; + const { nid, rid, lang } = usePreviewParameters(); + + registerExecutor(ViewPageQuery, () => { + return new Promise((resolve, reject) => { + if (nid && rid && lang) { + previewExecutor(PreviewDrupalPageQuery, { + id: nid, + locale: lang, + rid, + }) + .then((result) => { + if (result.preview) { + resolve({ page: result.preview }); + } + return; + }) + .catch((error) => reject(error)); + } + }); + }); + return ; } diff --git a/apps/website/src/templates/decap-page.tsx b/apps/website/src/templates/decap-page.tsx index 392758739..2a0857771 100644 --- a/apps/website/src/templates/decap-page.tsx +++ b/apps/website/src/templates/decap-page.tsx @@ -1,5 +1,6 @@ import { SilverbackPageContext } from '@amazeelabs/gatsby-source-silverback'; -import { Locale, registerOperator, ViewPageQuery } from '@custom/schema'; +import { Locale, ViewPageQuery } from '@custom/schema'; +import { registerExecutor } from '@custom/ui'; import { Page } from '@custom/ui/routes/Page'; import { graphql, HeadProps, PageProps } from 'gatsby'; import React from 'react'; @@ -45,10 +46,14 @@ export default function DecapPageTemplate({ data, pageContext, }: PageProps) { - registerOperator(data, ViewPageQuery, { - id: pageContext.id, - locale: pageContext.locale, - }); + registerExecutor( + ViewPageQuery, + { + id: pageContext.id, + locale: pageContext.locale, + }, + data, + ); return ( ) { - registerOperator(data, ViewPageQuery, { - id: pageContext.id, - locale: pageContext.locale, - }); + registerExecutor( + ViewPageQuery, + { + id: pageContext.id, + locale: pageContext.locale, + }, + data, + ); return ( ); diff --git a/apps/website/src/utils/drupal-executor.ts b/apps/website/src/utils/drupal-executor.ts new file mode 100644 index 000000000..3335abe26 --- /dev/null +++ b/apps/website/src/utils/drupal-executor.ts @@ -0,0 +1,45 @@ +// TODO: Duplication of types generated in the schema package. +export type OperationId< + TQueryResult extends any, + TQueryVariables extends any, +> = string & { + ___query_result: TQueryResult; + ___query_variables: TQueryVariables; +}; + +export type AnyOperationId = OperationId; + +export type OperationResult> = + TQueryID['___query_result']; + +export type OperationVariables> = + TQueryID['___query_variables']; + +/** + * Create an executor that operates against a Drupal endpoint. + * TODO: Fix typing after moving Operation types into executors package. + */ +export function drupalExecutor(endpoint: string) { + return async function ( + id: OperationId, + variables?: OperationVariables, + ) { + const url = new URL(endpoint, window.location.origin); + url.searchParams.set('queryId', id); + url.searchParams.set('variables', JSON.stringify(variables)); + const { data, errors } = await ( + await fetch(url, { + credentials: 'include', + headers: { + 'SLB-Forwarded-Proto': window.location.protocol.slice(0, -1), + 'SLB-Forwarded-Host': window.location.hostname, + 'SLB-Forwarded-Port': window.location.port, + }, + }) + ).json(); + if (errors) { + throw errors; + } + return data; + }; +} diff --git a/packages/executors/.eslintrc.mjs b/packages/executors/.eslintrc.mjs new file mode 100644 index 000000000..2702f9693 --- /dev/null +++ b/packages/executors/.eslintrc.mjs @@ -0,0 +1,4 @@ +export default { + extends: ['@amazeelabs/eslint-config'], + root: true, +}; diff --git a/packages/executors/.gitignore b/packages/executors/.gitignore new file mode 100644 index 000000000..378eac25d --- /dev/null +++ b/packages/executors/.gitignore @@ -0,0 +1 @@ +build diff --git a/packages/executors/.prettierrc b/packages/executors/.prettierrc new file mode 100644 index 000000000..ae00ae6bf --- /dev/null +++ b/packages/executors/.prettierrc @@ -0,0 +1 @@ +"@amazeelabs/prettier-config" diff --git a/packages/executors/package.json b/packages/executors/package.json new file mode 100644 index 000000000..d6027b948 --- /dev/null +++ b/packages/executors/package.json @@ -0,0 +1,29 @@ +{ + "name": "@amazeelabs/executors", + "version": "1.0.0", + "description": "", + "main": "build/index.js", + "types": "build/index.d.ts", + "type": "module", + "scripts": { + "prep": "tsc", + "build": "tsc", + "test:unit": "vitest run", + "test:static": "tsc --noEmit && eslint \"**/*.{ts,tsx,js,jsx}\" --ignore-path=\"./.gitignore\" --fix" + }, + "keywords": [], + "author": "Amazee Labs ", + "license": "ISC", + "dependencies": { + "@types/lodash-es": "^4.17.12", + "lodash-es": "^4.17.21" + }, + "devDependencies": { + "@amazeelabs/eslint-config": "^1.4.43", + "@amazeelabs/prettier-config": "^1.1.3", + "eslint": "^8.43.0", + "prettier": "^2.8.8", + "typescript": "^5.3.3", + "vitest": "^1.1.0" + } +} diff --git a/packages/executors/src/index.ts b/packages/executors/src/index.ts new file mode 100644 index 000000000..6158ab70c --- /dev/null +++ b/packages/executors/src/index.ts @@ -0,0 +1 @@ +export { createExecutor, registerExecutor, clearRegistry } from './lib.js'; diff --git a/packages/executors/src/lib.test.ts b/packages/executors/src/lib.test.ts new file mode 100644 index 000000000..dd8292cef --- /dev/null +++ b/packages/executors/src/lib.test.ts @@ -0,0 +1,89 @@ +import { beforeEach, expect, test, vi } from 'vitest'; + +import { + AnyOperationId, + clearRegistry, + createExecutor, + OperationId, + registerExecutor, +} from './lib'; + +beforeEach(clearRegistry); + +test('no operator', () => { + expect(() => createExecutor('unknown' as AnyOperationId)).toThrow(); +}); + +test('global default operator', () => { + const op = vi.fn(); + registerExecutor(op); + expect(() => createExecutor('unknown' as AnyOperationId)()).not.toThrow(); + expect(op).toHaveBeenCalledOnce(); + expect(op).toHaveBeenCalledWith('unknown', undefined); +}); + +test('global default operator with arguments', () => { + const op = vi.fn(); + registerExecutor(op); + expect(() => + createExecutor('unknown' as AnyOperationId, { foo: 'bar' })(), + ).not.toThrow(); + expect(op).toHaveBeenCalledOnce(); + expect(op).toHaveBeenCalledWith('unknown', { foo: 'bar' }); +}); + +test('operation default operator', () => { + const a = vi.fn(); + registerExecutor('a', a); + expect(() => createExecutor('b' as AnyOperationId)()).toThrow(); + expect(() => createExecutor('a' as AnyOperationId)()).not.toThrow(); + expect(a).toHaveBeenCalledOnce(); + expect(a).toHaveBeenCalledWith('a', undefined); +}); + +test('operation default operator with arguments', () => { + const a = vi.fn(); + registerExecutor('a', a); + expect(() => + createExecutor('b' as AnyOperationId, { foo: 'bar' })(), + ).toThrow(); + expect(() => + createExecutor('a' as AnyOperationId, { foo: 'bar' })(), + ).not.toThrow(); + expect(a).toHaveBeenCalledOnce(); + expect(a).toHaveBeenCalledWith('a', { foo: 'bar' }); +}); + +test('structural argument matching', () => { + const id = 'x' as OperationId; + const a = vi.fn(); + const b = vi.fn(); + const c = vi.fn(); + registerExecutor(id, { y: 1 }, a); + registerExecutor(id, { y: 2 }, b); + registerExecutor(id, { y: 1, z: 1 }, c); + expect(() => createExecutor(id, { y: 3 })()).toThrow(); + expect(() => createExecutor(id, { y: 1, z: 1 })()).not.toThrow(); + expect(() => createExecutor(id, { y: 1 })()).not.toThrow(); + expect(() => createExecutor(id, { y: 2 })()).not.toThrow(); + + expect(a).toHaveBeenCalledOnce(); + expect(a).toHaveBeenCalledWith(id, { y: 1 }); + expect(b).toHaveBeenCalledOnce(); + expect(b).toHaveBeenCalledWith(id, { y: 2 }); + expect(c).toHaveBeenCalledOnce(); + expect(c).toHaveBeenCalledWith(id, { y: 1, z: 1 }); +}); + +test('static data resolution', () => { + const id = 'x' as OperationId; + registerExecutor(id, { foo: 'bar' }); + expect(createExecutor(id)).toEqual({ foo: 'bar' }); +}); + +test('static data resolution with arguments', () => { + const id = 'x' as OperationId; + registerExecutor(id, { y: 1 }, { foo: 'bar' }); + expect(() => createExecutor(id)).toThrow(); + expect(createExecutor(id, { y: 1 })).toEqual({ foo: 'bar' }); +}); diff --git a/packages/schema/src/operators.ts b/packages/executors/src/lib.ts similarity index 50% rename from packages/schema/src/operators.ts rename to packages/executors/src/lib.ts index a253da93e..9c0205f04 100644 --- a/packages/schema/src/operators.ts +++ b/packages/executors/src/lib.ts @@ -1,22 +1,35 @@ -import { isMatch } from 'lodash-es'; +import { isMatch, isString } from 'lodash-es'; -import { - AnyOperationId, - OperationResult, - OperationVariables, -} from './generated'; +// TODO: Duplication of types generated in the schema package. +export type OperationId< + TQueryResult extends any, + TQueryVariables extends any, +> = string & { + ___query_result: TQueryResult; + ___query_variables: TQueryVariables; +}; -type Operator = ( - id: OperationId, - variables: OperationVariables, -) => OperationResult | Promise>; +export type AnyOperationId = OperationId; + +export type OperationResult> = + TQueryID['___query_result']; + +export type OperationVariables> = + TQueryID['___query_variables']; + +type Executor = + | OperationResult + | (( + id: OperationId, + variables: OperationVariables, + ) => OperationResult | Promise>); type VariablesMatcher = | Partial> | ((vars: OperationVariables) => boolean); type RegistryEntry = { - operator: Operator | OperationResult; + executor: Executor; id?: AnyOperationId; variables?: VariablesMatcher>; }; @@ -27,35 +40,27 @@ export function clearRegistry() { registry = []; } -export function drupalOperator(endpoint: string) { - return async function ( - id: OperationId, - variables?: OperationVariables, - ) { - const url = new URL(endpoint, window.location.origin); - url.searchParams.set('queryId', id); - url.searchParams.set('variables', JSON.stringify(variables)); - const { data, errors } = await fetch(url, { - credentials: 'include', - headers: { - 'SLB-Forwarded-Proto': window.location.protocol.slice(0, -1), - 'SLB-Forwarded-Host': window.location.hostname, - 'SLB-Forwarded-Port': window.location.port, - }, - }).then((r) => r.json()); - if (errors) { - throw errors; - } - return data; - }; -} +export function registerExecutor( + executor: Executor, +): void; -export function registerOperator( - operator: Operator | OperationResult, - id?: OperationId, - variables?: VariablesMatcher>, -) { - registry.push({ id, operator, variables }); +export function registerExecutor( + id: OperationId, + executor: Executor, +): void; + +export function registerExecutor( + id: OperationId, + variables: VariablesMatcher>, + executor: Executor, +): void; + +export function registerExecutor(...args: unknown[]) { + registry.push({ + id: isString(args[0]) ? args[0] : undefined, + executor: args[args.length - 1], + variables: args.length === 3 ? args[1] : undefined, + }); } function matchVariables( @@ -84,7 +89,7 @@ function formatEntry( return ` ${id ? id : '*'}:${variables ? JSON.stringify(variables) : '*'}`; } -class OperatorRegistryError extends Error { +class ExecutorRegistryError extends Error { constructor(id: OperationId, variables: OperationVariables) { const candidates = getCandidates(id); const candidatesMessage = @@ -98,24 +103,24 @@ class OperatorRegistryError extends Error { : []; super( [ - 'No operator found for:', + 'No executor found for:', formatEntry(id, variables), ...candidatesMessage, ].join('\n'), ); - this.name = 'OperatorRegistryError'; + this.name = 'ExecutorRegistryError'; } } /** - * Create an operator from the registry. + * Create an executor from the registry. * * @param id * The operation ID, from the schema package. * @param variables * A dictionary of variables to be passed to the operation. */ -export function createOperator( +export function createExecutor( id: OperationId, variables?: OperationVariables, ) { @@ -124,10 +129,10 @@ export function createOperator( .pop(); if (op) { - if (typeof op.operator !== 'function') { - return op.operator; + if (typeof op.executor === 'function') { + return () => op.executor(id, variables); } - return () => op.operator(id, variables); + return op.executor; } - throw new OperatorRegistryError(id, variables); + throw new ExecutorRegistryError(id, variables); } diff --git a/packages/executors/tsconfig.json b/packages/executors/tsconfig.json new file mode 100644 index 000000000..e7dd0311e --- /dev/null +++ b/packages/executors/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "ESNext", + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "declaration": true, + "declarationDir": "build", + "outDir": "build" + }, + "include": ["src"] +} diff --git a/packages/schema/package.json b/packages/schema/package.json index 3ca8f06df..9355336eb 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -19,7 +19,7 @@ }, "typesVersions": { "*": { - ".": [ + "": [ "build/index.d.ts" ], "/source": [ diff --git a/packages/schema/src/index.ts b/packages/schema/src/index.ts index a04df24f3..d52bdbe69 100644 --- a/packages/schema/src/index.ts +++ b/packages/schema/src/index.ts @@ -1,9 +1,2 @@ -export { - createOperator, - registerOperator, - drupalOperator, - clearRegistry, -} from './operators.js'; - export * from './generated/index.js'; export * from '@amazeelabs/scalars'; diff --git a/packages/schema/src/operators.test.ts b/packages/schema/src/operators.test.ts deleted file mode 100644 index c5361225f..000000000 --- a/packages/schema/src/operators.test.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { beforeEach, expect, test, vi } from 'vitest'; - -import { AnyOperationId, OperationId } from './generated'; -import { clearRegistry, createOperator, registerOperator } from './operators'; - -beforeEach(clearRegistry); - -test('no operator', () => { - expect(() => createOperator('unknown' as AnyOperationId)).toThrow(); -}); - -test('global default operator', () => { - const op = vi.fn(); - registerOperator(op); - expect(() => createOperator('unknown' as AnyOperationId)()).not.toThrow(); - expect(op).toHaveBeenCalledOnce(); - expect(op).toHaveBeenCalledWith('unknown', undefined); -}); - -test('global default operator with arguments', () => { - const op = vi.fn(); - registerOperator(op); - expect(() => - createOperator('unknown' as AnyOperationId, { foo: 'bar' })(), - ).not.toThrow(); - expect(op).toHaveBeenCalledOnce(); - expect(op).toHaveBeenCalledWith('unknown', { foo: 'bar' }); -}); - -test('operation default operator', () => { - const a = vi.fn(); - registerOperator(a, 'a'); - expect(() => createOperator('b' as AnyOperationId)()).toThrow(); - expect(() => createOperator('a' as AnyOperationId)()).not.toThrow(); - expect(a).toHaveBeenCalledOnce(); - expect(a).toHaveBeenCalledWith('a', undefined); -}); - -test('operation default operator with arguments', () => { - const a = vi.fn(); - registerOperator(a, 'a'); - expect(() => - createOperator('b' as AnyOperationId, { foo: 'bar' })(), - ).toThrow(); - expect(() => - createOperator('a' as AnyOperationId, { foo: 'bar' })(), - ).not.toThrow(); - expect(a).toHaveBeenCalledOnce(); - expect(a).toHaveBeenCalledWith('a', { foo: 'bar' }); -}); - -test('structural argument matching', () => { - const id = 'x' as OperationId; - const a = vi.fn(); - const b = vi.fn(); - const c = vi.fn(); - registerOperator(a, id, { y: 1 }); - registerOperator(b, id, { y: 2 }); - registerOperator(c, id, { y: 1, z: 1 }); - expect(() => createOperator(id, { y: 3 })()).toThrow(); - expect(() => createOperator(id, { y: 1, z: 1 })()).not.toThrow(); - expect(() => createOperator(id, { y: 1 })()).not.toThrow(); - expect(() => createOperator(id, { y: 2 })()).not.toThrow(); - - expect(a).toHaveBeenCalledOnce(); - expect(a).toHaveBeenCalledWith(id, { y: 1 }); - expect(b).toHaveBeenCalledOnce(); - expect(b).toHaveBeenCalledWith(id, { y: 2 }); - expect(c).toHaveBeenCalledOnce(); - expect(c).toHaveBeenCalledWith(id, { y: 1, z: 1 }); -}); diff --git a/packages/ui/.storybook/preview.tsx b/packages/ui/.storybook/preview.tsx index 01a91549f..1cacfbda0 100644 --- a/packages/ui/.storybook/preview.tsx +++ b/packages/ui/.storybook/preview.tsx @@ -4,7 +4,7 @@ import { Decorator } from '@storybook/react'; import { IntlProvider } from '../src/utils/intl'; import { LocationProvider } from '@custom/schema'; import React from 'react'; -import { clearRegistry, registerOperator } from '@custom/schema'; +import { clearRegistry } from '@amazeelabs/executors'; import { SWRConfig, useSWRConfig } from 'swr'; // Every story is wrapped in an IntlProvider by default. @@ -14,11 +14,8 @@ const IntlDecorator: Decorator = (Story) => ( ); -const OperatorDecorator: Decorator = (Story, ctx) => { +const OperatorDecorator: Decorator = (Story) => { clearRegistry(); - ctx.parameters.operators?.forEach(([id, impl]) => - registerOperator((_, vars) => impl(vars), id), - ); return ; }; diff --git a/packages/ui/package.json b/packages/ui/package.json index f4f72da2e..3ca62d2ba 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -4,7 +4,12 @@ "version": "1.0.0", "type": "module", "sideEffects": false, + "main": "build/index.js", + "types": "build/index.d.ts", "exports": { + ".": [ + "./build/index.js" + ], "./intl": [ "./build/utils/intl/index.js" ], @@ -14,6 +19,9 @@ }, "typesVersions": { "*": { + "": [ + "build/index.d.ts" + ], "routes/*": [ "build/components/Routes/*.d.ts" ], @@ -59,6 +67,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { + "@amazeelabs/executors": "workspace:*", "@amazeelabs/bridge-storybook": "^1.2.1", "@amazeelabs/cloudinary-responsive-image": "^1.6.7", "@formatjs/cli": "^6.1.3", diff --git a/packages/ui/src/components/Organisms/ContentHub.stories.ts b/packages/ui/src/components/Organisms/ContentHub.stories.ts deleted file mode 100644 index 19f0ade52..000000000 --- a/packages/ui/src/components/Organisms/ContentHub.stories.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { - ContentHubQuery, - ContentHubResultItemFragment, - Url, -} from '@custom/schema'; -import Landscape from '@stories/landscape.jpg?as=metadata'; -import Portrait from '@stories/portrait.jpg?as=metadata'; -import { Meta, StoryObj } from '@storybook/react'; - -import { image } from '../../helpers/image'; -import { buildOperator } from '../../helpers/operators'; -import { ContentHub } from './ContentHub'; - -export default { - component: ContentHub, -} satisfies Meta; - -export const Empty = { - parameters: { - operators: [ - buildOperator(ContentHubQuery, () => ({ - contentHub: { total: 0, items: [] }, - })), - ], - }, -} satisfies StoryObj; - -export const Loading = { - parameters: { - operators: [buildOperator(ContentHubQuery, () => new Promise(() => {}))], - }, -} satisfies StoryObj; - -export const Error = { - parameters: { - operators: [ - buildOperator(ContentHubQuery, () => { - throw 'Error loading content hub.'; - }), - ], - }, -} satisfies StoryObj; - -export const WithResults = { - args: { - pageSize: 6, - }, - parameters: { - operators: [ - buildOperator(ContentHubQuery, (vars) => { - const items = [...Array(82).keys()].map( - (i) => - ({ - path: `/item/${i + 1}` as Url, - title: `${i % 3 === 2 ? 'Article' : 'Story'} #${i + 1}`, - teaserImage: - i % 3 === 1 - ? undefined - : { - alt: `Image for item #${i + 1}`, - source: image(i % 2 === 0 ? Landscape : Portrait, { - width: 400, - height: 300, - }), - }, - } satisfies ContentHubResultItemFragment), - ); - const filtered = items.filter( - (item) => !vars.query || item.title.includes(vars.query), - ); - return { - contentHub: { - total: filtered.length, - items: filtered.slice( - vars.pagination.offset, - vars.pagination.offset + vars.pagination.limit, - ), - }, - }; - }), - ], - }, -} satisfies StoryObj; - -export const Filtered = { - ...WithResults, - parameters: { - ...WithResults.parameters, - location: new URL('local:/content-hub?keyword=Article'), - }, -} satisfies StoryObj; - -export const Paged = { - ...WithResults, - parameters: { - ...WithResults.parameters, - location: new URL('local:/content-hub?page=2'), - }, -} satisfies StoryObj; diff --git a/packages/ui/src/components/Organisms/ContentHub.stories.tsx b/packages/ui/src/components/Organisms/ContentHub.stories.tsx new file mode 100644 index 000000000..572a28bdb --- /dev/null +++ b/packages/ui/src/components/Organisms/ContentHub.stories.tsx @@ -0,0 +1,104 @@ +import { registerExecutor } from '@amazeelabs/executors'; +import { + ContentHubQuery, + ContentHubResultItemFragment, + OperationResult, + OperationVariables, + Url, +} from '@custom/schema'; +import Landscape from '@stories/landscape.jpg?as=metadata'; +import Portrait from '@stories/portrait.jpg?as=metadata'; +import { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; + +import { image } from '../../helpers/image'; +import { ContentHub } from './ContentHub'; + +type ContentHubExecutor = ( + id: typeof ContentHubQuery, + vars: OperationVariables, +) => Promise>; + +export default { + title: 'Components/Organisms/ContentHub', + render: (args) => { + console.log(args); + registerExecutor(ContentHubQuery, args.exec); + return ; + }, +} satisfies Meta<{ exec: ContentHubExecutor }>; + +type ContentHubStory = StoryObj<{ exec: ContentHubExecutor }>; + +export const Empty = { + args: { + exec: async () => ({ + contentHub: { total: 0, items: [] }, + }), + }, +} satisfies ContentHubStory; + +export const Loading = { + args: { + exec: () => new Promise>(() => {}), + }, +} satisfies ContentHubStory; + +export const Error = { + args: { + exec: () => + new Promise>(() => { + throw 'Error loading content hub.'; + }), + }, +} satisfies ContentHubStory; + +export const WithResults = { + args: { + exec: async (_, vars) => { + const items = [...Array(82).keys()].map( + (i) => + ({ + path: `/item/${i + 1}` as Url, + title: `${i % 3 === 2 ? 'Article' : 'Story'} #${i + 1}`, + teaserImage: + i % 3 === 1 + ? undefined + : { + alt: `Image for item #${i + 1}`, + source: image(i % 2 === 0 ? Landscape : Portrait, { + width: 400, + height: 300, + }), + }, + } satisfies ContentHubResultItemFragment), + ); + const filtered = items.filter( + (item) => !vars.query || item.title.includes(vars.query), + ); + return { + contentHub: { + total: filtered.length, + items: filtered.slice( + vars.pagination.offset, + vars.pagination.offset + vars.pagination.limit, + ), + }, + }; + }, + }, +} satisfies ContentHubStory; + +export const Filtered = { + ...WithResults, + parameters: { + location: new URL('local:/content-hub?keyword=Article'), + }, +} satisfies ContentHubStory; + +export const Paged = { + ...WithResults, + parameters: { + location: new URL('local:/content-hub?page=2'), + }, +} satisfies ContentHubStory; diff --git a/packages/ui/src/components/Organisms/Footer.stories.ts b/packages/ui/src/components/Organisms/Footer.stories.ts deleted file mode 100644 index b5f22192a..000000000 --- a/packages/ui/src/components/Organisms/Footer.stories.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { FrameQuery, Locale, Navigation, Url } from '@custom/schema'; -import { Meta, StoryObj } from '@storybook/react'; - -import { buildOperator } from '../../helpers/operators'; -import { Footer as Component } from './Footer'; - -export default { - component: Component, - parameters: { - layout: 'fullscreen', - }, - excludeStories: /^Fixture/, -} satisfies Meta; - -export const FixtureFooterNavigation: Navigation = { - locale: Locale.En, - items: [ - { title: 'About', target: '/about' as Url }, - { title: 'Blog', target: '/blog' as Url }, - { title: 'Jobs', target: '/jobs' as Url }, - { title: 'Press', target: '/press' as Url }, - { title: 'Accessibility', target: '/accessibility' as Url }, - { title: 'Partners', target: '/partners' as Url }, - ].map((item, index) => ({ - ...item, - id: index.toString(), - locale: 'en' as Locale, - })), -}; - -export const Footer = { - parameters: { - operators: [ - buildOperator(FrameQuery, () => ({ - footerNavigation: [FixtureFooterNavigation], - })), - ], - }, -} satisfies StoryObj; diff --git a/packages/ui/src/components/Organisms/Footer.stories.tsx b/packages/ui/src/components/Organisms/Footer.stories.tsx new file mode 100644 index 000000000..58f883f6a --- /dev/null +++ b/packages/ui/src/components/Organisms/Footer.stories.tsx @@ -0,0 +1,39 @@ +import { registerExecutor } from '@amazeelabs/executors'; +import { FrameQuery, Locale, Url } from '@custom/schema'; +import { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; + +import { Footer as Component } from './Footer'; + +export default { + component: Component, + parameters: { + layout: 'fullscreen', + }, +} satisfies Meta; + +export const Footer = { + render: (args) => { + registerExecutor(FrameQuery, () => args); + return ; + }, + args: { + footerNavigation: [ + { + locale: Locale.En, + items: [ + { title: 'About', target: '/about' as Url }, + { title: 'Blog', target: '/blog' as Url }, + { title: 'Jobs', target: '/jobs' as Url }, + { title: 'Press', target: '/press' as Url }, + { title: 'Accessibility', target: '/accessibility' as Url }, + { title: 'Partners', target: '/partners' as Url }, + ].map((item, index) => ({ + ...item, + id: index.toString(), + locale: 'en' as Locale, + })), + }, + ], + }, +} satisfies StoryObj; diff --git a/packages/ui/src/components/Organisms/Header.stories.ts b/packages/ui/src/components/Organisms/Header.stories.ts deleted file mode 100644 index 6a68d1c22..000000000 --- a/packages/ui/src/components/Organisms/Header.stories.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { FrameQuery, Locale, Navigation, Url } from '@custom/schema'; -import { Meta, StoryObj } from '@storybook/react'; -import { userEvent, within } from '@storybook/testing-library'; - -import { buildOperator } from '../../helpers/operators'; -import { Header } from './Header'; - -export default { - component: Header, - parameters: { - layout: 'fullscreen', - }, - excludeStories: /^Fixture/, -} satisfies Meta; - -export const FixtureMainNavigation: Navigation = { - locale: Locale.En, - items: [ - { - id: '1', - title: 'Home', - target: '/' as Url, - }, - { - id: '2', - title: 'Products', - target: '/products' as Url, - }, - { - id: '3', - title: 'About us', - target: '/about' as Url, - }, - { - id: '4', - title: 'Blog', - target: '/blog' as Url, - }, - { - id: '5', - title: 'Drupal', - target: '/drupal' as Url, - parent: '2', - }, - { - id: '6', - title: 'Gatsby', - target: '/gatsby' as Url, - parent: '2', - }, - ], -}; - -export const Idle = { - parameters: { - operators: [ - buildOperator(FrameQuery, () => ({ - mainNavigation: [FixtureMainNavigation], - })), - ], - }, -} satisfies StoryObj; - -export const Expanded: StoryObj = { - ...Idle, - play: async ({ canvasElement }) => { - const canvas = within(canvasElement); - const navigation = within( - await canvas.findByRole('navigation', { name: 'Global' }), - ); - const mobileMenuButton = await navigation.queryByRole('button', { - name: 'Open main navigation', - }); - if (mobileMenuButton) { - userEvent.click(mobileMenuButton); - const dialog = within( - await within(canvasElement.parentElement!).findByRole('dialog'), - ); - userEvent.click(await dialog.findByRole('button', { name: 'Products' })); - await dialog.findByRole('link', { name: 'Drupal' }); - } else { - userEvent.click( - await navigation.findByRole('button', { name: 'Products' }), - ); - await navigation.findByRole('link', { name: 'Drupal' }); - } - }, -}; diff --git a/packages/ui/src/components/Organisms/Header.stories.tsx b/packages/ui/src/components/Organisms/Header.stories.tsx new file mode 100644 index 000000000..62bf9bcc6 --- /dev/null +++ b/packages/ui/src/components/Organisms/Header.stories.tsx @@ -0,0 +1,89 @@ +import { registerExecutor } from '@amazeelabs/executors'; +import { FrameQuery, Locale, Url } from '@custom/schema'; +import { Meta, StoryObj } from '@storybook/react'; +import { userEvent, within } from '@storybook/testing-library'; +import React from 'react'; + +import { Header } from './Header'; + +export default { + component: Header, + parameters: { + layout: 'fullscreen', + }, + excludeStories: /^Fixture/, +} satisfies Meta; + +export const Idle = { + render: (args) => { + registerExecutor(FrameQuery, () => args); + return
; + }, + args: { + mainNavigation: [ + { + locale: Locale.En, + items: [ + { + id: '1', + title: 'Home', + target: '/' as Url, + }, + { + id: '2', + title: 'Products', + target: '/products' as Url, + }, + { + id: '3', + title: 'About us', + target: '/about' as Url, + }, + { + id: '4', + title: 'Blog', + target: '/blog' as Url, + }, + { + id: '5', + title: 'Drupal', + target: '/drupal' as Url, + parent: '2', + }, + { + id: '6', + title: 'Gatsby', + target: '/gatsby' as Url, + parent: '2', + }, + ], + }, + ], + }, +} satisfies StoryObj; + +export const Expanded: StoryObj = { + ...Idle, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + const navigation = within( + await canvas.findByRole('navigation', { name: 'Global' }), + ); + const mobileMenuButton = navigation.queryByRole('button', { + name: 'Open main navigation', + }); + if (mobileMenuButton) { + userEvent.click(mobileMenuButton); + const dialog = within( + await within(canvasElement.parentElement!).findByRole('dialog'), + ); + userEvent.click(await dialog.findByRole('button', { name: 'Products' })); + await dialog.findByRole('link', { name: 'Drupal' }); + } else { + userEvent.click( + await navigation.findByRole('button', { name: 'Products' }), + ); + await navigation.findByRole('link', { name: 'Drupal' }); + } + }, +}; diff --git a/packages/ui/src/components/Routes/Frame.stories.ts b/packages/ui/src/components/Routes/Frame.stories.ts deleted file mode 100644 index c12bafadc..000000000 --- a/packages/ui/src/components/Routes/Frame.stories.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { FrameQuery } from '@custom/schema'; -import { Meta, StoryObj } from '@storybook/react'; - -import { buildOperator } from '../../helpers/operators'; -import { FixtureFooterNavigation } from '../Organisms/Footer.stories'; -import { FixtureMainNavigation } from '../Organisms/Header.stories'; -import { Frame } from './Frame'; - -export default { - component: Frame, - parameters: { - layout: 'fullscreen', - }, -} satisfies Meta; - -export const Default = { - parameters: { - operators: [ - buildOperator(FrameQuery, () => ({ - mainNavigation: [FixtureMainNavigation], - footerNavigation: [FixtureFooterNavigation], - })), - ], - }, -} satisfies StoryObj; diff --git a/packages/ui/src/components/Routes/Frame.stories.tsx b/packages/ui/src/components/Routes/Frame.stories.tsx new file mode 100644 index 000000000..95c1abfbc --- /dev/null +++ b/packages/ui/src/components/Routes/Frame.stories.tsx @@ -0,0 +1,26 @@ +import { registerExecutor } from '@amazeelabs/executors'; +import { FrameQuery } from '@custom/schema'; +import { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; + +import { Footer as FooterStory } from '../Organisms/Footer.stories'; +import { Idle as HeaderStory } from '../Organisms/Header.stories'; +import { Frame } from './Frame'; + +export default { + component: Frame, + parameters: { + layout: 'fullscreen', + }, +} satisfies Meta; + +export const Default = { + render: (args) => { + registerExecutor(FrameQuery, () => args); + return ; + }, + args: { + mainNavigation: HeaderStory.args.mainNavigation, + footerNavigation: FooterStory.args.footerNavigation, + }, +} satisfies StoryObj; diff --git a/packages/ui/src/components/Routes/Page.stories.ts b/packages/ui/src/components/Routes/Page.stories.ts deleted file mode 100644 index 51ea7a838..000000000 --- a/packages/ui/src/components/Routes/Page.stories.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { ViewPageQuery } from '@custom/schema'; -import Landscape from '@stories/landscape.jpg?as=metadata'; -import { Meta, StoryObj } from '@storybook/react'; - -import { image } from '../../helpers/image'; -import { buildOperator } from '../../helpers/operators'; -import { Mixed, Paragraph } from '../Organisms/PageContent/BlockMarkup.stories'; -import { WithCaption } from '../Organisms/PageContent/BlockMedia.stories'; -import { Page } from './Page'; - -export default { - component: Page, -} satisfies Meta; - -export const Default = { - parameters: { - operators: [ - buildOperator(ViewPageQuery, () => ({ - page: { - title: 'Page Title', - hero: { - headline: 'Page Hero Headline', - }, - content: [ - { - __typename: 'BlockMarkup', - ...Mixed.args, - }, - { - __typename: 'BlockMedia', - ...WithCaption.args, - }, - { - __typename: 'BlockMarkup', - ...Paragraph.args, - }, - ] as Exclude['content'], - }, - })), - ], - }, -} satisfies StoryObj; - -export const FullHero = { - parameters: { - operators: [ - buildOperator(ViewPageQuery, () => ({ - page: { - title: 'Page Title', - hero: { - headline: 'Page Hero Headline', - lead: 'A longer lead text that even might break into multiple lines.', - image: { - source: image(Landscape, { width: 2000 }), - alt: 'Stock photo landscape hero.', - }, - }, - content: [ - { - __typename: 'BlockMarkup', - ...Mixed.args, - }, - { - __typename: 'BlockMedia', - ...WithCaption.args, - }, - { - __typename: 'BlockMarkup', - ...Paragraph.args, - }, - ] as Exclude['content'], - }, - })), - ], - }, -} satisfies StoryObj; diff --git a/packages/ui/src/components/Routes/Page.stories.tsx b/packages/ui/src/components/Routes/Page.stories.tsx new file mode 100644 index 000000000..6d716aaa9 --- /dev/null +++ b/packages/ui/src/components/Routes/Page.stories.tsx @@ -0,0 +1,61 @@ +import { registerExecutor } from '@amazeelabs/executors'; +import { ViewPageQuery } from '@custom/schema'; +import Landscape from '@stories/landscape.jpg?as=metadata'; +import { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; + +import { image } from '../../helpers/image'; +import { Mixed, Paragraph } from '../Organisms/PageContent/BlockMarkup.stories'; +import { WithCaption } from '../Organisms/PageContent/BlockMedia.stories'; +import { Page } from './Page'; + +export default { + component: Page, +} satisfies Meta; + +export const Default = { + render: (args) => { + registerExecutor(ViewPageQuery, () => args); + return ; + }, + args: { + page: { + title: 'Page Title', + hero: { + headline: 'Page Hero Headline', + }, + content: [ + { + __typename: 'BlockMarkup', + ...Mixed.args, + }, + { + __typename: 'BlockMedia', + ...WithCaption.args, + }, + { + __typename: 'BlockMarkup', + ...Paragraph.args, + }, + ] as Exclude['content'], + }, + }, +} satisfies StoryObj; + +export const FullHero = { + ...Default, + args: { + ...Default.args, + page: { + ...Default.args.page, + hero: { + headline: 'Page Hero Headline', + lead: 'A longer lead text that even might break into multiple lines.', + image: { + source: image(Landscape, { width: 2000 }), + alt: 'Stock photo landscape hero.', + }, + }, + }, + }, +} satisfies StoryObj; diff --git a/packages/ui/src/helpers/operators.ts b/packages/ui/src/helpers/operators.ts deleted file mode 100644 index 58b2ab23e..000000000 --- a/packages/ui/src/helpers/operators.ts +++ /dev/null @@ -1,27 +0,0 @@ -import type { - AnyOperationId, - OperationResult, - OperationVariables, -} from '@custom/schema'; - -type OperationMock = ( - vars: OperationVariables, -) => OperationResult | Promise>; - -type OperationMockTuple = [ - TOperation, - OperationMock, -] & { _hint: 'Do not create this directly, use "buildOperator" instead.' }; - -export function buildOperator( - id: TOperationId, - operator: OperationMock, -) { - return [id, operator] as OperationMockTuple; -} - -declare module '@storybook/react' { - interface Parameters { - operators?: Array; - } -} diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts new file mode 100644 index 000000000..0e7500f6f --- /dev/null +++ b/packages/ui/src/index.ts @@ -0,0 +1 @@ +export { registerExecutor } from '@amazeelabs/executors'; diff --git a/packages/ui/src/pages.stories.tsx b/packages/ui/src/pages.stories.tsx index 50c333498..6569243ff 100644 --- a/packages/ui/src/pages.stories.tsx +++ b/packages/ui/src/pages.stories.tsx @@ -1,3 +1,5 @@ +import { registerExecutor } from '@amazeelabs/executors'; +import { FrameQuery, ViewPageQuery } from '@custom/schema'; import { Meta, StoryFn } from '@storybook/react'; import React from 'react'; @@ -13,15 +15,15 @@ export default { // We don't want to snapshot page examples, that just causes a lot of noise. disableSnapshot: true, }, - operators: [ - ...FrameStory.parameters.operators, - ...PageStory.parameters.operators, - ], }, } satisfies Meta; -export const ContentPage = (() => ( - - - -)) satisfies StoryFn; +export const ContentPage = (() => { + registerExecutor(FrameQuery, () => FrameStory.args); + registerExecutor(ViewPageQuery, () => PageStory.args); + return ( + + + + ); +}) satisfies StoryFn; diff --git a/packages/ui/src/utils/operation.ts b/packages/ui/src/utils/operation.ts index 213776c62..0e446e754 100644 --- a/packages/ui/src/utils/operation.ts +++ b/packages/ui/src/utils/operation.ts @@ -1,6 +1,6 @@ +import { createExecutor } from '@amazeelabs/executors'; import { AnyOperationId, - createOperator, OperationResult, OperationVariables, } from '@custom/schema'; @@ -9,22 +9,26 @@ import useSwr, { SWRResponse } from 'swr'; export function useOperation( operation: TOperation, variables?: OperationVariables, -): SWRResponse> { - const operator = createOperator(operation, variables); +): Omit>, 'mutate'> { + const executor = createExecutor(operation, variables); + // If the executor is a function, use SWR to manage it. const result = useSwr>( [operation, variables], - typeof operator === 'function' ? operator : null, + // If the executor is not a function, pass null to SWR, + // so it does not try to fetch. + typeof executor === 'function' ? executor : null, { suspense: false, }, ); - return typeof operator === 'function' + + return typeof executor === 'function' ? result - : ({ - data: operator, + : // If the executor is not a function, return a mock SWR response. + { + data: executor, error: undefined, isValidating: false, isLoading: false, - mutate: () => undefined as any, - } satisfies SWRResponse>); + }; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index effa84e7d..bdbaf596f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -325,6 +325,34 @@ importers: packages/drupal/test_content: {} + packages/executors: + dependencies: + '@types/lodash-es': + specifier: ^4.17.12 + version: 4.17.12 + lodash-es: + specifier: ^4.17.21 + version: 4.17.21 + devDependencies: + '@amazeelabs/eslint-config': + specifier: ^1.4.43 + version: 1.4.43(eslint@8.56.0)(tailwindcss@3.3.2)(typescript@5.3.3) + '@amazeelabs/prettier-config': + specifier: ^1.1.3 + version: 1.1.3(prettier@2.8.8) + eslint: + specifier: ^8.43.0 + version: 8.56.0 + prettier: + specifier: ^2.8.8 + version: 2.8.8 + typescript: + specifier: ^5.3.3 + version: 5.3.3 + vitest: + specifier: ^1.1.0 + version: 1.1.0(@types/node@20.4.9) + packages/schema: dependencies: '@amazeelabs/codegen-autoloader': @@ -428,6 +456,9 @@ importers: '@amazeelabs/cloudinary-responsive-image': specifier: ^1.6.7 version: 1.6.7 + '@amazeelabs/executors': + specifier: workspace:* + version: link:../executors '@formatjs/cli': specifier: ^6.1.3 version: 6.1.3 @@ -625,7 +656,7 @@ packages: react: 18.2.0 optionalDependencies: '@types/react': 18.2.15 - typescript: 5.1.6 + typescript: 5.3.3 vitest: 0.32.2(happy-dom@9.20.3) transitivePeerDependencies: - '@edge-runtime/vm' @@ -655,7 +686,7 @@ packages: react: 18.2.0 optionalDependencies: '@types/react': 18.2.15 - typescript: 5.1.6 + typescript: 5.3.3 vitest: 0.32.2(happy-dom@9.20.3) transitivePeerDependencies: - '@edge-runtime/vm' @@ -683,7 +714,7 @@ packages: react: 18.2.0 optionalDependencies: '@types/react': 18.2.15 - typescript: 5.1.6 + typescript: 5.3.3 vitest: 0.32.2 transitivePeerDependencies: - '@edge-runtime/vm' @@ -729,7 +760,7 @@ packages: graphql: 16.8.1 optionalDependencies: '@graphql-codegen/plugin-helpers': 4.2.0(graphql@16.8.1) - typescript: 5.1.6 + typescript: 5.3.3 vitest: 0.32.2 transitivePeerDependencies: - '@edge-runtime/vm' @@ -762,13 +793,13 @@ packages: - supports-color dev: true - /@amazeelabs/eslint-config@1.4.43(eslint@7.32.0)(tailwindcss@3.3.2)(typescript@5.1.6): + /@amazeelabs/eslint-config@1.4.43(eslint@7.32.0)(tailwindcss@3.3.2)(typescript@5.3.3): resolution: {integrity: sha512-PsXbfV/R1Xu26ToEZFrnJKzC6MlTH2MLV4XbyX9nT4CO9Y+SHbDJu9qUeXYENbUYED1TyRv6BsCw+NEmRBg39A==} requiresBuild: true peerDependencies: eslint: ^8.36.0 dependencies: - '@typescript-eslint/eslint-plugin': 5.60.1(@typescript-eslint/parser@5.60.1)(eslint@7.32.0)(typescript@5.1.6) + '@typescript-eslint/eslint-plugin': 5.60.1(@typescript-eslint/parser@5.60.1)(eslint@7.32.0)(typescript@5.3.3) '@typescript-eslint/parser': 5.60.1(eslint@7.32.0)(typescript@5.1.6) eslint: 7.32.0 eslint-config-prettier: 8.8.0(eslint@7.32.0) @@ -788,6 +819,30 @@ packages: dev: false optional: true + /@amazeelabs/eslint-config@1.4.43(eslint@8.56.0)(tailwindcss@3.3.2)(typescript@5.3.3): + resolution: {integrity: sha512-PsXbfV/R1Xu26ToEZFrnJKzC6MlTH2MLV4XbyX9nT4CO9Y+SHbDJu9qUeXYENbUYED1TyRv6BsCw+NEmRBg39A==} + peerDependencies: + eslint: ^8.36.0 + dependencies: + '@typescript-eslint/eslint-plugin': 5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 5.60.1(eslint@8.56.0)(typescript@5.3.3) + eslint: 8.56.0 + eslint-config-prettier: 8.8.0(eslint@8.56.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.60.1)(eslint@8.56.0) + eslint-plugin-no-only-tests: 3.1.0 + eslint-plugin-promise: 6.1.1(eslint@8.56.0) + eslint-plugin-react: 7.32.2(eslint@8.56.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0) + eslint-plugin-simple-import-sort: 10.0.0(eslint@8.56.0) + eslint-plugin-tailwindcss: 3.13.0(tailwindcss@3.3.2) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + - tailwindcss + - typescript + dev: true + /@amazeelabs/gatsby-silverback-cloudinary@1.2.5: resolution: {integrity: sha512-EwaakDLR0TAcYiYcf3ntu5MqbNrCZVjh9Qq215jofmvoFK91qFzD8+rnUiGvTMfyWsCsI+tIXRpK81R0Lt4wjA==} dev: false @@ -830,8 +885,6 @@ packages: prettier: ^2.8.6 dependencies: prettier: 2.8.8 - dev: false - optional: true /@amazeelabs/publisher-elements@2.0.19: resolution: {integrity: sha512-dyvtsw9SNJ/FdayfgjrNsvjY4Fi4Ej6x0+tGsSKSlGfr0K1SiQTWnl9VD1lvEb7OFZemVo7bFoK5C1CBvTEPLw==} @@ -902,10 +955,10 @@ packages: react: ^18.2.0 dependencies: react: 18.2.0 - react-intl: 6.4.4(react@18.2.0)(typescript@5.1.6) + react-intl: 6.4.4(react@18.2.0)(typescript@5.3.3) optionalDependencies: '@types/react': 18.2.15 - typescript: 5.1.6 + typescript: 5.3.3 dev: false /@amazeelabs/scalars@1.6.2(react@18.2.0)(tailwindcss@3.3.2): @@ -923,13 +976,13 @@ packages: remeda: 1.23.0 unified: 10.1.2 optionalDependencies: - '@amazeelabs/eslint-config': 1.4.43(eslint@7.32.0)(tailwindcss@3.3.2)(typescript@5.1.6) + '@amazeelabs/eslint-config': 1.4.43(eslint@7.32.0)(tailwindcss@3.3.2)(typescript@5.3.3) '@amazeelabs/prettier-config': 1.1.3(prettier@2.8.8) '@types/hast': 2.3.4 '@types/react': 18.2.15 eslint: 7.32.0 prettier: 2.8.8 - typescript: 5.1.6 + typescript: 5.3.3 vitest: 0.32.2 transitivePeerDependencies: - '@edge-runtime/vm' @@ -972,7 +1025,7 @@ packages: '@netlify/functions': 1.6.0 react: 18.2.0 optionalDependencies: - typescript: 5.1.6 + typescript: 5.3.3 vitest: 0.32.2(happy-dom@9.20.3) transitivePeerDependencies: - '@edge-runtime/vm' @@ -3647,13 +3700,13 @@ packages: '@types/node': 20.4.9 chalk: 4.1.2 cosmiconfig: 8.2.0 - cosmiconfig-typescript-loader: 4.3.0(@types/node@20.4.9)(cosmiconfig@8.2.0)(ts-node@10.9.1)(typescript@5.1.6) + cosmiconfig-typescript-loader: 4.3.0(@types/node@20.4.9)(cosmiconfig@8.2.0)(ts-node@10.9.1)(typescript@5.3.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 ts-node: 10.9.1(@types/node@20.4.9)(typescript@5.1.6) - typescript: 5.1.6 + typescript: 5.3.3 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -3936,6 +3989,15 @@ packages: resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} dev: false + /@esbuild/aix-ppc64@0.19.10: + resolution: {integrity: sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm64@0.17.19: resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} @@ -3953,6 +4015,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-arm64@0.19.10: + resolution: {integrity: sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-arm@0.17.19: resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} engines: {node: '>=12'} @@ -3970,6 +4041,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-arm@0.19.10: + resolution: {integrity: sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/android-x64@0.17.19: resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} engines: {node: '>=12'} @@ -3987,6 +4067,15 @@ packages: requiresBuild: true optional: true + /@esbuild/android-x64@0.19.10: + resolution: {integrity: sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-arm64@0.17.19: resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} engines: {node: '>=12'} @@ -4004,6 +4093,15 @@ packages: requiresBuild: true optional: true + /@esbuild/darwin-arm64@0.19.10: + resolution: {integrity: sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/darwin-x64@0.17.19: resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} engines: {node: '>=12'} @@ -4021,6 +4119,15 @@ packages: requiresBuild: true optional: true + /@esbuild/darwin-x64@0.19.10: + resolution: {integrity: sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-arm64@0.17.19: resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} engines: {node: '>=12'} @@ -4038,6 +4145,15 @@ packages: requiresBuild: true optional: true + /@esbuild/freebsd-arm64@0.19.10: + resolution: {integrity: sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/freebsd-x64@0.17.19: resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} engines: {node: '>=12'} @@ -4055,6 +4171,15 @@ packages: requiresBuild: true optional: true + /@esbuild/freebsd-x64@0.19.10: + resolution: {integrity: sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm64@0.17.19: resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} engines: {node: '>=12'} @@ -4072,6 +4197,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-arm64@0.19.10: + resolution: {integrity: sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-arm@0.17.19: resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} engines: {node: '>=12'} @@ -4089,6 +4223,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-arm@0.19.10: + resolution: {integrity: sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ia32@0.17.19: resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} engines: {node: '>=12'} @@ -4106,6 +4249,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-ia32@0.19.10: + resolution: {integrity: sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.17.19: resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} engines: {node: '>=12'} @@ -4123,6 +4275,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-loong64@0.19.10: + resolution: {integrity: sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-mips64el@0.17.19: resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} engines: {node: '>=12'} @@ -4140,6 +4301,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-mips64el@0.19.10: + resolution: {integrity: sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-ppc64@0.17.19: resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} engines: {node: '>=12'} @@ -4157,6 +4327,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-ppc64@0.19.10: + resolution: {integrity: sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-riscv64@0.17.19: resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} engines: {node: '>=12'} @@ -4174,6 +4353,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-riscv64@0.19.10: + resolution: {integrity: sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-s390x@0.17.19: resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} engines: {node: '>=12'} @@ -4191,6 +4379,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-s390x@0.19.10: + resolution: {integrity: sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-x64@0.17.19: resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} engines: {node: '>=12'} @@ -4208,6 +4405,15 @@ packages: requiresBuild: true optional: true + /@esbuild/linux-x64@0.19.10: + resolution: {integrity: sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64@0.17.19: resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} engines: {node: '>=12'} @@ -4225,6 +4431,15 @@ packages: requiresBuild: true optional: true + /@esbuild/netbsd-x64@0.19.10: + resolution: {integrity: sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/openbsd-x64@0.17.19: resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} engines: {node: '>=12'} @@ -4242,6 +4457,15 @@ packages: requiresBuild: true optional: true + /@esbuild/openbsd-x64@0.19.10: + resolution: {integrity: sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/sunos-x64@0.17.19: resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} engines: {node: '>=12'} @@ -4259,6 +4483,15 @@ packages: requiresBuild: true optional: true + /@esbuild/sunos-x64@0.19.10: + resolution: {integrity: sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-arm64@0.17.19: resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} engines: {node: '>=12'} @@ -4276,6 +4509,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-arm64@0.19.10: + resolution: {integrity: sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-ia32@0.17.19: resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} engines: {node: '>=12'} @@ -4293,6 +4535,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-ia32@0.19.10: + resolution: {integrity: sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@esbuild/win32-x64@0.17.19: resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} engines: {node: '>=12'} @@ -4310,6 +4561,15 @@ packages: requiresBuild: true optional: true + /@esbuild/win32-x64@0.19.10: + resolution: {integrity: sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@7.32.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4318,7 +4578,23 @@ packages: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: eslint: 7.32.0 - eslint-visitor-keys: 3.4.1 + eslint-visitor-keys: 3.4.3 + + /@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} + requiresBuild: true + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + 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-community/regexpp@4.5.1: resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} @@ -4342,6 +4618,28 @@ packages: transitivePeerDependencies: - supports-color + /@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.6.1 + globals: 13.20.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@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 + /@fal-works/esbuild-plugin-global-externals@2.1.2: resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} dev: true @@ -4480,7 +4778,7 @@ packages: dependencies: tslib: 2.6.0 - /@formatjs/intl@2.9.0(typescript@5.1.6): + /@formatjs/intl@2.9.0(typescript@5.3.3): resolution: {integrity: sha512-Ym0trUoC/VO6wQu4YHa0H1VR2tEixFRmwZgADkDLm7nD+vv1Ob+/88mUAoT0pwvirFqYKgUKEwp1tFepqyqvVA==} peerDependencies: typescript: ^4.7 || 5 @@ -4495,7 +4793,7 @@ packages: '@formatjs/intl-listformat': 7.4.0 intl-messageformat: 10.5.0 tslib: 2.6.0 - typescript: 5.1.6 + typescript: 5.3.3 dev: false /@formatjs/ts-transformer@3.13.3: @@ -4512,7 +4810,7 @@ packages: chalk: 4.1.2 json-stable-stringify: 1.0.2 tslib: 2.6.0 - typescript: 5.1.6 + typescript: 5.3.3 dev: true /@gar/promisify@1.1.3: @@ -5401,6 +5699,17 @@ packages: react-hook-form: 7.45.1(react@18.2.0) dev: false + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + /@humanwhocodes/config-array@0.5.0: resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} engines: {node: '>=10.10.0'} @@ -5412,6 +5721,11 @@ packages: transitivePeerDependencies: - supports-color + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + /@humanwhocodes/momoa@2.0.4: resolution: {integrity: sha512-RE815I4arJFtt+FVeU1Tgp9/Xvecacji8w/V6XtXsWWH/wz/eNkNbhb+ny/+PlVZjV0rxQpRSQKNKE3lcktHEA==} engines: {node: '>=10.10.0'} @@ -5421,6 +5735,10 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} requiresBuild: true + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + dev: true + /@iarna/toml@2.2.5: resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} dev: false @@ -5648,6 +5966,13 @@ packages: '@sinclair/typebox': 0.25.24 dev: true + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + /@jest/source-map@28.1.2: resolution: {integrity: sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -6163,8 +6488,8 @@ packages: strip-ansi: 7.1.0 supports-color: 9.4.0 terminal-link: 3.0.0 - ts-node: 10.9.1(@types/node@20.4.9)(typescript@5.1.6) - typescript: 5.1.6 + ts-node: 10.9.1(@types/node@20.4.9)(typescript@5.3.3) + typescript: 5.3.3 uuid: 9.0.0 yargs: 17.7.2 transitivePeerDependencies: @@ -7932,12 +8257,116 @@ packages: picomatch: 2.3.1 dev: true - /@samverschueren/stream-to-observable@0.3.1(rxjs@6.6.7): - resolution: {integrity: sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==} - engines: {node: '>=6'} - peerDependencies: - rxjs: '*' - zen-observable: '*' + /@rollup/rollup-android-arm-eabi@4.9.1: + resolution: {integrity: sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.9.1: + resolution: {integrity: sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.9.1: + resolution: {integrity: sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.9.1: + resolution: {integrity: sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.9.1: + resolution: {integrity: sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.9.1: + resolution: {integrity: sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.9.1: + resolution: {integrity: sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.9.1: + resolution: {integrity: sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.9.1: + resolution: {integrity: sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.9.1: + resolution: {integrity: sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.9.1: + resolution: {integrity: sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.9.1: + resolution: {integrity: sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.9.1: + resolution: {integrity: sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@samverschueren/stream-to-observable@0.3.1(rxjs@6.6.7): + resolution: {integrity: sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==} + engines: {node: '>=6'} + peerDependencies: + rxjs: '*' + zen-observable: '*' peerDependenciesMeta: rxjs: optional: true @@ -7969,6 +8398,10 @@ packages: 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'} @@ -9764,7 +10197,6 @@ packages: resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} dependencies: '@types/lodash': 4.14.195 - dev: true /@types/lodash@4.14.195: resolution: {integrity: sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==} @@ -10202,7 +10634,7 @@ packages: grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.5.3 + semver: 7.5.4 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: @@ -10237,6 +10669,65 @@ packages: transitivePeerDependencies: - supports-color + /@typescript-eslint/eslint-plugin@5.60.1(@typescript-eslint/parser@5.60.1)(eslint@7.32.0)(typescript@5.3.3): + resolution: {integrity: sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + requiresBuild: true + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.5.1 + '@typescript-eslint/parser': 5.60.1(eslint@7.32.0)(typescript@5.1.6) + '@typescript-eslint/scope-manager': 5.60.1 + '@typescript-eslint/type-utils': 5.60.1(eslint@7.32.0)(typescript@5.3.3) + '@typescript-eslint/utils': 5.60.1(eslint@7.32.0)(typescript@5.3.3) + debug: 4.3.4 + eslint: 7.32.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 + semver: 7.5.4 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + + /@typescript-eslint/eslint-plugin@5.60.1(@typescript-eslint/parser@5.60.1)(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + requiresBuild: true + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.5.1 + '@typescript-eslint/parser': 5.60.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 5.60.1 + '@typescript-eslint/type-utils': 5.60.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/utils': 5.60.1(eslint@8.56.0)(typescript@5.3.3) + debug: 4.3.4 + eslint: 8.56.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 + semver: 7.5.4 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/eslint-plugin@6.0.0(@typescript-eslint/parser@6.0.0)(eslint@7.32.0)(typescript@5.1.6): resolution: {integrity: sha512-xuv6ghKGoiq856Bww/yVYnXGsKa588kY3M0XK7uUW/3fJNNULKRfZfSBkMTSpqGG/8ZCXCadfh8G/z/B4aqS/A==} engines: {node: ^16.0.0 || >=18.0.0} @@ -10309,6 +10800,27 @@ packages: transitivePeerDependencies: - supports-color + /@typescript-eslint/parser@5.60.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + requiresBuild: true + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.60.1 + '@typescript-eslint/types': 5.60.1 + '@typescript-eslint/typescript-estree': 5.60.1(typescript@5.3.3) + debug: 4.3.4 + eslint: 8.56.0 + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/parser@6.0.0(eslint@7.32.0)(typescript@5.1.6): resolution: {integrity: sha512-TNaufYSPrr1U8n+3xN+Yp9g31vQDJqhXzzPSHfQDLcaO4tU+mCfODPxCwf4H530zo7aUBE3QIdxCXamEnG04Tg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -10387,6 +10899,49 @@ packages: transitivePeerDependencies: - supports-color + /@typescript-eslint/type-utils@5.60.1(eslint@7.32.0)(typescript@5.3.3): + resolution: {integrity: sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + requiresBuild: true + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.60.1(typescript@5.3.3) + '@typescript-eslint/utils': 5.60.1(eslint@7.32.0)(typescript@5.3.3) + debug: 4.3.4 + eslint: 7.32.0 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + + /@typescript-eslint/type-utils@5.60.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + requiresBuild: true + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.60.1(typescript@5.3.3) + '@typescript-eslint/utils': 5.60.1(eslint@8.56.0)(typescript@5.3.3) + debug: 4.3.4 + eslint: 8.56.0 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/type-utils@6.0.0(eslint@7.32.0)(typescript@5.1.6): resolution: {integrity: sha512-ah6LJvLgkoZ/pyJ9GAdFkzeuMZ8goV6BH7eC9FPmojrnX9yNCIsfjB+zYcnex28YO3RFvBkV6rMV6WpIqkPvoQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -10443,7 +10998,7 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@5.60.1(supports-color@9.4.0)(typescript@5.1.6): + /@typescript-eslint/typescript-estree@5.60.1(supports-color@9.4.0)(typescript@5.3.3): resolution: {integrity: sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} requiresBuild: true @@ -10459,8 +11014,8 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.1.6) - typescript: 5.1.6 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: false @@ -10508,6 +11063,27 @@ packages: transitivePeerDependencies: - supports-color + /@typescript-eslint/typescript-estree@5.60.1(typescript@5.3.3): + resolution: {integrity: sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + requiresBuild: true + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.60.1 + '@typescript-eslint/visitor-keys': 5.60.1 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + /@typescript-eslint/typescript-estree@6.0.0(typescript@5.1.6): resolution: {integrity: sha512-2zq4O7P6YCQADfmJ5OTDQTP3ktajnXIRrYAtHM9ofto/CJZV3QfJ89GEaM2BNGeSr1KgmBuLhEkz5FBkS2RQhQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -10570,6 +11146,49 @@ packages: - supports-color - typescript + /@typescript-eslint/utils@5.60.1(eslint@7.32.0)(typescript@5.3.3): + resolution: {integrity: sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + requiresBuild: true + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@7.32.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.60.1 + '@typescript-eslint/types': 5.60.1 + '@typescript-eslint/typescript-estree': 5.60.1(typescript@5.3.3) + eslint: 7.32.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + optional: true + + /@typescript-eslint/utils@5.60.1(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + requiresBuild: true + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.60.1 + '@typescript-eslint/types': 5.60.1 + '@typescript-eslint/typescript-estree': 5.60.1(typescript@5.3.3) + eslint: 8.56.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@typescript-eslint/utils@6.0.0(eslint@7.32.0)(typescript@5.1.6): resolution: {integrity: sha512-SOr6l4NB6HE4H/ktz0JVVWNXqCJTOo/mHnvIte1ZhBQ0Cvd04x5uKZa3zT6tiodL06zf5xxdK8COiDvPnQ27JQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -10604,7 +11223,7 @@ packages: requiresBuild: true dependencies: '@typescript-eslint/types': 5.60.1 - eslint-visitor-keys: 3.4.1 + eslint-visitor-keys: 3.4.3 /@typescript-eslint/visitor-keys@6.0.0: resolution: {integrity: sha512-cvJ63l8c0yXdeT5POHpL0Q1cZoRcmRKFCtSjNGJxPkcP571EfZMcNbzWAc7oK3D1dRzm/V5EwtkANTZxqvuuUA==} @@ -10614,6 +11233,10 @@ packages: eslint-visitor-keys: 3.4.1 dev: true + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + /@vercel/nft@0.22.6: resolution: {integrity: sha512-gTsFnnT4mGxodr4AUlW3/urY+8JKKB452LwF3m477RFUJTAaDmcz2JqFuInzvdybYIeyIv1sSONEJxsxnbQ5JQ==} engines: {node: '>=14'} @@ -10719,6 +11342,14 @@ packages: chai: 4.3.7 dev: true + /@vitest/expect@1.1.0: + resolution: {integrity: sha512-9IE2WWkcJo2BR9eqtY5MIo3TPmS50Pnwpm66A6neb2hvk/QSLfPXBz2qdiwUOQkwyFuuXEUj5380CbwfzW4+/w==} + dependencies: + '@vitest/spy': 1.1.0 + '@vitest/utils': 1.1.0 + chai: 4.3.10 + dev: true + /@vitest/runner@0.32.2: resolution: {integrity: sha512-06vEL0C1pomOEktGoLjzZw+1Fb+7RBRhmw/06WkDrd1akkT9i12su0ku+R/0QM69dfkIL/rAIDTG+CSuQVDcKw==} requiresBuild: true @@ -10736,6 +11367,14 @@ packages: pathe: 1.1.1 dev: true + /@vitest/runner@1.1.0: + resolution: {integrity: sha512-zdNLJ00pm5z/uhbWF6aeIJCGMSyTyWImy3Fcp9piRGvueERFlQFbUwCpzVce79OLm2UHk9iwaMSOaU9jVHgNVw==} + dependencies: + '@vitest/utils': 1.1.0 + p-limit: 5.0.0 + pathe: 1.1.1 + dev: true + /@vitest/snapshot@0.32.2: resolution: {integrity: sha512-JwhpeH/PPc7GJX38vEfCy9LtRzf9F4er7i4OsAJyV7sjPwjj+AIR8cUgpMTWK4S3TiamzopcTyLsZDMuldoi5A==} requiresBuild: true @@ -10752,6 +11391,14 @@ packages: pretty-format: 29.5.0 dev: true + /@vitest/snapshot@1.1.0: + resolution: {integrity: sha512-5O/wyZg09V5qmNmAlUgCBqflvn2ylgsWJRRuPrnHEfDNT6tQpQ8O1isNGgo+VxofISHqz961SG3iVvt3SPK/QQ==} + dependencies: + magic-string: 0.30.5 + pathe: 1.1.1 + pretty-format: 29.7.0 + dev: true + /@vitest/spy@0.32.2: resolution: {integrity: sha512-Q/ZNILJ4ca/VzQbRM8ur3Si5Sardsh1HofatG9wsJY1RfEaw0XKP8IVax2lI1qnrk9YPuG9LA2LkZ0EI/3d4ug==} requiresBuild: true @@ -10764,6 +11411,12 @@ packages: tinyspy: 2.1.1 dev: true + /@vitest/spy@1.1.0: + resolution: {integrity: sha512-sNOVSU/GE+7+P76qYo+VXdXhXffzWZcYIPQfmkiRxaNCSPiLANvQx5Mx6ZURJ/ndtEkUJEpvKLXqAYTKEY+lTg==} + dependencies: + tinyspy: 2.2.0 + dev: true + /@vitest/ui@0.32.2(vitest@0.32.2): resolution: {integrity: sha512-N5JKftnB8qzKFtpQC5OcUGxYTLo6wiB/95Lgyk6MF52t74Y7BJOWbf6EFYhXqt9J0MSbhOR2kapq+WKKUGDW0g==} requiresBuild: true @@ -10797,6 +11450,14 @@ packages: pretty-format: 29.5.0 dev: true + /@vitest/utils@1.1.0: + resolution: {integrity: sha512-z+s510fKmYz4Y41XhNs3vcuFTFhcij2YF7F8VQfMEYAAUfqQh0Zfg7+w9xdgFGhPf3tX3TicAe+8BDITk6ampQ==} + dependencies: + diff-sequences: 29.6.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + /@webassemblyjs/ast@1.11.6: resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} dependencies: @@ -11422,6 +12083,15 @@ packages: dependencies: acorn: 7.4.1 + /acorn-jsx@5.3.2(acorn@8.11.2): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + requiresBuild: true + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.2 + dev: true + /acorn-loose@8.3.0: resolution: {integrity: sha512-75lAs9H19ldmW+fAbyqHdjgdCrz0pWGXKmnqFoh8PyVd1L2RIb4RzYrSjmopeqv3E1G3/Pimu6GgLlrGbrkF7w==} engines: {node: '>=0.4.0'} @@ -11438,6 +12108,11 @@ packages: engines: {node: '>=0.4.0'} requiresBuild: true + /acorn-walk@8.3.1: + resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} + engines: {node: '>=0.4.0'} + dev: true + /acorn@6.4.2: resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} engines: {node: '>=0.4.0'} @@ -11449,6 +12124,11 @@ packages: hasBin: true requiresBuild: true + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + /acorn@8.9.0: resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} engines: {node: '>=0.4.0'} @@ -13083,6 +13763,19 @@ packages: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} dev: false + /chai@4.3.10: + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.6 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + /chai@4.3.7: resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} engines: {node: '>=4'} @@ -13239,6 +13932,12 @@ packages: resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} requiresBuild: true + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: true + /check-more-types@2.24.0: resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} engines: {node: '>= 0.8.0'} @@ -13255,7 +13954,7 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 /chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -13928,7 +14627,7 @@ packages: object-assign: 4.1.1 vary: 1.1.2 - /cosmiconfig-typescript-loader@4.3.0(@types/node@20.4.9)(cosmiconfig@8.2.0)(ts-node@10.9.1)(typescript@5.1.6): + /cosmiconfig-typescript-loader@4.3.0(@types/node@20.4.9)(cosmiconfig@8.2.0)(ts-node@10.9.1)(typescript@5.3.3): resolution: {integrity: sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==} engines: {node: '>=12', npm: '>=6'} peerDependencies: @@ -13940,7 +14639,7 @@ packages: '@types/node': 20.4.9 cosmiconfig: 8.2.0 ts-node: 10.9.1(@types/node@20.4.9)(typescript@5.1.6) - typescript: 5.1.6 + typescript: 5.3.3 dev: true /cosmiconfig@6.0.0: @@ -15493,10 +16192,10 @@ packages: resolution: {integrity: sha512-Mq8egjnW2NSCkzEb/Az15/JnBI/Ryyl6Po0Y+0mABTFvOS6DAyUGRZqz1nyhu4QJmWWe0zaGs/ITIBeWkvCkGw==} engines: {node: ^14.14.0 || >=16.0.0} dependencies: - '@typescript-eslint/typescript-estree': 5.60.1(typescript@5.1.6) + '@typescript-eslint/typescript-estree': 5.60.1(typescript@5.3.3) ast-module-types: 5.0.0 node-source-walk: 6.0.2 - typescript: 5.1.6 + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: false @@ -15505,10 +16204,10 @@ packages: resolution: {integrity: sha512-Mq8egjnW2NSCkzEb/Az15/JnBI/Ryyl6Po0Y+0mABTFvOS6DAyUGRZqz1nyhu4QJmWWe0zaGs/ITIBeWkvCkGw==} engines: {node: ^14.14.0 || >=16.0.0} dependencies: - '@typescript-eslint/typescript-estree': 5.60.1(supports-color@9.4.0)(typescript@5.1.6) + '@typescript-eslint/typescript-estree': 5.60.1(supports-color@9.4.0)(typescript@5.3.3) ast-module-types: 5.0.0 node-source-walk: 6.0.2 - typescript: 5.1.6 + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: false @@ -15559,6 +16258,11 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} requiresBuild: true + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -16238,6 +16942,37 @@ packages: '@esbuild/win32-ia32': 0.18.20 '@esbuild/win32-x64': 0.18.20 + /esbuild@0.19.10: + resolution: {integrity: sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.10 + '@esbuild/android-arm': 0.19.10 + '@esbuild/android-arm64': 0.19.10 + '@esbuild/android-x64': 0.19.10 + '@esbuild/darwin-arm64': 0.19.10 + '@esbuild/darwin-x64': 0.19.10 + '@esbuild/freebsd-arm64': 0.19.10 + '@esbuild/freebsd-x64': 0.19.10 + '@esbuild/linux-arm': 0.19.10 + '@esbuild/linux-arm64': 0.19.10 + '@esbuild/linux-ia32': 0.19.10 + '@esbuild/linux-loong64': 0.19.10 + '@esbuild/linux-mips64el': 0.19.10 + '@esbuild/linux-ppc64': 0.19.10 + '@esbuild/linux-riscv64': 0.19.10 + '@esbuild/linux-s390x': 0.19.10 + '@esbuild/linux-x64': 0.19.10 + '@esbuild/netbsd-x64': 0.19.10 + '@esbuild/openbsd-x64': 0.19.10 + '@esbuild/sunos-x64': 0.19.10 + '@esbuild/win32-arm64': 0.19.10 + '@esbuild/win32-ia32': 0.19.10 + '@esbuild/win32-x64': 0.19.10 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -16288,6 +17023,16 @@ packages: dependencies: eslint: 7.32.0 + /eslint-config-prettier@8.8.0(eslint@8.56.0): + resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} + hasBin: true + requiresBuild: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.56.0 + dev: true + /eslint-config-react-app@6.0.0(@typescript-eslint/eslint-plugin@5.60.1)(@typescript-eslint/parser@5.60.1)(babel-eslint@10.1.0)(eslint-plugin-flowtype@5.10.0)(eslint-plugin-import@2.27.5)(eslint-plugin-jsx-a11y@6.7.1)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.32.2)(eslint@7.32.0)(typescript@4.9.5): resolution: {integrity: sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==} engines: {node: ^10.12.0 || >=12.0.0} @@ -16399,6 +17144,35 @@ packages: transitivePeerDependencies: - supports-color + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-node@0.3.7)(eslint@8.56.0): + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.60.1(eslint@8.56.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.7 + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-flowtype@5.10.0(eslint@7.32.0): resolution: {integrity: sha512-vcz32f+7TP+kvTUyMXZmCnNujBQZDNmcqPImw8b9PZ+16w1Qdm6ryRuYZYVaG9xRqqmAPr2Cs9FAX5gN+x/bjw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -16464,6 +17238,40 @@ packages: - eslint-import-resolver-webpack - supports-color + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.60.1)(eslint@8.56.0): + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + requiresBuild: true + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.60.1(eslint@8.56.0)(typescript@5.3.3) + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.60.1)(eslint-import-resolver-node@0.3.7)(eslint@8.56.0) + has: 1.0.3 + is-core-module: 2.12.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.6 + resolve: 1.22.2 + semver: 6.3.1 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + /eslint-plugin-jsx-a11y@6.7.1(eslint@7.32.0): resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} @@ -16502,6 +17310,16 @@ packages: dependencies: eslint: 7.32.0 + /eslint-plugin-promise@6.1.1(eslint@8.56.0): + resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + requiresBuild: true + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + eslint: 8.56.0 + dev: true + /eslint-plugin-react-hooks@4.6.0(eslint@7.32.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} @@ -16511,6 +17329,16 @@ packages: dependencies: eslint: 7.32.0 + /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + requiresBuild: true + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + dependencies: + eslint: 8.56.0 + dev: true + /eslint-plugin-react@7.32.2(eslint@7.32.0): resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} engines: {node: '>=4'} @@ -16535,6 +17363,31 @@ packages: semver: 6.3.1 string.prototype.matchall: 4.0.8 + /eslint-plugin-react@7.32.2(eslint@8.56.0): + resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} + engines: {node: '>=4'} + requiresBuild: true + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 + array.prototype.tosorted: 1.1.1 + doctrine: 2.1.0 + eslint: 8.56.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.4 + minimatch: 3.1.2 + object.entries: 1.1.6 + object.fromentries: 2.0.6 + object.hasown: 1.1.2 + object.values: 1.1.6 + prop-types: 15.8.1 + resolve: 2.0.0-next.4 + semver: 6.3.1 + string.prototype.matchall: 4.0.8 + dev: true + /eslint-plugin-simple-import-sort@10.0.0(eslint@7.32.0): resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} requiresBuild: true @@ -16543,6 +17396,15 @@ packages: dependencies: eslint: 7.32.0 + /eslint-plugin-simple-import-sort@10.0.0(eslint@8.56.0): + resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} + requiresBuild: true + peerDependencies: + eslint: '>=5.0.0' + dependencies: + eslint: 8.56.0 + dev: true + /eslint-plugin-storybook@0.6.12(eslint@7.32.0)(typescript@5.1.6): resolution: {integrity: sha512-XbIvrq6hNVG6rpdBr+eBw63QhOMLpZneQVSooEDow8aQCWGCk/5vqtap1yxpVydNfSxi3S/3mBBRLQqKUqQRww==} engines: {node: 12.x || 14.x || >= 16} @@ -16567,7 +17429,7 @@ packages: tailwindcss: ^3.3.2 dependencies: fast-glob: 3.2.12 - postcss: 8.4.24 + postcss: 8.4.32 tailwindcss: 3.3.2(ts-node@10.9.1) /eslint-scope@5.1.1: @@ -16578,6 +17440,14 @@ packages: esrecurse: 4.3.0 estraverse: 4.3.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@2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} engines: {node: '>=6'} @@ -16599,6 +17469,11 @@ packages: resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} requiresBuild: true + dev: true + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} /eslint-webpack-plugin@2.7.0(eslint@7.32.0)(webpack@5.88.1): resolution: {integrity: sha512-bNaVVUvU4srexGhVcayn/F4pJAz19CWBkKoMx7aSQ4wtTbZQCnG5O9LHCE42mM+JSKOUp7n6vd5CIwzj7lOVGA==} @@ -16620,50 +17495,97 @@ packages: resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} engines: {node: ^10.12.0 || >=12.0.0} hasBin: true - requiresBuild: true + requiresBuild: true + dependencies: + '@babel/code-frame': 7.12.11 + '@eslint/eslintrc': 0.4.3 + '@humanwhocodes/config-array': 0.5.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + enquirer: 2.3.6 + escape-string-regexp: 4.0.0 + eslint-scope: 5.1.1 + eslint-utils: 2.1.0 + eslint-visitor-keys: 2.1.0 + espree: 7.3.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 5.1.2 + globals: 13.20.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + js-yaml: 3.14.1 + 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.3 + progress: 2.0.3 + regexpp: 3.2.0 + semver: 7.5.4 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + table: 6.8.1 + text-table: 0.2.0 + v8-compile-cache: 2.3.0 + transitivePeerDependencies: + - supports-color + + /eslint@8.56.0: + resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true dependencies: - '@babel/code-frame': 7.12.11 - '@eslint/eslintrc': 0.4.3 - '@humanwhocodes/config-array': 0.5.0 + '@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 - enquirer: 2.3.6 escape-string-regexp: 4.0.0 - eslint-scope: 5.1.1 - eslint-utils: 2.1.0 - eslint-visitor-keys: 2.1.0 - espree: 7.3.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 - functional-red-black-tree: 1.0.1 - glob-parent: 5.1.2 + find-up: 5.0.0 + glob-parent: 6.0.2 globals: 13.20.0 - ignore: 4.0.6 - import-fresh: 3.3.0 + graphemer: 1.4.0 + ignore: 5.2.4 imurmurhash: 0.1.4 is-glob: 4.0.3 - js-yaml: 3.14.1 + 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.3 - progress: 2.0.3 - regexpp: 3.2.0 - semver: 7.5.4 strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - table: 6.8.1 text-table: 0.2.0 - v8-compile-cache: 2.3.0 transitivePeerDependencies: - supports-color + dev: true /espree@7.3.1: resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} @@ -16674,6 +17596,15 @@ packages: acorn-jsx: 5.3.2(acorn@7.4.1) eslint-visitor-keys: 1.3.0 + /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'} @@ -16812,6 +17743,21 @@ packages: strip-final-newline: 3.0.0 dev: false + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + /executable@4.1.1: resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} engines: {node: '>=4'} @@ -17793,6 +18739,14 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true + dev: false + optional: true + + /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 optional: true /function-bind@1.1.1: @@ -18745,6 +19699,10 @@ packages: resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} requiresBuild: true + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: true + /get-intrinsic@1.2.1: resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} requiresBuild: true @@ -18815,6 +19773,11 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} + /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'} @@ -19936,6 +20899,11 @@ packages: engines: {node: '>=12.20.0'} dev: false + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + /humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} requiresBuild: true @@ -20671,7 +21639,6 @@ packages: /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} @@ -21131,7 +22098,7 @@ packages: micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true /jest-haste-map@29.5.0: @@ -21150,7 +22117,7 @@ packages: micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true /jest-junit@14.0.1: @@ -22050,6 +23017,14 @@ packages: engines: {node: '>=14'} requiresBuild: 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 + /localforage@1.10.0: resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} dependencies: @@ -22300,6 +23275,12 @@ packages: dependencies: get-func-name: 2.0.0 + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: true + /lower-case-first@2.0.2: resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} dependencies: @@ -22387,6 +23368,13 @@ packages: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + /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@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -23198,7 +24186,6 @@ packages: /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - dev: false /mimic-response@1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} @@ -23375,11 +24362,20 @@ packages: resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} requiresBuild: true dependencies: - acorn: 8.9.0 + acorn: 8.11.2 pathe: 1.1.1 pkg-types: 1.0.3 ufo: 1.1.2 + /mlly@1.4.2: + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + dependencies: + acorn: 8.11.2 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.3.2 + dev: true + /module-definition@5.0.1: resolution: {integrity: sha512-kvw3B4G19IXk+BOXnYq/D/VeO9qfHaapMeuS7w7sNUqmGaA6hywdFHMi+VWeR9wUScXM7XjoryTffCZ5B0/8IA==} engines: {node: '>=14'} @@ -23522,6 +24518,11 @@ packages: hasBin: true requiresBuild: true + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + /nanoid@4.0.2: resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} engines: {node: ^14 || ^16 || >=18} @@ -24008,7 +25009,6 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 - dev: false /npmlog@5.0.1: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} @@ -24250,7 +25250,6 @@ packages: engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 - dev: false /open@7.4.2: resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} @@ -24427,6 +25426,13 @@ packages: dependencies: yocto-queue: 1.0.0 + /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'} @@ -24727,7 +25733,6 @@ packages: /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - dev: false /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -25126,25 +26131,25 @@ packages: resolve: 1.22.2 dev: true - /postcss-import@15.1.0(postcss@8.4.28): + /postcss-import@15.1.0(postcss@8.4.32): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.28 + postcss: 8.4.32 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.2 - /postcss-js@4.0.1(postcss@8.4.28): + /postcss-js@4.0.1(postcss@8.4.32): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.28 + postcss: 8.4.32 /postcss-load-config@4.0.1(postcss@8.4.24)(ts-node@10.9.1): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} @@ -25164,7 +26169,7 @@ packages: yaml: 2.3.1 dev: true - /postcss-load-config@4.0.1(postcss@8.4.28)(ts-node@10.9.1): + /postcss-load-config@4.0.1(postcss@8.4.32)(ts-node@10.9.1): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} peerDependencies: @@ -25177,7 +26182,7 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - postcss: 8.4.28 + postcss: 8.4.32 ts-node: 10.9.1(@types/node@20.4.9)(typescript@5.1.6) yaml: 2.3.1 @@ -25378,13 +26383,13 @@ packages: icss-utils: 5.1.0(postcss@8.4.28) postcss: 8.4.28 - /postcss-nested@6.0.1(postcss@8.4.28): + /postcss-nested@6.0.1(postcss@8.4.32): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.28 + postcss: 8.4.32 postcss-selector-parser: 6.0.13 /postcss-normalize-charset@5.1.0(postcss@8.4.28): @@ -25726,6 +26731,14 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 + /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 + /prebuild-install@7.1.1: resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} engines: {node: '>=10'} @@ -25846,6 +26859,15 @@ packages: react-is: 18.2.0 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-hrtime@1.0.3: resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} engines: {node: '>= 0.8'} @@ -26528,7 +27550,7 @@ packages: react: 18.2.0 dev: true - /react-intl@6.4.4(react@18.2.0)(typescript@5.1.6): + /react-intl@6.4.4(react@18.2.0)(typescript@5.3.3): resolution: {integrity: sha512-/C9Sl/5//ohfkNG6AWlJuf4BhTXsbzyk93K62A4zRhSPANyOGpKZ+fWhN+TLfFd5YjDUHy+exU/09y0w1bO4Xw==} peerDependencies: react: ^16.6.0 || 17 || 18 @@ -26539,7 +27561,7 @@ packages: dependencies: '@formatjs/ecma402-abstract': 1.17.0 '@formatjs/icu-messageformat-parser': 2.6.0 - '@formatjs/intl': 2.9.0(typescript@5.1.6) + '@formatjs/intl': 2.9.0(typescript@5.3.3) '@formatjs/intl-displaynames': 6.5.0 '@formatjs/intl-listformat': 7.4.0 '@types/hoist-non-react-statics': 3.3.1 @@ -26548,7 +27570,7 @@ packages: intl-messageformat: 10.5.0 react: 18.2.0 tslib: 2.6.0 - typescript: 5.1.6 + typescript: 5.3.3 dev: false /react-is@16.13.1: @@ -27683,7 +28705,7 @@ packages: engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true /rollup@3.28.1: @@ -27692,7 +28714,28 @@ packages: hasBin: true requiresBuild: true optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 + + /rollup@4.9.1: + resolution: {integrity: sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.9.1 + '@rollup/rollup-android-arm64': 4.9.1 + '@rollup/rollup-darwin-arm64': 4.9.1 + '@rollup/rollup-darwin-x64': 4.9.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.9.1 + '@rollup/rollup-linux-arm64-gnu': 4.9.1 + '@rollup/rollup-linux-arm64-musl': 4.9.1 + '@rollup/rollup-linux-riscv64-gnu': 4.9.1 + '@rollup/rollup-linux-x64-gnu': 4.9.1 + '@rollup/rollup-linux-x64-musl': 4.9.1 + '@rollup/rollup-win32-arm64-msvc': 4.9.1 + '@rollup/rollup-win32-ia32-msvc': 4.9.1 + '@rollup/rollup-win32-x64-msvc': 4.9.1 + fsevents: 2.3.3 + dev: true /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} @@ -28214,6 +29257,11 @@ packages: resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} engines: {node: '>=14'} + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + /signedsource@1.0.0: resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} @@ -28811,6 +29859,10 @@ packages: resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} requiresBuild: true + /std-env@3.6.0: + resolution: {integrity: sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==} + dev: true + /stdin-discarder@0.1.0: resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -29105,7 +30157,6 @@ packages: /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - dev: false /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} @@ -29127,7 +30178,13 @@ packages: resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} requiresBuild: true dependencies: - acorn: 8.9.0 + acorn: 8.11.2 + + /strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + dependencies: + acorn: 8.11.2 + dev: true /strip-outer@1.0.1: resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} @@ -29349,11 +30406,11 @@ packages: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.28 - postcss-import: 15.1.0(postcss@8.4.28) - postcss-js: 4.0.1(postcss@8.4.28) - postcss-load-config: 4.0.1(postcss@8.4.28)(ts-node@10.9.1) - postcss-nested: 6.0.1(postcss@8.4.28) + postcss: 8.4.32 + postcss-import: 15.1.0(postcss@8.4.32) + postcss-js: 4.0.1(postcss@8.4.32) + postcss-load-config: 4.0.1(postcss@8.4.32)(ts-node@10.9.1) + postcss-nested: 6.0.1(postcss@8.4.32) postcss-selector-parser: 6.0.13 postcss-value-parser: 4.2.0 resolve: 1.22.2 @@ -29655,6 +30712,10 @@ packages: resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} requiresBuild: true + /tinybench@2.5.1: + resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} + dev: true + /tinycolor2@1.6.0: resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} dev: false @@ -29669,11 +30730,21 @@ packages: engines: {node: '>=14.0.0'} dev: true + /tinypool@0.8.1: + resolution: {integrity: sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==} + engines: {node: '>=14.0.0'} + dev: true + /tinyspy@2.1.1: resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==} engines: {node: '>=14.0.0'} requiresBuild: true + /tinyspy@2.2.0: + resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} + engines: {node: '>=14.0.0'} + dev: true + /title-case@3.0.3: resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} dependencies: @@ -29913,7 +30984,7 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 20.4.9 - acorn: 8.9.0 + acorn: 8.11.2 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 @@ -29923,6 +30994,37 @@ packages: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + /ts-node@10.9.1(@types/node@20.4.9)(typescript@5.3.3): + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.4.9 + acorn: 8.11.2 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.3.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: false + /tsconfig-paths@3.14.2: resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} requiresBuild: true @@ -30006,6 +31108,16 @@ packages: tslib: 1.14.1 typescript: 5.1.6 + /tsutils@3.21.0(typescript@5.3.3): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + requiresBuild: true + 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: 5.3.3 + /tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} requiresBuild: true @@ -30210,6 +31322,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + /ua-parser-js@1.0.35: resolution: {integrity: sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==} @@ -30217,6 +31334,10 @@ packages: resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} requiresBuild: 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'} @@ -30932,6 +32053,27 @@ packages: - terser dev: true + /vite-node@1.1.0(@types/node@20.4.9): + resolution: {integrity: sha512-jV48DDUxGLEBdHCQvxL1mEh7+naVy+nhUUUaPAZLd3FJgXuxQiewHcfeZebbJ6onDqNGkP4r3MhQ342PRlG81Q==} + 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(@types/node@20.4.9) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /vite-plugin-istanbul@3.0.4: resolution: {integrity: sha512-DJy3cq6yOFbsM3gLQf/3zeuaJNJsfBv5dLFdZdv8sUV30xLtZI+66QeYfHUyP/5vBUYyLA+xNUCSG5uHY6w+5g==} dependencies: @@ -30978,7 +32120,7 @@ packages: postcss: 8.4.24 rollup: 3.25.3 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true /vite@4.4.9(@types/node@20.4.9): @@ -31015,7 +32157,43 @@ packages: postcss: 8.4.28 rollup: 3.28.1 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 + + /vite@5.0.10(@types/node@20.4.9): + 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: + '@types/node': 20.4.9 + esbuild: 0.19.10 + postcss: 8.4.32 + rollup: 4.9.1 + optionalDependencies: + fsevents: 2.3.3 + dev: true /vitest@0.32.2: resolution: {integrity: sha512-hU8GNNuQfwuQmqTLfiKcqEhZY72Zxb7nnN07koCUNmntNxbKQnVbeIS6sqUgR3eXSlbOpit8+/gr1KpqoMgWCQ==} @@ -31147,6 +32325,7 @@ packages: - sugarss - supports-color - terser + dev: false optional: true /vitest@0.32.2(happy-dom@9.20.3): @@ -31281,6 +32460,63 @@ packages: - terser dev: true + /vitest@1.1.0(@types/node@20.4.9): + resolution: {integrity: sha512-oDFiCrw7dd3Jf06HoMtSRARivvyjHJaTxikFxuqJjO76U436PqlVw1uLn7a8OSPrhSfMGVaRakKpA2lePdw79A==} + 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: + '@types/node': 20.4.9 + '@vitest/expect': 1.1.0 + '@vitest/runner': 1.1.0 + '@vitest/snapshot': 1.1.0 + '@vitest/spy': 1.1.0 + '@vitest/utils': 1.1.0 + acorn-walk: 8.3.1 + cac: 6.7.14 + chai: 4.3.10 + debug: 4.3.4 + execa: 8.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(@types/node@20.4.9) + vite-node: 1.1.0(@types/node@20.4.9) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /wait-on@5.3.0: resolution: {integrity: sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==} engines: {node: '>=8.9.0'}