diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 77a4a49b..00000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ -github: Code-Hex diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c3b2dfe3..31d503d9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,52 +1,29 @@ -name: Test +name: CI on: - push: - branches: [main] pull_request: branches: [main] jobs: - build: + ci: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: pnpm/action-setup@v2 - with: - version: 8 - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: current - cache: 'pnpm' - - run: pnpm install --frozen-lockfile - - run: pnpm test + - name: Setup asdf + uses: asdf-vm/actions/setup@v3 + # 2回目以降エラーが出るが問題ない + continue-on-error: true + - name: asdf install + uses: asdf-vm/actions/install@v3 + - name: Install dependencies + run: pnpm install + - name: lint + run: pnpm lint + - name: fmt + run: pnpm prettier:check + - name: test + run: pnpm test env: CI: true - eslint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: pnpm/action-setup@v2 - with: - version: 8 - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: current - cache: 'pnpm' - - run: pnpm install --frozen-lockfile - - run: pnpm lint-fix - - run: pnpm prettier - - name: Auto commit fixed code - id: auto-commit-action - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: Apply auto lint-fix changes - branch: ${{ github.head_ref }} - # See: https://github.com/reviewdog/action-eslint/issues/152 - # - name: eslint - # if: steps.auto-commit-action.outputs.changes_detected == 'false' - # uses: reviewdog/action-eslint@v1 - # with: - # github_token: ${{ secrets.GITHUB_TOKEN }} - # level: warning - # reporter: github-pr-review + - name: generate and type-check + run: | + pnpm generate + pnpm type-check diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml deleted file mode 100644 index 6bbb83f4..00000000 --- a/.github/workflows/issues.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: 'good first issue' -on: [issues] - -jobs: - labels: - runs-on: ubuntu-latest - steps: - - uses: Code-Hex/first-label-interaction@v1.0.2 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - issue-labels: '["good first issue"]' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..5cfa51aa --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,33 @@ +name: release +on: + workflow_dispatch: +jobs: + release: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v3 + - name: Setup asdf + uses: asdf-vm/actions/setup@v3 + # 2回目以降エラーが出るが問題ない + continue-on-error: true + - name: asdf install + uses: asdf-vm/actions/install@v3 + - name: Install dependencies + run: pnpm install + - name: generate and type-check + run: | + pnpm generate + pnpm type-check + - name: prepare release + run: | + sed .gitignore -i -e s/dist//g + VERSION=$(cat package.json | jq -r .version) + git config user.name "actions-user" + git config user.email "action@github.com" + git add .gitignore + git add dist + git commit -m "release ${VERSION}" + git tag -a "v${VERSION}" -m "release ${VERSION}" + git push origin --tags diff --git a/.gitignore b/.gitignore index 7a2da6f5..21fabf61 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,131 @@ -node_modules +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt dist -.npmignore -package-lock.json -.DS_Store -tsconfig.tsbuildinfo -yarn-error.log \ No newline at end of file + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* +.idea diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 00000000..c39c5494 --- /dev/null +++ b/.tool-versions @@ -0,0 +1,2 @@ +nodejs 20.14.0 +pnpm 9.7.1 diff --git a/README.md b/README.md index 13d3d4a4..8f3f9bcc 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,6 @@ [GraphQL code generator](https://github.com/dotansimha/graphql-code-generator) plugin to generate form validation schema from your GraphQL schema. - [x] support [yup](https://github.com/jquense/yup) -- [x] support [zod](https://github.com/colinhacks/zod) -- [x] support [myzod](https://github.com/davidmdm/myzod) ## Quick Start @@ -31,7 +29,6 @@ generates: scalars: ID: string # You can also write the config for this plugin together - schema: yup # or zod ``` It is recommended to write `scalars` config for built-in type `ID`, as in the yaml example shown above. For more information: [#375](https://github.com/Code-Hex/graphql-codegen-typescript-validation-schema/pull/375) @@ -42,24 +39,6 @@ The Q&A for each schema is written in the README in the respective example direc ## Config API Reference -### `schema` - -type: `ValidationSchema` default: `'yup'` - -Specify generete validation schema you want. - -You can specify `yup` or `zod` or `myzod`. - -```yml -generates: - path/to/graphql.ts: - plugins: - - typescript - - typescript-validation-schema - config: - schema: yup -``` - ### `importFrom` type: `string` @@ -176,16 +155,6 @@ config: Email: yup.string().email() ``` -#### zod schema - -```yml -config: - schema: zod - scalarSchemas: - Date: z.date() - Email: z.string().email() -``` - ### `withObjectType` type: `boolean` default: `false` @@ -255,43 +224,6 @@ export function ExampleInputSchema(): yup.SchemaOf { } ``` -#### zod schema - -```yml -generates: - path/to/graphql.ts: - plugins: - - typescript - - typescript-validation-schema - config: - schema: zod - directives: - # Write directives like - # - # directive: - # arg1: schemaApi - # arg2: ["schemaApi2", "Hello $1"] - # - # See more examples in `./tests/directive.spec.ts` - # https://github.com/Code-Hex/graphql-codegen-typescript-validation-schema/blob/main/tests/directive.spec.ts - constraint: - minLength: min - # Replace $1 with specified `startsWith` argument value of the constraint directive - startsWith: ["regex", "/^$1/", "message"] - format: - email: email -``` - -Then generates zod validation schema like below. - -```ts -export function ExampleInputSchema(): z.ZodSchema { - return z.object({ - email: z.string().min(50).email(), - message: z.string().regex(/^Hello/, "message") - }) -} -``` #### other schema @@ -299,7 +231,7 @@ Please see [example](https://github.com/Code-Hex/graphql-codegen-typescript-vali ## Notes -Their is currently a compatibility issue with the client-preset. A workaround for this is to split the generation into two (one for client-preset and one for typescript-validation-schema). +There is currently a compatibility issue with the client-preset. A workaround for this is to split the generation into two (one for client-preset and one for typescript-validation-schema). ```yml generates: @@ -310,4 +242,4 @@ generates: preset: 'client', plugins: ... -``` \ No newline at end of file +``` diff --git a/codegen.yml b/codegen.yml index b35f9fd3..2e66a540 100644 --- a/codegen.yml +++ b/codegen.yml @@ -12,72 +12,8 @@ generates: - ./dist/main/index.js: schema: yup importFrom: ../types - withObjectType: true - directives: - required: - msg: required - # This is example using constraint directive. - # see: https://github.com/confuser/graphql-constraint-directive - constraint: - minLength: min # same as ['min', '$1'] - maxLength: max - startsWith: ['matches', '/^$1/'] - endsWith: ['matches', '/$1$/'] - contains: ['matches', '/$1/'] - notContains: ['matches', '/^((?!$1).)*$/'] - pattern: ['matches', '/$1/'] - format: - # For example, `@constraint(format: "uri")`. this case $1 will be "uri". - # Therefore the generator generates yup schema `.url()` followed by `uri: 'url'` - # If $1 does not match anywhere, the generator will ignore. - uri: url - email: email - uuid: uuid - # yup does not have `ipv4` API. If you want to add this, - # you need to add the logic using `yup.addMethod`. - # see: https://github.com/jquense/yup#addmethodschematype-schema-name-string-method--schema-void - ipv4: ipv4 - min: ['min', '$1 - 1'] - max: ['max', '$1 + 1'] - exclusiveMin: min - exclusiveMax: max - scalars: - ID: string - example/zod/schemas.ts: - plugins: - - ./dist/main/index.js: - schema: zod - importFrom: ../types - withObjectType: true - directives: - # Write directives like - # - # directive: - # arg1: schemaApi - # arg2: ["schemaApi2", "Hello $1"] - # - # See more examples in `./tests/directive.spec.ts` - # https://github.com/Code-Hex/graphql-codegen-typescript-validation-schema/blob/main/tests/directive.spec.ts - constraint: - minLength: min - # Replace $1 with specified `startsWith` argument value of the constraint directive - startsWith: ['regex', '/^$1/', 'message'] - format: - email: email - scalars: - ID: string - example/myzod/schemas.ts: - plugins: - - ./dist/main/index.js: - schema: myzod - importFrom: ../types - withObjectType: true - directives: - constraint: - minLength: min - # Replace $1 with specified `startsWith` argument value of the constraint directive - startsWith: ['pattern', '/^$1/'] - format: - email: email + withObjectType: all scalars: ID: string + lazyRules: + - required_without diff --git a/example/myzod/README.md b/example/myzod/README.md deleted file mode 100644 index b055c323..00000000 --- a/example/myzod/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Tips for myzod schema - -## How to overwrite generated schema? - -Basically, I think [it does not support overwrite schema](https://github.com/davidmdm/myzod/issues/51) in myzod. However, [`and`](https://github.com/davidmdm/myzod#typeand) and [`or`](https://github.com/davidmdm/myzod#typeor) may helps you. - -See also: https://github.com/Code-Hex/graphql-codegen-typescript-validation-schema/issues/25#issuecomment-1086532098 \ No newline at end of file diff --git a/example/myzod/schemas.ts b/example/myzod/schemas.ts deleted file mode 100644 index 1b4cb08e..00000000 --- a/example/myzod/schemas.ts +++ /dev/null @@ -1,126 +0,0 @@ -import * as myzod from 'myzod' -import { Admin, AttributeInput, ButtonComponentType, ComponentInput, DropDownComponentInput, EventArgumentInput, EventInput, EventOptionType, Guest, HttpInput, HttpMethod, LayoutInput, MyType, MyTypeFooArgs, PageInput, PageType, User } from '../types' - -export const definedNonNullAnySchema = myzod.object({}); - -export const ButtonComponentTypeSchema = myzod.enum(ButtonComponentType); - -export const EventOptionTypeSchema = myzod.enum(EventOptionType); - -export const HttpMethodSchema = myzod.enum(HttpMethod); - -export const PageTypeSchema = myzod.enum(PageType); - -export function AdminSchema(): myzod.Type { - return myzod.object({ - __typename: myzod.literal('Admin').optional(), - lastModifiedAt: definedNonNullAnySchema.optional().nullable() - }) -} - -export function AttributeInputSchema(): myzod.Type { - return myzod.object({ - key: myzod.string().optional().nullable(), - val: myzod.string().optional().nullable() - }) -} - -export function ComponentInputSchema(): myzod.Type { - return myzod.object({ - child: myzod.lazy(() => ComponentInputSchema().optional().nullable()), - childrens: myzod.array(myzod.lazy(() => ComponentInputSchema().nullable())).optional().nullable(), - event: myzod.lazy(() => EventInputSchema().optional().nullable()), - name: myzod.string(), - type: ButtonComponentTypeSchema - }) -} - -export function DropDownComponentInputSchema(): myzod.Type { - return myzod.object({ - dropdownComponent: myzod.lazy(() => ComponentInputSchema().optional().nullable()), - getEvent: myzod.lazy(() => EventInputSchema()) - }) -} - -export function EventArgumentInputSchema(): myzod.Type { - return myzod.object({ - name: myzod.string().min(5), - value: myzod.string().pattern(/^foo/) - }) -} - -export function EventInputSchema(): myzod.Type { - return myzod.object({ - arguments: myzod.array(myzod.lazy(() => EventArgumentInputSchema())), - options: myzod.array(EventOptionTypeSchema).optional().nullable() - }) -} - -export function GuestSchema(): myzod.Type { - return myzod.object({ - __typename: myzod.literal('Guest').optional(), - lastLoggedIn: definedNonNullAnySchema.optional().nullable() - }) -} - -export function HttpInputSchema(): myzod.Type { - return myzod.object({ - method: HttpMethodSchema.optional().nullable(), - url: definedNonNullAnySchema - }) -} - -export function LayoutInputSchema(): myzod.Type { - return myzod.object({ - dropdown: myzod.lazy(() => DropDownComponentInputSchema().optional().nullable()) - }) -} - -export function MyTypeSchema(): myzod.Type { - return myzod.object({ - __typename: myzod.literal('MyType').optional(), - foo: myzod.string().optional().nullable() - }) -} - -export function MyTypeFooArgsSchema(): myzod.Type { - return myzod.object({ - a: myzod.string().optional().nullable(), - b: myzod.number(), - c: myzod.boolean().optional().nullable(), - d: myzod.number() - }) -} - -export function PageInputSchema(): myzod.Type { - return myzod.object({ - attributes: myzod.array(myzod.lazy(() => AttributeInputSchema())).optional().nullable(), - date: definedNonNullAnySchema.optional().nullable(), - height: myzod.number(), - id: myzod.string(), - layout: myzod.lazy(() => LayoutInputSchema()), - pageType: PageTypeSchema, - postIDs: myzod.array(myzod.string()).optional().nullable(), - show: myzod.boolean(), - tags: myzod.array(myzod.string().nullable()).optional().nullable(), - title: myzod.string(), - width: myzod.number() - }) -} - -export function UserSchema(): myzod.Type { - return myzod.object({ - __typename: myzod.literal('User').optional(), - createdAt: definedNonNullAnySchema.optional().nullable(), - email: myzod.string().optional().nullable(), - id: myzod.string().optional().nullable(), - kind: UserKindSchema().optional().nullable(), - name: myzod.string().optional().nullable(), - password: myzod.string().optional().nullable(), - updatedAt: definedNonNullAnySchema.optional().nullable() - }) -} - -export function UserKindSchema() { - return myzod.union([AdminSchema(), GuestSchema()]) -} diff --git a/example/test.graphql b/example/test.graphql index e314b59a..b4e5bfaf 100644 --- a/example/test.graphql +++ b/example/test.graphql @@ -15,9 +15,19 @@ type Guest { union UserKind = Admin | Guest -type User { +interface Node { id: ID +} + +type User implements Node { + id: ID + """ + ユーザ名 + """ name: String + """ + Eメールアドレス + """ email: String password: String kind: UserKind @@ -27,7 +37,14 @@ type User { input PageInput { id: ID! + """ + タイトル + """ title: String! + """ + 表示設定 + true: 表示する + """ show: Boolean! width: Int! height: Float! @@ -77,8 +94,10 @@ enum EventOptionType { } input EventArgumentInput { - name: String! @constraint(minLength: 5) - value: String! @constraint(startsWith: "foo") + name: String! @rules(apply: ["varchar", "required_without:nickname"]) + value: String! @rules(apply: ["startsWith:Sir"]) + favorites: [String!]! @rules(apply: ["maxLength:16"]) @rulesForArray(apply: ["size:5"]) + nickname: String @rules(apply: ["varchar", "max:10", "sometimes", "required_without:name"]) } input HTTPInput { @@ -98,22 +117,16 @@ type MyType { foo(a: String, b: Int!, c: Boolean, d: Float!): String } -# https://github.com/confuser/graphql-constraint-directive -directive @constraint( - # String constraints - minLength: Int - maxLength: Int - startsWith: String - endsWith: String - contains: String - notContains: String - pattern: String - format: String - # Number constraints - min: Float - max: Float - exclusiveMin: Float - exclusiveMax: Float - multipleOf: Float - uniqueTypeName: String +type Mutation { + hello( + message: String! @rules(apply: ["required", "min:5"]), + ): String +} + +directive @rules( + apply: [String!]! +) on INPUT_FIELD_DEFINITION | FIELD_DEFINITION + +directive @rulesForArray( + apply: [String!]! ) on INPUT_FIELD_DEFINITION | FIELD_DEFINITION diff --git a/example/types.ts b/example/types.ts index 17afc628..eca69a40 100644 --- a/example/types.ts +++ b/example/types.ts @@ -45,7 +45,9 @@ export type DropDownComponentInput = { }; export type EventArgumentInput = { + favorites: Array; name: Scalars['String']['input']; + nickname?: InputMaybe; value: Scalars['String']['input']; }; @@ -78,6 +80,16 @@ export type LayoutInput = { dropdown?: InputMaybe; }; +export type Mutation = { + __typename?: 'Mutation'; + hello?: Maybe; +}; + + +export type MutationHelloArgs = { + message: Scalars['String']['input']; +}; + export type MyType = { __typename?: 'MyType'; foo?: Maybe; @@ -91,6 +103,10 @@ export type MyTypeFooArgs = { d: Scalars['Float']['input']; }; +export type Node = { + id?: Maybe; +}; + export type PageInput = { attributes?: InputMaybe>; date?: InputMaybe; @@ -99,8 +115,13 @@ export type PageInput = { layout: LayoutInput; pageType: PageType; postIDs?: InputMaybe>; + /** + * 表示設定 + * true: 表示する + */ show: Scalars['Boolean']['input']; tags?: InputMaybe>>; + /** タイトル */ title: Scalars['String']['input']; width: Scalars['Int']['input']; }; @@ -112,12 +133,14 @@ export enum PageType { Service = 'SERVICE' } -export type User = { +export type User = Node & { __typename?: 'User'; createdAt?: Maybe; + /** Eメールアドレス */ email?: Maybe; id?: Maybe; kind?: Maybe; + /** ユーザ名 */ name?: Maybe; password?: Maybe; updatedAt?: Maybe; diff --git a/example/yup/schemas.ts b/example/yup/schemas.ts index 6a481b0d..39f36a8c 100644 --- a/example/yup/schemas.ts +++ b/example/yup/schemas.ts @@ -1,130 +1,148 @@ import * as yup from 'yup' -import { Admin, AttributeInput, ButtonComponentType, ComponentInput, DropDownComponentInput, EventArgumentInput, EventInput, EventOptionType, Guest, HttpInput, HttpMethod, LayoutInput, MyType, MyTypeFooArgs, PageInput, PageType, User, UserKind } from '../types' +import { Admin, AttributeInput, ButtonComponentType, ComponentInput, DropDownComponentInput, EventArgumentInput, EventInput, EventOptionType, Guest, HttpInput, HttpMethod, LayoutInput, Mutation, MutationHelloArgs, MyType, MyTypeFooArgs, PageInput, PageType, User, UserKind } from '../types' -export const ButtonComponentTypeSchema = yup.string().oneOf([ButtonComponentType.Button, ButtonComponentType.Submit]).defined(); +export const ButtonComponentTypeSchema = yup.string().oneOf([ButtonComponentType.Button, ButtonComponentType.Submit]); -export const EventOptionTypeSchema = yup.string().oneOf([EventOptionType.Reload, EventOptionType.Retry]).defined(); +export const EventOptionTypeSchema = yup.string().oneOf([EventOptionType.Reload, EventOptionType.Retry]); -export const HttpMethodSchema = yup.string().oneOf([HttpMethod.Get, HttpMethod.Post]).defined(); +export const HttpMethodSchema = yup.string().oneOf([HttpMethod.Get, HttpMethod.Post]); -export const PageTypeSchema = yup.string().oneOf([PageType.BasicAuth, PageType.Lp, PageType.Restricted, PageType.Service]).defined(); +export const PageTypeSchema = yup.string().oneOf([PageType.BasicAuth, PageType.Lp, PageType.Restricted, PageType.Service]); -function union(...schemas: ReadonlyArray>): yup.MixedSchema { - return yup.mixed().test({ - test: (value) => schemas.some((schema) => schema.isValidSync(value)) - }).defined() +function union(schemas: Record>) { + return (yup.object() as unknown as yup.ObjectSchema).when( + ([value], schema) => schemas[value?.__typename] ?? schema + ).defined() } export function AdminSchema(): yup.ObjectSchema { return yup.object({ - __typename: yup.string<'Admin'>().optional(), - lastModifiedAt: yup.mixed().nullable().optional() - }) + __typename: yup.string<'Admin'>(), + lastModifiedAt: yup.mixed().nullable() + }).strict() } export function AttributeInputSchema(): yup.ObjectSchema { return yup.object({ - key: yup.string().defined().nullable().optional(), - val: yup.string().defined().nullable().optional() - }) + key: yup.string().nullable(), + val: yup.string().nullable() + }).strict() } export function ComponentInputSchema(): yup.ObjectSchema { return yup.object({ - child: yup.lazy(() => ComponentInputSchema()).optional(), - childrens: yup.array(yup.lazy(() => ComponentInputSchema())).defined().nullable().optional(), - event: yup.lazy(() => EventInputSchema()).optional(), - name: yup.string().defined().nonNullable(), - type: ButtonComponentTypeSchema.nonNullable() - }) + child: ComponentInputSchema().nullable(), + childrens: yup.array(ComponentInputSchema().nullable().defined()).nullable(), + event: EventInputSchema().nullable(), + name: yup.string().nonNullable().defined(), + type: ButtonComponentTypeSchema.nonNullable().defined() + }).strict() } export function DropDownComponentInputSchema(): yup.ObjectSchema { return yup.object({ - dropdownComponent: yup.lazy(() => ComponentInputSchema()).optional(), - getEvent: yup.lazy(() => EventInputSchema().nonNullable()) - }) + dropdownComponent: ComponentInputSchema().nullable(), + getEvent: EventInputSchema().nonNullable().defined() + }).strict() } export function EventArgumentInputSchema(): yup.ObjectSchema { return yup.object({ - name: yup.string().defined().nonNullable().min(5), - value: yup.string().defined().nonNullable().matches(/^foo/) - }) + favorites: yup.array(yup.string().maxLength(16).nonNullable().defined()).size(5).nonNullable().defined(), + name: yup.lazy(() => yup.string().varchar().required_without("nickname").nonNullable().defined()), + nickname: yup.lazy(() => yup.string().sometimes(schema => schema.varchar().max(10).required_without("name")).nullable()), + value: yup.string().startsWith("Sir").nonNullable().defined() + }).strict() } export function EventInputSchema(): yup.ObjectSchema { return yup.object({ - arguments: yup.array(yup.lazy(() => EventArgumentInputSchema().nonNullable())).defined(), - options: yup.array(EventOptionTypeSchema.nonNullable()).defined().nullable().optional() - }) + arguments: yup.array(EventArgumentInputSchema().nonNullable().defined()).nonNullable().defined(), + options: yup.array(EventOptionTypeSchema.nonNullable().defined()).nullable() + }).strict() } export function GuestSchema(): yup.ObjectSchema { return yup.object({ - __typename: yup.string<'Guest'>().optional(), - lastLoggedIn: yup.mixed().nullable().optional() - }) + __typename: yup.string<'Guest'>(), + lastLoggedIn: yup.mixed().nullable() + }).strict() } export function HttpInputSchema(): yup.ObjectSchema { return yup.object({ - method: HttpMethodSchema.nullable().optional(), - url: yup.mixed().nonNullable() - }) + method: HttpMethodSchema.nullable(), + url: yup.mixed().nonNullable().defined() + }).strict() } export function LayoutInputSchema(): yup.ObjectSchema { return yup.object({ - dropdown: yup.lazy(() => DropDownComponentInputSchema()).optional() - }) + dropdown: DropDownComponentInputSchema().nullable() + }).strict() +} + +export function MutationSchema(): yup.ObjectSchema { + return yup.object({ + __typename: yup.string<'Mutation'>(), + hello: yup.string().nullable() + }).strict() +} + +export function MutationHelloArgsSchema(): yup.ObjectSchema { + return yup.object({ + message: yup.string().required().min(5).nonNullable().defined() + }).strict() } export function MyTypeSchema(): yup.ObjectSchema { return yup.object({ - __typename: yup.string<'MyType'>().optional(), - foo: yup.string().defined().nullable().optional() - }) + __typename: yup.string<'MyType'>(), + foo: yup.string().nullable() + }).strict() } export function MyTypeFooArgsSchema(): yup.ObjectSchema { return yup.object({ - a: yup.string().defined().nullable().optional(), - b: yup.number().defined().nonNullable(), - c: yup.boolean().defined().nullable().optional(), - d: yup.number().defined().nonNullable() - }) + a: yup.string().nullable(), + b: yup.number().nonNullable().defined(), + c: yup.boolean().nullable(), + d: yup.number().nonNullable().defined() + }).strict() } export function PageInputSchema(): yup.ObjectSchema { return yup.object({ - attributes: yup.array(yup.lazy(() => AttributeInputSchema().nonNullable())).defined().nullable().optional(), - date: yup.mixed().nullable().optional(), - height: yup.number().defined().nonNullable(), - id: yup.string().defined().nonNullable(), - layout: yup.lazy(() => LayoutInputSchema().nonNullable()), - pageType: PageTypeSchema.nonNullable(), - postIDs: yup.array(yup.string().defined().nonNullable()).defined().nullable().optional(), - show: yup.boolean().defined().nonNullable(), - tags: yup.array(yup.string().defined().nullable()).defined().nullable().optional(), - title: yup.string().defined().nonNullable(), - width: yup.number().defined().nonNullable() - }) + attributes: yup.array(AttributeInputSchema().nonNullable().defined()).nullable(), + date: yup.mixed().nullable(), + height: yup.number().nonNullable().defined(), + id: yup.string().nonNullable().defined(), + layout: LayoutInputSchema().nonNullable().defined(), + pageType: PageTypeSchema.nonNullable().defined(), + postIDs: yup.array(yup.string().nonNullable().defined()).nullable(), + show: yup.boolean().label("表示設定").nonNullable().defined(), + tags: yup.array(yup.string().nullable().defined()).nullable(), + title: yup.string().label("タイトル").nonNullable().defined(), + width: yup.number().nonNullable().defined() + }).strict() } export function UserSchema(): yup.ObjectSchema { return yup.object({ - __typename: yup.string<'User'>().optional(), - createdAt: yup.mixed().nullable().optional(), - email: yup.string().defined().nullable().optional(), - id: yup.string().defined().nullable().optional(), - kind: UserKindSchema().nullable().optional(), - name: yup.string().defined().nullable().optional(), - password: yup.string().defined().nullable().optional(), - updatedAt: yup.mixed().nullable().optional() - }) -} - -export function UserKindSchema(): yup.MixedSchema { - return union(AdminSchema(), GuestSchema()) + __typename: yup.string<'User'>(), + createdAt: yup.mixed().nullable(), + email: yup.string().label("Eメールアドレス").nullable(), + id: yup.string().nullable(), + kind: UserKindSchema().nullable(), + name: yup.string().label("ユーザ名").nullable(), + password: yup.string().nullable(), + updatedAt: yup.mixed().nullable() + }).strict() +} + +export function UserKindSchema(): yup.ObjectSchema { + return union({ +Admin: AdminSchema(), +Guest: GuestSchema(), +}) } diff --git a/example/yup/yup.d.ts b/example/yup/yup.d.ts new file mode 100644 index 00000000..c7abc83b --- /dev/null +++ b/example/yup/yup.d.ts @@ -0,0 +1,25 @@ +import { AnyObject, Flags, Maybe, Schema } from 'yup'; + +declare module 'yup' { + interface StringSchema< + TType extends Maybe = string | undefined, + TContext = AnyObject, + TDefault = undefined, + TFlags extends Flags = '', + > extends Schema { + maxLength(size: number): this; + varchar(): this; + sometimes(callback: (schema: this) => this): this; + startsWith(str: string): this; + required_without(str: string): this; + } + + interface ArraySchema + extends Schema { + size(size: number): this; + } + + interface MixedSchema = AnyPresentValue | undefined, TContext = AnyObject, TDefault = undefined, TFlags extends Flags = ''> extends Schema { + union(schemas: Record): this + } +} diff --git a/example/zod/README.md b/example/zod/README.md deleted file mode 100644 index 53916fa5..00000000 --- a/example/zod/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# Tips for zod schema - -## How to overwrite generated schema? - -You can use zod [extend API](https://github.com/colinhacks/zod#extend). - -```ts -const AttributeInputSchemaWithCUID = AttributeInputSchema().extend({ - key: z.string().cuid(), -}); -``` - -## Apply input validator via ts decorator - -Validate the input object via typescript decorators when implementing resolvers. See: #190 - -### Usage - -```ts -class Mutation { - @validateInput(SignupInputSchema) - async signup( - _root: Record, - { input: { email, password } }: MutationSignupArgs, - context: Context - ): Promise { - // The input here is automatically valid to adhere to SignupInputSchema - } -} -``` - -### Implementation: - -```ts -type ZodResolver> = ResolverFn< - any, - any, - any, - { input: TypeOf } -> - -/** - * Method decorator that validates the argument of the target function against the given schema. - * - * @export - * @template T The type of the zod schema. - * @param {T} arg The zod schema used for the validation. - * @return {MethodDecorator} A {@link MethodDecorator}. - */ -export function validateInput( - arg: T | (() => T) -): MethodDecorator> { - return function (_target, _propertyKey, descriptor) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const originalMethod = descriptor.value! - // @ts-expect-error: should be fine - descriptor.value = function (root, { input }, context, info) { - const schema = typeof arg === 'function' ? arg() : arg - const result = schema.safeParse(input) - - if (result.success) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-return - return originalMethod.call( - this, - root, - { input: result.data }, - context, - info - ) - } else { - return { problems: result.error.issues } - } - } - return descriptor - } -} -``` \ No newline at end of file diff --git a/example/zod/schemas.ts b/example/zod/schemas.ts deleted file mode 100644 index b6fb5679..00000000 --- a/example/zod/schemas.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { z } from 'zod' -import { Admin, AttributeInput, ButtonComponentType, ComponentInput, DropDownComponentInput, EventArgumentInput, EventInput, EventOptionType, Guest, HttpInput, HttpMethod, LayoutInput, MyType, MyTypeFooArgs, PageInput, PageType, User } from '../types' - -type Properties = Required<{ - [K in keyof T]: z.ZodType; -}>; - -type definedNonNullAny = {}; - -export const isDefinedNonNullAny = (v: any): v is definedNonNullAny => v !== undefined && v !== null; - -export const definedNonNullAnySchema = z.any().refine((v) => isDefinedNonNullAny(v)); - -export const ButtonComponentTypeSchema = z.nativeEnum(ButtonComponentType); - -export const EventOptionTypeSchema = z.nativeEnum(EventOptionType); - -export const HttpMethodSchema = z.nativeEnum(HttpMethod); - -export const PageTypeSchema = z.nativeEnum(PageType); - -export function AdminSchema(): z.ZodObject> { - return z.object({ - __typename: z.literal('Admin').optional(), - lastModifiedAt: definedNonNullAnySchema.nullish() - }) -} - -export function AttributeInputSchema(): z.ZodObject> { - return z.object({ - key: z.string().nullish(), - val: z.string().nullish() - }) -} - -export function ComponentInputSchema(): z.ZodObject> { - return z.object({ - child: z.lazy(() => ComponentInputSchema().nullish()), - childrens: z.array(z.lazy(() => ComponentInputSchema().nullable())).nullish(), - event: z.lazy(() => EventInputSchema().nullish()), - name: z.string(), - type: ButtonComponentTypeSchema - }) -} - -export function DropDownComponentInputSchema(): z.ZodObject> { - return z.object({ - dropdownComponent: z.lazy(() => ComponentInputSchema().nullish()), - getEvent: z.lazy(() => EventInputSchema()) - }) -} - -export function EventArgumentInputSchema(): z.ZodObject> { - return z.object({ - name: z.string().min(5), - value: z.string().regex(/^foo/, "message") - }) -} - -export function EventInputSchema(): z.ZodObject> { - return z.object({ - arguments: z.array(z.lazy(() => EventArgumentInputSchema())), - options: z.array(EventOptionTypeSchema).nullish() - }) -} - -export function GuestSchema(): z.ZodObject> { - return z.object({ - __typename: z.literal('Guest').optional(), - lastLoggedIn: definedNonNullAnySchema.nullish() - }) -} - -export function HttpInputSchema(): z.ZodObject> { - return z.object({ - method: HttpMethodSchema.nullish(), - url: definedNonNullAnySchema - }) -} - -export function LayoutInputSchema(): z.ZodObject> { - return z.object({ - dropdown: z.lazy(() => DropDownComponentInputSchema().nullish()) - }) -} - -export function MyTypeSchema(): z.ZodObject> { - return z.object({ - __typename: z.literal('MyType').optional(), - foo: z.string().nullish() - }) -} - -export function MyTypeFooArgsSchema(): z.ZodObject> { - return z.object({ - a: z.string().nullish(), - b: z.number(), - c: z.boolean().nullish(), - d: z.number() - }) -} - -export function PageInputSchema(): z.ZodObject> { - return z.object({ - attributes: z.array(z.lazy(() => AttributeInputSchema())).nullish(), - date: definedNonNullAnySchema.nullish(), - height: z.number(), - id: z.string(), - layout: z.lazy(() => LayoutInputSchema()), - pageType: PageTypeSchema, - postIDs: z.array(z.string()).nullish(), - show: z.boolean(), - tags: z.array(z.string().nullable()).nullish(), - title: z.string(), - width: z.number() - }) -} - -export function UserSchema(): z.ZodObject> { - return z.object({ - __typename: z.literal('User').optional(), - createdAt: definedNonNullAnySchema.nullish(), - email: z.string().nullish(), - id: z.string().nullish(), - kind: UserKindSchema().nullish(), - name: z.string().nullish(), - password: z.string().nullish(), - updatedAt: definedNonNullAnySchema.nullish() - }) -} - -export function UserKindSchema() { - return z.union([AdminSchema(), GuestSchema()]) -} diff --git a/package.json b/package.json index ec80751f..7c922f6f 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { - "name": "graphql-codegen-typescript-validation-schema", - "version": "0.12.0", + "name": "graphql-codegen-lighthouse-yup-schema", + "version": "0.13.0", "description": "GraphQL Code Generator plugin to generate form validation schema from your GraphQL schema", "respository": { "type": "git", - "url": "https://github.com/Code-Hex/graphql-codegen-typescript-validation-schema.git" + "url": "https://github.com/WORKSJAPAN/graphql-codegen-lighthouse-yup-schema.git" }, "main": "dist/main/index.js", "typings": "dist/main/index.d.ts", @@ -15,11 +15,8 @@ "README.md" ], "scripts": { - "preinstall": "npx only-allow pnpm", "type-check": "tsc --noEmit", - "type-check:yup": "tsc --strict --noEmit example/yup/schemas.ts", - "type-check:zod": "tsc --strict --noEmit example/zod/schemas.ts", - "type-check:myzod": "tsc --strict --noEmit example/myzod/schemas.ts", + "type-check:yup": "tsc --strict --noEmit example/yup/yup.d.ts example/yup/schemas.ts", "test": "vitest run", "build": "run-p build:*", "build:main": "tsc -p tsconfig.main.json", @@ -35,7 +32,6 @@ "gql", "generator", "yup", - "zod", "code", "types", "graphql", @@ -60,15 +56,13 @@ "eslint-plugin-import": "^2.27.5", "eslint-plugin-simple-import-sort": "^10.0.0", "jest": "29.7.0", - "myzod": "1.10.2", "npm-run-all": "4.1.5", "prettier": "3.0.3", "ts-dedent": "^2.2.0", "ts-jest": "29.1.1", "typescript": "5.2.2", "vitest": "^0.34.1", - "yup": "1.3.2", - "zod": "3.22.4" + "yup": "1.3.2" }, "dependencies": { "@graphql-codegen/plugin-helpers": "^5.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6e54ee34..8faa12c5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,1001 +1,606 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@graphql-codegen/plugin-helpers': - specifier: ^5.0.0 - version: 5.0.1(graphql@16.7.1) - '@graphql-codegen/schema-ast': - specifier: 4.0.0 - version: 4.0.0(graphql@16.7.1) - '@graphql-codegen/visitor-plugin-common': - specifier: ^4.0.0 - version: 4.0.1(graphql@16.7.1) - '@graphql-tools/utils': - specifier: ^10.0.0 - version: 10.0.5(graphql@16.7.1) - graphlib: - specifier: ^2.1.8 - version: 2.1.8 - graphql: - specifier: ^16.6.0 - version: 16.7.1 - -devDependencies: - '@graphql-codegen/cli': - specifier: 5.0.0 - version: 5.0.0(@babel/core@7.22.5)(@types/node@18.17.5)(graphql@16.7.1) - '@graphql-codegen/typescript': - specifier: ^4.0.0 - version: 4.0.1(graphql@16.7.1) - '@tsconfig/recommended': - specifier: 1.0.3 - version: 1.0.3 - '@types/graphlib': - specifier: ^2.1.8 - version: 2.1.8 - '@types/jest': - specifier: 29.5.6 - version: 29.5.6 - '@types/node': - specifier: ^18.17.5 - version: 18.17.5 - '@typescript-eslint/eslint-plugin': - specifier: 6.8.0 - version: 6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0)(typescript@5.2.2) - '@typescript-eslint/parser': - specifier: 6.8.0 - version: 6.8.0(eslint@8.52.0)(typescript@5.2.2) - eslint: - specifier: 8.52.0 - version: 8.52.0 - eslint-plugin-import: - specifier: ^2.27.5 - version: 2.28.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0) - eslint-plugin-simple-import-sort: - specifier: ^10.0.0 - version: 10.0.0(eslint@8.52.0) - jest: - specifier: 29.7.0 - version: 29.7.0(@types/node@18.17.5) - myzod: - specifier: 1.10.2 - version: 1.10.2 - npm-run-all: - specifier: 4.1.5 - version: 4.1.5 - prettier: - specifier: 3.0.3 - version: 3.0.3 - ts-dedent: - specifier: ^2.2.0 - version: 2.2.0 - ts-jest: - specifier: 29.1.1 - version: 29.1.1(@babel/core@7.22.5)(jest@29.7.0)(typescript@5.2.2) - typescript: - specifier: 5.2.2 - version: 5.2.2 - vitest: - specifier: ^0.34.1 - version: 0.34.1 - yup: - specifier: 1.3.2 - version: 1.3.2 - zod: - specifier: 3.22.4 - version: 3.22.4 +importers: + + .: + dependencies: + '@graphql-codegen/plugin-helpers': + specifier: ^5.0.0 + version: 5.0.1(graphql@16.8.1) + '@graphql-codegen/schema-ast': + specifier: 4.0.0 + version: 4.0.0(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': + specifier: ^4.0.0 + version: 4.0.1(graphql@16.8.1) + '@graphql-tools/utils': + specifier: ^10.0.0 + version: 10.0.7(graphql@16.8.1) + graphlib: + specifier: ^2.1.8 + version: 2.1.8 + graphql: + specifier: ^16.6.0 + version: 16.8.1 + devDependencies: + '@graphql-codegen/cli': + specifier: 5.0.0 + version: 5.0.0(@types/node@18.18.6)(graphql@16.8.1)(typescript@5.2.2) + '@graphql-codegen/typescript': + specifier: ^4.0.0 + version: 4.0.1(graphql@16.8.1) + '@tsconfig/recommended': + specifier: 1.0.3 + version: 1.0.3 + '@types/graphlib': + specifier: ^2.1.8 + version: 2.1.10 + '@types/jest': + specifier: 29.5.6 + version: 29.5.6 + '@types/node': + specifier: ^18.17.5 + version: 18.18.6 + '@typescript-eslint/eslint-plugin': + specifier: 6.8.0 + version: 6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0)(typescript@5.2.2) + '@typescript-eslint/parser': + specifier: 6.8.0 + version: 6.8.0(eslint@8.52.0)(typescript@5.2.2) + eslint: + specifier: 8.52.0 + version: 8.52.0 + eslint-plugin-import: + specifier: ^2.27.5 + version: 2.29.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0) + eslint-plugin-simple-import-sort: + specifier: ^10.0.0 + version: 10.0.0(eslint@8.52.0) + jest: + specifier: 29.7.0 + version: 29.7.0(@types/node@18.18.6) + npm-run-all: + specifier: 4.1.5 + version: 4.1.5 + prettier: + specifier: 3.0.3 + version: 3.0.3 + ts-dedent: + specifier: ^2.2.0 + version: 2.2.0 + ts-jest: + specifier: 29.1.1 + version: 29.1.1(@babel/core@7.23.2)(jest@29.7.0)(typescript@5.2.2) + typescript: + specifier: 5.2.2 + version: 5.2.2 + vitest: + specifier: ^0.34.1 + version: 0.34.6 + yup: + specifier: 1.3.2 + version: 1.3.2 packages: - /@aashutoshrathi/word-wrap@1.2.6: + '@aashutoshrathi/word-wrap@1.2.6': resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} - dev: true - /@ampproject/remapping@2.2.1: + '@ampproject/remapping@2.2.1': resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - /@ardatan/relay-compiler@12.0.0(graphql@16.7.1): + '@ardatan/relay-compiler@12.0.0': resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} hasBin: true peerDependencies: graphql: '*' - dependencies: - '@babel/core': 7.22.5 - '@babel/generator': 7.22.5 - '@babel/parser': 7.22.5 - '@babel/runtime': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - babel-preset-fbjs: 3.4.0(@babel/core@7.22.5) - chalk: 4.1.2 - fb-watchman: 2.0.2 - fbjs: 3.0.5 - glob: 7.2.3 - graphql: 16.7.1 - immutable: 3.7.6 - invariant: 2.2.4 - nullthrows: 1.1.1 - relay-runtime: 12.0.0 - signedsource: 1.0.0 - yargs: 15.4.1 - transitivePeerDependencies: - - encoding - - supports-color - /@ardatan/sync-fetch@0.0.1: + '@ardatan/sync-fetch@0.0.1': resolution: {integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==} engines: {node: '>=14'} - dependencies: - node-fetch: 2.6.11 - transitivePeerDependencies: - - encoding - dev: true - /@babel/code-frame@7.22.5: - resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} + '@babel/code-frame@7.22.13': + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.5 - /@babel/compat-data@7.22.5: - resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==} + '@babel/compat-data@7.23.2': + resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==} engines: {node: '>=6.9.0'} - /@babel/core@7.22.5: - resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==} + '@babel/core@7.23.2': + resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==} engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) - '@babel/helper-module-transforms': 7.22.5 - '@babel/helpers': 7.22.5 - '@babel/parser': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - convert-source-map: 1.9.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - /@babel/generator@7.22.5: - resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==} + '@babel/generator@7.23.0': + resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - jsesc: 2.5.2 - /@babel/helper-annotate-as-pure@7.22.5: + '@babel/helper-annotate-as-pure@7.22.5': resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - /@babel/helper-compilation-targets@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} + '@babel/helper-compilation-targets@7.22.15': + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.22.5 - '@babel/core': 7.22.5 - '@babel/helper-validator-option': 7.22.5 - browserslist: 4.21.9 - lru-cache: 5.1.1 - semver: 6.3.1 - /@babel/helper-create-class-features-plugin@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==} + '@babel/helper-create-class-features-plugin@7.22.15': + resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - /@babel/helper-environment-visitor@7.22.5: - resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + '@babel/helper-environment-visitor@7.22.20': + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} - /@babel/helper-function-name@7.22.5: - resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + '@babel/helper-function-name@7.23.0': + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.5 - '@babel/types': 7.22.5 - /@babel/helper-hoist-variables@7.22.5: + '@babel/helper-hoist-variables@7.22.5': resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - /@babel/helper-member-expression-to-functions@7.22.5: - resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} + '@babel/helper-member-expression-to-functions@7.23.0': + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - /@babel/helper-module-imports@7.22.5: - resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + '@babel/helper-module-imports@7.22.15': + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - /@babel/helper-module-transforms@7.22.5: - resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} + '@babel/helper-module-transforms@7.23.0': + resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-module-imports': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color + peerDependencies: + '@babel/core': ^7.0.0 - /@babel/helper-optimise-call-expression@7.22.5: + '@babel/helper-optimise-call-expression@7.22.5': resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - /@babel/helper-plugin-utils@7.22.5: + '@babel/helper-plugin-utils@7.22.5': resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} - /@babel/helper-replace-supers@7.22.5: - resolution: {integrity: sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==} + '@babel/helper-replace-supers@7.22.20': + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color + peerDependencies: + '@babel/core': ^7.0.0 - /@babel/helper-simple-access@7.22.5: + '@babel/helper-simple-access@7.22.5': resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - /@babel/helper-split-export-declaration@7.22.5: - resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} + '@babel/helper-split-export-declaration@7.22.6': + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - /@babel/helper-string-parser@7.22.5: + '@babel/helper-string-parser@7.22.5': resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.22.5: - resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + '@babel/helper-validator-identifier@7.22.20': + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.22.5: - resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + '@babel/helper-validator-option@7.22.15': + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} engines: {node: '>=6.9.0'} - /@babel/helpers@7.22.5: - resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} + '@babel/helpers@7.23.2': + resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color - /@babel/highlight@7.22.5: - resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + '@babel/highlight@7.22.20': + resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.5 - chalk: 2.4.2 - js-tokens: 4.0.0 - /@babel/parser@7.22.5: - resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} + '@babel/parser@7.23.0': + resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} engines: {node: '>=6.0.0'} hasBin: true - dependencies: - '@babel/types': 7.22.5 - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.5): + '@babel/plugin-proposal-class-properties@7.18.6': resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color - /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.22.5): + '@babel/plugin-proposal-object-rest-spread@7.20.7': resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.22.5 - '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.5) - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.5): + '@babel/plugin-syntax-async-generators@7.8.4': resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.5): + '@babel/plugin-syntax-bigint@7.8.3': resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.5): + '@babel/plugin-syntax-class-properties@7.12.13': resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.22.5): + '@babel/plugin-syntax-flow@7.22.5': resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.22.5): - resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} + '@babel/plugin-syntax-import-assertions@7.22.5': + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.5): + '@babel/plugin-syntax-import-meta@7.10.4': resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.5): + '@babel/plugin-syntax-json-strings@7.8.3': resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.5): + '@babel/plugin-syntax-jsx@7.22.5': resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.5): + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.5): + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.5): + '@babel/plugin-syntax-numeric-separator@7.10.4': resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.5): + '@babel/plugin-syntax-object-rest-spread@7.8.3': resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.5): + '@babel/plugin-syntax-optional-catch-binding@7.8.3': resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.5): + '@babel/plugin-syntax-optional-chaining@7.8.3': resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.5): + '@babel/plugin-syntax-top-level-await@7.14.5': resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-typescript@7.16.7(@babel/core@7.22.5): - resolution: {integrity: sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==} + '@babel/plugin-syntax-typescript@7.22.5': + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.5): + '@babel/plugin-transform-arrow-functions@7.22.5': resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.5): + '@babel/plugin-transform-block-scoped-functions@7.22.5': resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} + '@babel/plugin-transform-block-scoping@7.23.0': + resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-classes@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==} + '@babel/plugin-transform-classes@7.22.15': + resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.5): + '@babel/plugin-transform-computed-properties@7.22.5': resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.5 - /@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} + '@babel/plugin-transform-destructuring@7.23.0': + resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.22.5): + '@babel/plugin-transform-flow-strip-types@7.22.5': resolution: {integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.5) - /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} + '@babel/plugin-transform-for-of@7.22.15': + resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.5): + '@babel/plugin-transform-function-name@7.22.5': resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) - '@babel/helper-function-name': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.5): + '@babel/plugin-transform-literals@7.22.5': resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.5): + '@babel/plugin-transform-member-expression-literals@7.22.5': resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} + '@babel/plugin-transform-modules-commonjs@7.23.0': + resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-module-transforms': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - transitivePeerDependencies: - - supports-color - /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.5): + '@babel/plugin-transform-object-super@7.22.5': resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - transitivePeerDependencies: - - supports-color - /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} + '@babel/plugin-transform-parameters@7.22.15': + resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.5): + '@babel/plugin-transform-property-literals@7.22.5': resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.22.5): + '@babel/plugin-transform-react-display-name@7.22.5': resolution: {integrity: sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==} + '@babel/plugin-transform-react-jsx@7.22.15': + resolution: {integrity: sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) - '@babel/types': 7.22.5 - /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.5): + '@babel/plugin-transform-shorthand-properties@7.22.5': resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.5): + '@babel/plugin-transform-spread@7.22.5': resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.5): + '@babel/plugin-transform-template-literals@7.22.5': resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - /@babel/runtime@7.22.5: - resolution: {integrity: sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==} + '@babel/runtime@7.23.2': + resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.13.11 - /@babel/template@7.22.5: - resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + '@babel/template@7.22.15': + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.5 - '@babel/parser': 7.22.5 - '@babel/types': 7.22.5 - /@babel/traverse@7.22.5: - resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==} + '@babel/traverse@7.23.2': + resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 - '@babel/parser': 7.22.5 - '@babel/types': 7.22.5 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - /@babel/types@7.22.5: - resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} + '@babel/types@7.23.0': + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - to-fast-properties: 2.0.0 - /@bcoe/v8-coverage@0.2.3: + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: true - /@esbuild/android-arm64@0.18.20: + '@esbuild/android-arm64@0.18.20': resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.18.20: + '@esbuild/android-arm@0.18.20': resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.18.20: + '@esbuild/android-x64@0.18.20': resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} cpu: [x64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.18.20: + '@esbuild/darwin-arm64@0.18.20': resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.18.20: + '@esbuild/darwin-x64@0.18.20': resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.18.20: + '@esbuild/freebsd-arm64@0.18.20': resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.18.20: + '@esbuild/freebsd-x64@0.18.20': resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.18.20: + '@esbuild/linux-arm64@0.18.20': resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.18.20: + '@esbuild/linux-arm@0.18.20': resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.18.20: + '@esbuild/linux-ia32@0.18.20': resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.18.20: + '@esbuild/linux-loong64@0.18.20': resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.18.20: + '@esbuild/linux-mips64el@0.18.20': resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.18.20: + '@esbuild/linux-ppc64@0.18.20': resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.18.20: + '@esbuild/linux-riscv64@0.18.20': resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.18.20: + '@esbuild/linux-s390x@0.18.20': resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.18.20: + '@esbuild/linux-x64@0.18.20': resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.18.20: + '@esbuild/netbsd-x64@0.18.20': resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.18.20: + '@esbuild/openbsd-x64@0.18.20': resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.18.20: + '@esbuild/sunos-x64@0.18.20': resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.18.20: + '@esbuild/win32-arm64@0.18.20': resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.18.20: + '@esbuild/win32-ia32@0.18.20': resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.18.20: + '@esbuild/win32-x64@0.18.20': resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.52.0): + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.52.0 - eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.6.2: - resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} + '@eslint-community/regexpp@4.9.1': + resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - /@eslint/eslintrc@2.1.2: + '@eslint/eslintrc@2.1.2': resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.19.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.52.0: + '@eslint/js@8.52.0': resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /@graphql-codegen/cli@5.0.0(@babel/core@7.22.5)(@types/node@18.17.5)(graphql@16.7.1): + '@graphql-codegen/cli@5.0.0': resolution: {integrity: sha512-A7J7+be/a6e+/ul2KI5sfJlpoqeqwX8EzktaKCeduyVKgOLA6W5t+NUGf6QumBDXU8PEOqXk3o3F+RAwCWOiqA==} hasBin: true peerDependencies: @@ -1004,407 +609,3549 @@ packages: peerDependenciesMeta: '@parcel/watcher': optional: true - dependencies: - '@babel/generator': 7.22.5 - '@babel/template': 7.22.5 - '@babel/types': 7.22.5 - '@graphql-codegen/core': 4.0.0(graphql@16.7.1) - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.7.1) - '@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.7.1) - '@graphql-tools/code-file-loader': 8.0.0(@babel/core@7.22.5)(graphql@16.7.1) - '@graphql-tools/git-loader': 8.0.0(@babel/core@7.22.5)(graphql@16.7.1) - '@graphql-tools/github-loader': 8.0.0(@babel/core@7.22.5)(@types/node@18.17.5)(graphql@16.7.1) - '@graphql-tools/graphql-file-loader': 8.0.0(graphql@16.7.1) - '@graphql-tools/json-file-loader': 8.0.0(graphql@16.7.1) - '@graphql-tools/load': 8.0.0(graphql@16.7.1) - '@graphql-tools/prisma-loader': 8.0.0(@types/node@18.17.5)(graphql@16.7.1) - '@graphql-tools/url-loader': 8.0.0(@types/node@18.17.5)(graphql@16.7.1) - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - '@whatwg-node/fetch': 0.8.2(@types/node@18.17.5) - chalk: 4.1.2 - cosmiconfig: 8.1.3 - debounce: 1.2.1 - detect-indent: 6.1.0 - graphql: 16.7.1 - graphql-config: 5.0.2(@types/node@18.17.5)(graphql@16.7.1) - inquirer: 8.2.0 - is-glob: 4.0.3 - jiti: 1.18.2 - json-to-pretty-yaml: 1.2.2 - listr2: 4.0.5 - log-symbols: 4.1.0 - micromatch: 4.0.5 - shell-quote: 1.7.3 - string-env-interpolation: 1.0.1 - ts-log: 2.2.4 - tslib: 2.6.1 - yaml: 2.3.1 - yargs: 17.4.1 - transitivePeerDependencies: - - '@babel/core' - - '@types/node' - - bufferutil - - cosmiconfig-toml-loader - - encoding - - enquirer - - supports-color - - utf-8-validate - dev: true - /@graphql-codegen/core@4.0.0(graphql@16.7.1): + '@graphql-codegen/core@4.0.0': resolution: {integrity: sha512-JAGRn49lEtSsZVxeIlFVIRxts2lWObR+OQo7V2LHDJ7ohYYw3ilv7nJ8pf8P4GTg/w6ptcYdSdVVdkI8kUHB/Q==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.7.1) - '@graphql-tools/schema': 10.0.0(graphql@16.7.1) - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - graphql: 16.7.1 - tslib: 2.5.3 - dev: true - /@graphql-codegen/plugin-helpers@5.0.1(graphql@16.7.1): + '@graphql-codegen/plugin-helpers@5.0.1': resolution: {integrity: sha512-6L5sb9D8wptZhnhLLBcheSPU7Tg//DGWgc5tQBWX46KYTOTQHGqDpv50FxAJJOyFVJrveN9otWk9UT9/yfY4ww==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - change-case-all: 1.0.15 - common-tags: 1.8.2 - graphql: 16.7.1 - import-from: 4.0.0 - lodash: 4.17.21 - tslib: 2.5.3 - /@graphql-codegen/schema-ast@4.0.0(graphql@16.7.1): + '@graphql-codegen/schema-ast@4.0.0': resolution: {integrity: sha512-WIzkJFa9Gz28FITAPILbt+7A8+yzOyd1NxgwFh7ie+EmO9a5zQK6UQ3U/BviirguXCYnn+AR4dXsoDrSrtRA1g==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.7.1) - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - graphql: 16.7.1 - tslib: 2.5.3 - /@graphql-codegen/typescript@4.0.1(graphql@16.7.1): + '@graphql-codegen/typescript@4.0.1': resolution: {integrity: sha512-3YziQ21dCVdnHb+Us1uDb3pA6eG5Chjv0uTK+bt9dXeMlwYBU8MbtzvQTo4qvzWVC1AxSOKj0rgfNu1xCXqJyA==} peerDependencies: graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.7.1) - '@graphql-codegen/schema-ast': 4.0.0(graphql@16.7.1) - '@graphql-codegen/visitor-plugin-common': 4.0.1(graphql@16.7.1) - auto-bind: 4.0.0 - graphql: 16.7.1 - tslib: 2.5.3 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - /@graphql-codegen/visitor-plugin-common@4.0.1(graphql@16.7.1): + '@graphql-codegen/visitor-plugin-common@4.0.1': resolution: {integrity: sha512-Bi/1z0nHg4QMsAqAJhds+ForyLtk7A3HQOlkrZNm3xEkY7lcBzPtiOTLBtvziwopBsXUxqeSwVjOOFPLS5Yw1Q==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.7.1) - '@graphql-tools/optimize': 2.0.0(graphql@16.7.1) - '@graphql-tools/relay-operation-optimizer': 7.0.0(graphql@16.7.1) - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - auto-bind: 4.0.0 - change-case-all: 1.0.15 - dependency-graph: 0.11.0 - graphql: 16.7.1 - graphql-tag: 2.12.6(graphql@16.7.1) - parse-filepath: 1.0.2 - tslib: 2.5.3 - transitivePeerDependencies: - - encoding - - supports-color - /@graphql-tools/apollo-engine-loader@8.0.0(graphql@16.7.1): + '@graphql-tools/apollo-engine-loader@8.0.0': resolution: {integrity: sha512-axQTbN5+Yxs1rJ6cWQBOfw3AEeC+fvIuZSfJLPLLvFJLj4pUm9fhxey/g6oQZAAQJqKPfw+tLDUQvnfvRK8Kmg==} engines: {node: '>=16.0.0'} peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: + + '@graphql-tools/batch-execute@9.0.2': + resolution: {integrity: sha512-Y2uwdZI6ZnatopD/SYfZ1eGuQFI7OU2KGZ2/B/7G9ISmgMl5K+ZZWz/PfIEXeiHirIDhyk54s4uka5rj2xwKqQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/code-file-loader@8.0.2': + resolution: {integrity: sha512-AKNpkElUL2cWocYpC4DzNEpo6qJw8Lp+L3bKQ/mIfmbsQxgLz5uve6zHBMhDaFPdlwfIox41N3iUSvi77t9e8A==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/delegate@10.0.3': + resolution: {integrity: sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor-graphql-ws@1.1.0': + resolution: {integrity: sha512-yM67SzwE8rYRpm4z4AuGtABlOp9mXXVy6sxXnTJRoYIdZrmDbKVfIY+CpZUJCqS0FX3xf2+GoHlsj7Qswaxgcg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor-http@1.0.3': + resolution: {integrity: sha512-5WZIMBevRaxMabZ8U2Ty0dTUPy/PpeYSlMNEmC/YJjKKykgSfc/AwSejx2sE4FFKZ0I2kxRKRenyoWMHRAV49Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor-legacy-ws@1.0.4': + resolution: {integrity: sha512-b7aGuRekZDS+m3af3BIvMKxu15bmVPMt5eGQVuP2v5pxmbaPTh+iv5mx9b3Plt32z5Ke5tycBnNm5urSFtW8ng==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/executor@1.2.0': + resolution: {integrity: sha512-SKlIcMA71Dha5JnEWlw4XxcaJ+YupuXg0QCZgl2TOLFz4SkGCwU/geAsJvUJFwK2RbVLpQv/UMq67lOaBuwDtg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/git-loader@8.0.2': + resolution: {integrity: sha512-AuCB0nlPvsHh8u42zRZdlD/ZMaWP9A44yAkQUVCZir1E/LG63fsZ9svTWJ+CbusW3Hd0ZP9qpxEhlHxnd4Tlsg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/github-loader@8.0.0': + resolution: {integrity: sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/graphql-file-loader@8.0.0': + resolution: {integrity: sha512-wRXj9Z1IFL3+zJG1HWEY0S4TXal7+s1vVhbZva96MSp0kbb/3JBF7j0cnJ44Eq0ClccMgGCDFqPFXty4JlpaPg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/graphql-tag-pluck@8.0.2': + resolution: {integrity: sha512-U6fE4yEHxuk/nqmPixHpw1WhqdS6aYuaV60m1bEmUmGJNbpAhaMBy01JncpvpF15yZR5LZ0UjkHg+A3Lhoc8YQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/import@7.0.0': + resolution: {integrity: sha512-NVZiTO8o1GZs6OXzNfjB+5CtQtqsZZpQOq+Uu0w57kdUkT4RlQKlwhT8T81arEsbV55KpzkpFsOZP7J1wdmhBw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/json-file-loader@8.0.0': + resolution: {integrity: sha512-ki6EF/mobBWJjAAC84xNrFMhNfnUFD6Y0rQMGXekrUgY0NdeYXHU0ZUgHzC9O5+55FslqUmAUHABePDHTyZsLg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/load@8.0.0': + resolution: {integrity: sha512-Cy874bQJH0FP2Az7ELPM49iDzOljQmK1PPH6IuxsWzLSTxwTqd8dXA09dcVZrI7/LsN26heTY2R8q2aiiv0GxQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/merge@9.0.0': + resolution: {integrity: sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/optimize@2.0.0': + resolution: {integrity: sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/prisma-loader@8.0.1': + resolution: {integrity: sha512-bl6e5sAYe35Z6fEbgKXNrqRhXlCJYeWKBkarohgYA338/SD9eEhXtg3Cedj7fut3WyRLoQFpHzfiwxKs7XrgXg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/relay-operation-optimizer@7.0.0': + resolution: {integrity: sha512-UNlJi5y3JylhVWU4MBpL0Hun4Q7IoJwv9xYtmAz+CgRa066szzY7dcuPfxrA7cIGgG/Q6TVsKsYaiF4OHPs1Fw==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/schema@10.0.0': + resolution: {integrity: sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/url-loader@8.0.0': + resolution: {integrity: sha512-rPc9oDzMnycvz+X+wrN3PLrhMBQkG4+sd8EzaFN6dypcssiefgWKToXtRKI8HHK68n2xEq1PyrOpkjHFJB+GwA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/utils@10.0.7': + resolution: {integrity: sha512-KOdeMj6Hd/MENDaqPbws3YJl3wVy0DeYnL7PyUms5Skyf7uzI9INynDwPMhLXfSb0/ph6BXTwMd5zBtWbF8tBQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-tools/wrap@10.0.1': + resolution: {integrity: sha512-Cw6hVrKGM2OKBXeuAGltgy4tzuqQE0Nt7t/uAqnuokSXZhMHXJUb124Bnvxc2gPZn5chfJSDafDe4Cp8ZAVJgg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-typed-document-node/core@3.2.0': + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@humanwhocodes/config-array@0.11.13': + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.1': + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: 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} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.3': + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.1': + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.1.2': + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.20': + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@peculiar/asn1-schema@2.3.8': + resolution: {integrity: sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==} + + '@peculiar/json-schema@1.1.12': + resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} + engines: {node: '>=8.0.0'} + + '@peculiar/webcrypto@1.4.3': + resolution: {integrity: sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A==} + engines: {node: '>=10.12.0'} + + '@repeaterjs/repeater@3.0.4': + resolution: {integrity: sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sinonjs/commons@3.0.0': + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@tsconfig/recommended@1.0.3': + resolution: {integrity: sha512-+jby/Guq9H8O7NWgCv6X8VAiQE8Dr/nccsCtL74xyHKhu2Knu5EAKmOZj3nLCnLm1KooUzKY+5DsnGVqhM8/wQ==} + + '@types/babel__core@7.20.3': + resolution: {integrity: sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==} + + '@types/babel__generator@7.6.6': + resolution: {integrity: sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==} + + '@types/babel__template@7.4.3': + resolution: {integrity: sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==} + + '@types/babel__traverse@7.20.3': + resolution: {integrity: sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==} + + '@types/chai-subset@1.3.4': + resolution: {integrity: sha512-CCWNXrJYSUIojZ1149ksLl3AN9cmZ5djf+yUoVVV+NuYrtydItQVlL2ZDqyC6M6O9LWRnVf8yYDxbXHO2TfQZg==} + + '@types/chai@4.3.9': + resolution: {integrity: sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==} + + '@types/graceful-fs@4.1.8': + resolution: {integrity: sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==} + + '@types/graphlib@2.1.10': + resolution: {integrity: sha512-HXh0AZNqS/nL0Of6YPzzOINWp/wVOroegkKDekCdOAlMuHsc59K0gHUp+gJt+SIChKQ8OgnrZxPPf/LSdYBubA==} + + '@types/istanbul-lib-coverage@2.0.5': + resolution: {integrity: sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==} + + '@types/istanbul-lib-report@3.0.2': + resolution: {integrity: sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==} + + '@types/istanbul-reports@3.0.3': + resolution: {integrity: sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==} + + '@types/jest@29.5.6': + resolution: {integrity: sha512-/t9NnzkOpXb4Nfvg17ieHE6EeSjDS2SGSpNYfoLbUAeL/EOueU/RSdOWFpfQTXBEM7BguYW1XQ0EbM+6RlIh6w==} + + '@types/js-yaml@4.0.8': + resolution: {integrity: sha512-m6jnPk1VhlYRiLFm3f8X9Uep761f+CK8mHyS65LutH2OhmBF0BeMEjHgg05usH8PLZMWWc/BUR9RPmkvpWnyRA==} + + '@types/json-schema@7.0.14': + resolution: {integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==} + + '@types/json-stable-stringify@1.0.35': + resolution: {integrity: sha512-zlCWqsRBI0+ANN7dzGeDFJ4CHaVFTLqBNRS11GjR2mHCW6XxNtnMxhQzBKMzfsnjI8oI+kWq2vBwinyQpZVSsg==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/node@18.18.6': + resolution: {integrity: sha512-wf3Vz+jCmOQ2HV1YUJuCWdL64adYxumkrxtc+H1VUQlnQI04+5HtH+qZCOE21lBE7gIrt+CwX2Wv8Acrw5Ak6w==} + + '@types/node@20.8.7': + resolution: {integrity: sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==} + + '@types/semver@7.5.4': + resolution: {integrity: sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==} + + '@types/stack-utils@2.0.2': + resolution: {integrity: sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==} + + '@types/ws@8.5.8': + resolution: {integrity: sha512-flUksGIQCnJd6sZ1l5dqCEG/ksaoAg/eUwiLAGTJQcfgvZJKF++Ta4bJA6A5aPSJmsr+xlseHn4KLgVlNnvPTg==} + + '@types/yargs-parser@21.0.2': + resolution: {integrity: sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==} + + '@types/yargs@17.0.29': + resolution: {integrity: sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==} + + '@typescript-eslint/eslint-plugin@6.8.0': + resolution: {integrity: sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@6.8.0': + resolution: {integrity: sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@6.8.0': + resolution: {integrity: sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/type-utils@6.8.0': + resolution: {integrity: sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@6.8.0': + resolution: {integrity: sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/typescript-estree@6.8.0': + resolution: {integrity: sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@6.8.0': + resolution: {integrity: sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@6.8.0': + resolution: {integrity: sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@vitest/expect@0.34.6': + resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} + + '@vitest/runner@0.34.6': + resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} + + '@vitest/snapshot@0.34.6': + resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} + + '@vitest/spy@0.34.6': + resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} + + '@vitest/utils@0.34.6': + resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} + + '@whatwg-node/events@0.0.3': + resolution: {integrity: sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==} + + '@whatwg-node/events@0.1.1': + resolution: {integrity: sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==} + engines: {node: '>=16.0.0'} + + '@whatwg-node/fetch@0.8.8': + resolution: {integrity: sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==} + + '@whatwg-node/fetch@0.9.13': + resolution: {integrity: sha512-PPtMwhjtS96XROnSpowCQM85gCUG2m7AXZFw0PZlGbhzx2GK7f2iOXilfgIJ0uSlCuuGbOIzfouISkA7C4FJOw==} + engines: {node: '>=16.0.0'} + + '@whatwg-node/node-fetch@0.3.6': + resolution: {integrity: sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==} + + '@whatwg-node/node-fetch@0.4.19': + resolution: {integrity: sha512-AW7/m2AuweAoSXmESrYQr/KBafueScNbn2iNO0u6xFr2JZdPmYsSm5yvAXYk6yDLv+eDmSSKrf7JnFZ0CsJIdA==} + engines: {node: '>=16.0.0'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + + acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + + array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.findlastindex@1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + asn1js@3.0.5: + resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} + engines: {node: '>=12.0.0'} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + auto-bind@4.0.0: + resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} + engines: {node: '>=8'} + + available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: + resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} + + babel-preset-current-node-syntax@1.0.1: + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-fbjs@3.4.0: + resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + browserslist@4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + call-bind@1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001553: + resolution: {integrity: sha512-N0ttd6TrFfuqKNi+pMgWJTb9qrdJu4JSpgPFLe/lrD19ugC6fZgF0pUewRowDwzdDnb9V41mFcdlYgl/PyKf4A==} + + capital-case@1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + + chai@4.3.10: + resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} + engines: {node: '>=4'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + change-case-all@1.0.15: + resolution: {integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==} + + change-case@4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.1: + resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} + engines: {node: '>=6'} + + cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + constant-case@3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + + cross-spawn@6.0.5: + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + dataloader@2.2.2: + resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} + + debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + dedent@1.5.1: + resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + dependency-graph@0.11.0: + resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} + engines: {node: '>= 0.6.0'} + + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + engines: {node: '>=12'} + + dset@3.1.2: + resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} + engines: {node: '>=4'} + + electron-to-chromium@1.4.563: + resolution: {integrity: sha512-dg5gj5qOgfZNkPNeyKBZQAQitIQ/xwfIDmEQJHCbXaD9ebTZxwJXUsDYcBlAvZGZLi+/354l35J1wkmP6CqYaw==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-module-utils@2.8.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 + + eslint-plugin-import@2.29.0: + resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-simple-import-sort@10.0.0: + resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} + peerDependencies: + eslint: '>=5.0.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} + + 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@8.52.0: + resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + extract-files@11.0.0: + resolution: {integrity: sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==} + engines: {node: ^12.20 || >= 14.13} + + fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + + fast-url-parser@1.1.3: + resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} + + fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fbjs-css-vars@1.0.2: + resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} + + fbjs@3.0.5: + resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.1.1: + resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} + engines: {node: '>=12.0.0'} + + flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.2: + resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + engines: {node: '>=8'} + + globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + graphlib@2.1.8: + resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} + + graphql-config@5.0.3: + resolution: {integrity: sha512-BNGZaoxIBkv9yy6Y7omvsaBUHOzfFcII3UN++tpH8MGOKFPFkCPZuwx09ggANMt8FgyWP1Od8SWPmrUEZca4NQ==} + engines: {node: '>= 16.0.0'} + peerDependencies: + cosmiconfig-toml-loader: ^1.0.0 + graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + cosmiconfig-toml-loader: + optional: true + + graphql-request@6.1.0: + resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} + peerDependencies: + graphql: 14 - 16 + + graphql-tag@2.12.6: + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + + graphql-ws@5.14.1: + resolution: {integrity: sha512-aqkls1espsygP1PfkAuuLIV96IbztQ6EaADse97pw8wRIMT3+AL/OYfS8V2iCRkc0gzckitoDRGCQEdnySggiA==} + engines: {node: '>=10'} + peerDependencies: + graphql: '>=0.11 <=16' + + graphql@16.8.1: + resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + + has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + + hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + + header-case@2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-proxy-agent@7.0.0: + resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.2: + resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} + engines: {node: '>= 14'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + + immutable@3.7.6: + resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} + engines: {node: '>=0.8.0'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-from@4.0.0: + resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} + engines: {node: '>=12.2'} + + import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + + internal-slot@1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + + is-absolute@1.0.0: + resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} + engines: {node: '>=0.10.0'} + + is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-lower-case@2.0.2: + resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} + + is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-relative@1.0.0: + resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} + engines: {node: '>=0.10.0'} + + is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + + is-unc-path@1.0.0: + resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} + engines: {node: '>=0.10.0'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-upper-case@2.0.2: + resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isomorphic-ws@5.0.0: + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + + istanbul-lib-coverage@3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.1: + resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jiti@1.20.0: + resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} + hasBin: true + + jose@4.15.4: + resolution: {integrity: sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json-stable-stringify@1.0.2: + resolution: {integrity: sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==} + + json-to-pretty-yaml@1.2.2: + resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} + engines: {node: '>= 0.2.0'} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + + jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + listr2@4.0.5: + resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} + engines: {node: '>=12'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + + load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + + local-pkg@0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lower-case-first@2.0.2: + resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + magic-string@0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + meros@1.3.0: + resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} + engines: {node: '>=13'} + peerDependencies: + '@types/node': '>=13' + peerDependenciesMeta: + '@types/node': + optional: true + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@4.2.3: + resolution: {integrity: sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mlly@1.4.2: + resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-path@2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-all@4.1.5: + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} + engines: {node: '>= 4'} + hasBin: true + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + nullthrows@1.1.1: + resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.1: + resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} + + object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-filepath@1.0.2: + resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} + engines: {node: '>=0.8'} + + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + path-case@3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-root-regex@0.1.2: + resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} + engines: {node: '>=0.10.0'} + + path-root@0.1.1: + resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} + engines: {node: '>=0.10.0'} + + path-type@3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@1.1.1: + resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.3.1: + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + engines: {node: '>=0.10'} + hasBin: true + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.0.3: + resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} + engines: {node: '>=14'} + hasBin: 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} + + promise@7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + property-expr@2.0.6: + resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} + + punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + + punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + + pure-rand@6.0.4: + resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} + + pvtsutils@1.3.5: + resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} + + pvutils@1.1.3: + resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} + engines: {node: '>=6.0.0'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + + read-pkg@3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + + regexp.prototype.flags@1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + + relay-runtime@12.0.0: + resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} + + remedial@1.0.8: + resolution: {integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==} + + remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + + remove-trailing-spaces@1.0.8: + resolution: {integrity: sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + + rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scuid@1.1.0: + resolution: {integrity: sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + sentence-case@3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-function-length@1.1.1: + resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + + side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signedsource@1.0.0: + resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + + sponge-case@1.0.1: + resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.4.3: + resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + string-env-interpolation@1.0.1: + resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string.prototype.padend@3.1.5: + resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + + string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + swap-case@2.0.2: + resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tiny-case@1.0.3: + resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} + + tinybench@2.5.1: + resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==} + + tinypool@0.7.0: + resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} + engines: {node: '>=14.0.0'} + + tinyspy@2.2.0: + resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} + engines: {node: '>=14.0.0'} + + title-case@3.0.3: + resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toposort@2.0.2: + resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-api-utils@1.0.3: + resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + + ts-jest@29.1.1: + resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + + ts-log@2.2.5: + resolution: {integrity: sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==} + + tsconfig-paths@3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + + tslib@2.5.3: + resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + + typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + + ua-parser-js@1.0.36: + resolution: {integrity: sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw==} + + ufo@1.3.1: + resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==} + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + unc-path-regex@0.1.2: + resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} + engines: {node: '>=0.10.0'} + + undici-types@5.25.3: + resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==} + + unixify@1.0.0: + resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} + engines: {node: '>=0.10.0'} + + update-browserslist-db@1.0.13: + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + upper-case-first@2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + + upper-case@2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + urlpattern-polyfill@8.0.2: + resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} + + urlpattern-polyfill@9.0.0: + resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + v8-to-istanbul@9.1.3: + resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==} + engines: {node: '>=10.12.0'} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + value-or-promise@1.0.12: + resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} + engines: {node: '>=12'} + + vite-node@0.34.6: + resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} + engines: {node: '>=v14.18.0'} + hasBin: true + + vite@4.5.0: + resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + 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 + + vitest@0.34.6: + resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web-streams-polyfill@3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} + + webcrypto-core@1.7.7: + resolution: {integrity: sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + + which-typed-array@1.1.13: + resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + ws@8.14.2: + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml-ast-parser@0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + + yaml@2.3.3: + resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==} + engines: {node: '>= 14'} + + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + + yup@1.3.2: + resolution: {integrity: sha512-6KCM971iQtJ+/KUaHdrhVr2LDkfhBtFPRnsG1P8F4q3uUVQ2RfEM9xekpha9aA4GXWJevjM10eDcPQ1FfWlmaQ==} + +snapshots: + + '@aashutoshrathi/word-wrap@1.2.6': {} + + '@ampproject/remapping@2.2.1': + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + + '@ardatan/relay-compiler@12.0.0(graphql@16.8.1)': + dependencies: + '@babel/core': 7.23.2 + '@babel/generator': 7.23.0 + '@babel/parser': 7.23.0 + '@babel/runtime': 7.23.2 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + babel-preset-fbjs: 3.4.0(@babel/core@7.23.2) + chalk: 4.1.2 + fb-watchman: 2.0.2 + fbjs: 3.0.5 + glob: 7.2.3 + graphql: 16.8.1 + immutable: 3.7.6 + invariant: 2.2.4 + nullthrows: 1.1.1 + relay-runtime: 12.0.0 + signedsource: 1.0.0 + yargs: 15.4.1 + transitivePeerDependencies: + - encoding + - supports-color + + '@ardatan/sync-fetch@0.0.1': + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + '@babel/code-frame@7.22.13': + dependencies: + '@babel/highlight': 7.22.20 + chalk: 2.4.2 + + '@babel/compat-data@7.23.2': {} + + '@babel/core@7.23.2': + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/helpers': 7.23.2 + '@babel/parser': 7.23.0 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.23.0': + dependencies: + '@babel/types': 7.23.0 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + jsesc: 2.5.2 + + '@babel/helper-annotate-as-pure@7.22.5': + dependencies: + '@babel/types': 7.23.0 + + '@babel/helper-compilation-targets@7.22.15': + dependencies: + '@babel/compat-data': 7.23.2 + '@babel/helper-validator-option': 7.22.15 + browserslist: 4.22.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + + '@babel/helper-environment-visitor@7.22.20': {} + + '@babel/helper-function-name@7.23.0': + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 + + '@babel/helper-hoist-variables@7.22.5': + dependencies: + '@babel/types': 7.23.0 + + '@babel/helper-member-expression-to-functions@7.23.0': + dependencies: + '@babel/types': 7.23.0 + + '@babel/helper-module-imports@7.22.15': + dependencies: + '@babel/types': 7.23.0 + + '@babel/helper-module-transforms@7.23.0(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + + '@babel/helper-optimise-call-expression@7.22.5': + dependencies: + '@babel/types': 7.23.0 + + '@babel/helper-plugin-utils@7.22.5': {} + + '@babel/helper-replace-supers@7.22.20(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + + '@babel/helper-simple-access@7.22.5': + dependencies: + '@babel/types': 7.23.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': + dependencies: + '@babel/types': 7.23.0 + + '@babel/helper-split-export-declaration@7.22.6': + dependencies: + '@babel/types': 7.23.0 + + '@babel/helper-string-parser@7.22.5': {} + + '@babel/helper-validator-identifier@7.22.20': {} + + '@babel/helper-validator-option@7.22.15': {} + + '@babel/helpers@7.23.2': + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + transitivePeerDependencies: + - supports-color + + '@babel/highlight@7.22.20': + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + + '@babel/parser@7.23.0': + dependencies: + '@babel/types': 7.23.0 + + '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.23.2)': + dependencies: + '@babel/compat-data': 7.23.2 + '@babel/core': 7.23.2 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2) + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-flow@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-classes@7.22.15(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + + '@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 + + '@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.23.2) + + '@babel/plugin-transform-for-of@7.22.15(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-function-name@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-literals@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + + '@babel/plugin-transform-object-super@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.2) + + '@babel/plugin-transform-parameters@7.22.15(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2) + '@babel/types': 7.23.0 + + '@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-spread@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + + '@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.23.2)': + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/runtime@7.23.2': + dependencies: + regenerator-runtime: 0.14.0 + + '@babel/template@7.22.15': + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + + '@babel/traverse@7.23.2': + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.23.0': + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + '@bcoe/v8-coverage@0.2.3': {} + + '@esbuild/android-arm64@0.18.20': + optional: true + + '@esbuild/android-arm@0.18.20': + optional: true + + '@esbuild/android-x64@0.18.20': + optional: true + + '@esbuild/darwin-arm64@0.18.20': + optional: true + + '@esbuild/darwin-x64@0.18.20': + optional: true + + '@esbuild/freebsd-arm64@0.18.20': + optional: true + + '@esbuild/freebsd-x64@0.18.20': + optional: true + + '@esbuild/linux-arm64@0.18.20': + optional: true + + '@esbuild/linux-arm@0.18.20': + optional: true + + '@esbuild/linux-ia32@0.18.20': + optional: true + + '@esbuild/linux-loong64@0.18.20': + optional: true + + '@esbuild/linux-mips64el@0.18.20': + optional: true + + '@esbuild/linux-ppc64@0.18.20': + optional: true + + '@esbuild/linux-riscv64@0.18.20': + optional: true + + '@esbuild/linux-s390x@0.18.20': + optional: true + + '@esbuild/linux-x64@0.18.20': + optional: true + + '@esbuild/netbsd-x64@0.18.20': + optional: true + + '@esbuild/openbsd-x64@0.18.20': + optional: true + + '@esbuild/sunos-x64@0.18.20': + optional: true + + '@esbuild/win32-arm64@0.18.20': + optional: true + + '@esbuild/win32-ia32@0.18.20': + optional: true + + '@esbuild/win32-x64@0.18.20': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.52.0)': + dependencies: + eslint: 8.52.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.9.1': {} + + '@eslint/eslintrc@2.1.2': + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.23.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 + + '@eslint/js@8.52.0': {} + + '@graphql-codegen/cli@5.0.0(@types/node@18.18.6)(graphql@16.8.1)(typescript@5.2.2)': + dependencies: + '@babel/generator': 7.23.0 + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 + '@graphql-codegen/core': 4.0.0(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) + '@graphql-tools/apollo-engine-loader': 8.0.0(graphql@16.8.1) + '@graphql-tools/code-file-loader': 8.0.2(graphql@16.8.1) + '@graphql-tools/git-loader': 8.0.2(graphql@16.8.1) + '@graphql-tools/github-loader': 8.0.0(@types/node@18.18.6)(graphql@16.8.1) + '@graphql-tools/graphql-file-loader': 8.0.0(graphql@16.8.1) + '@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1) + '@graphql-tools/load': 8.0.0(graphql@16.8.1) + '@graphql-tools/prisma-loader': 8.0.1(@types/node@18.18.6)(graphql@16.8.1) + '@graphql-tools/url-loader': 8.0.0(@types/node@18.18.6)(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@whatwg-node/fetch': 0.8.8 + chalk: 4.1.2 + cosmiconfig: 8.3.6(typescript@5.2.2) + debounce: 1.2.1 + detect-indent: 6.1.0 + graphql: 16.8.1 + graphql-config: 5.0.3(@types/node@18.18.6)(graphql@16.8.1)(typescript@5.2.2) + inquirer: 8.2.6 + is-glob: 4.0.3 + jiti: 1.20.0 + json-to-pretty-yaml: 1.2.2 + listr2: 4.0.5 + log-symbols: 4.1.0 + micromatch: 4.0.5 + shell-quote: 1.8.1 + string-env-interpolation: 1.0.1 + ts-log: 2.2.5 + tslib: 2.6.2 + yaml: 2.3.3 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - cosmiconfig-toml-loader + - encoding + - enquirer + - supports-color + - typescript + - utf-8-validate + + '@graphql-codegen/core@4.0.0(graphql@16.8.1)': + dependencies: + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.5.3 + + '@graphql-codegen/plugin-helpers@5.0.1(graphql@16.8.1)': + dependencies: + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + change-case-all: 1.0.15 + common-tags: 1.8.2 + graphql: 16.8.1 + import-from: 4.0.0 + lodash: 4.17.21 + tslib: 2.5.3 + + '@graphql-codegen/schema-ast@4.0.0(graphql@16.8.1)': + dependencies: + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.5.3 + + '@graphql-codegen/typescript@4.0.1(graphql@16.8.1)': + dependencies: + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) + '@graphql-codegen/schema-ast': 4.0.0(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 4.0.1(graphql@16.8.1) + auto-bind: 4.0.0 + graphql: 16.8.1 + tslib: 2.5.3 + transitivePeerDependencies: + - encoding + - supports-color + + '@graphql-codegen/visitor-plugin-common@4.0.1(graphql@16.8.1)': + dependencies: + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) + '@graphql-tools/optimize': 2.0.0(graphql@16.8.1) + '@graphql-tools/relay-operation-optimizer': 7.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + auto-bind: 4.0.0 + change-case-all: 1.0.15 + dependency-graph: 0.11.0 + graphql: 16.8.1 + graphql-tag: 2.12.6(graphql@16.8.1) + parse-filepath: 1.0.2 + tslib: 2.5.3 + transitivePeerDependencies: + - encoding + - supports-color + + '@graphql-tools/apollo-engine-loader@8.0.0(graphql@16.8.1)': + dependencies: '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - '@whatwg-node/fetch': 0.9.0 - graphql: 16.7.1 - tslib: 2.6.1 + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@whatwg-node/fetch': 0.9.13 + graphql: 16.8.1 + tslib: 2.6.2 transitivePeerDependencies: - encoding - dev: true - /@graphql-tools/batch-execute@9.0.0(graphql@16.7.1): - resolution: {integrity: sha512-lT9/1XmPSYzBcEybXPLsuA6C5E0t8438PVUELABcqdvwHgZ3VOOx29MLBEqhr2oewOlDChH6PXNkfxoOoAuzRg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/batch-execute@9.0.2(graphql@16.8.1)': dependencies: - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) dataloader: 2.2.2 - graphql: 16.7.1 - tslib: 2.6.1 + graphql: 16.8.1 + tslib: 2.6.2 value-or-promise: 1.0.12 - dev: true - /@graphql-tools/code-file-loader@8.0.0(@babel/core@7.22.5)(graphql@16.7.1): - resolution: {integrity: sha512-nq36yQnUVp6Roti+RFatInRogZzbwdFKZK1YBCmP3XpUvoOBbWaHaLKxVE9mU5lb9nL99zKzhq6gfh5syzxjJQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/code-file-loader@8.0.2(graphql@16.8.1)': dependencies: - '@graphql-tools/graphql-tag-pluck': 8.0.0(@babel/core@7.22.5)(graphql@16.7.1) - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) + '@graphql-tools/graphql-tag-pluck': 8.0.2(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) globby: 11.1.0 - graphql: 16.7.1 - tslib: 2.6.1 + graphql: 16.8.1 + tslib: 2.6.2 unixify: 1.0.0 transitivePeerDependencies: - - '@babel/core' - supports-color - dev: true - /@graphql-tools/delegate@10.0.0(graphql@16.7.1): - resolution: {integrity: sha512-ZW5/7Q0JqUM+guwn8/cM/1Hz16Zvj6WR6r3gnOwoPO7a9bCbe8QTCk4itT/EO+RiGT8RLUPYaunWR9jxfNqqOA==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/delegate@10.0.3(graphql@16.8.1)': dependencies: - '@graphql-tools/batch-execute': 9.0.0(graphql@16.7.1) - '@graphql-tools/executor': 1.1.0(graphql@16.7.1) - '@graphql-tools/schema': 10.0.0(graphql@16.7.1) - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) + '@graphql-tools/batch-execute': 9.0.2(graphql@16.8.1) + '@graphql-tools/executor': 1.2.0(graphql@16.8.1) + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) dataloader: 2.2.2 - graphql: 16.7.1 - tslib: 2.6.1 - value-or-promise: 1.0.12 - dev: true - - /@graphql-tools/executor-graphql-ws@1.0.0(graphql@16.7.1): - resolution: {integrity: sha512-voczXmNcEzZKk6dS4pCwN0XCXvDiAVm9rj+54oz7X04IsHBJmTUul1YhCbJie1xUvN1jmgEJ14lfD92tMMMTmQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - '@repeaterjs/repeater': 3.0.4 - '@types/ws': 8.5.5 - graphql: 16.7.1 - graphql-ws: 5.13.1(graphql@16.7.1) - isomorphic-ws: 5.0.0(ws@8.13.0) - tslib: 2.6.1 - ws: 8.13.0 + graphql: 16.8.1 + tslib: 2.6.2 + + '@graphql-tools/executor-graphql-ws@1.1.0(graphql@16.8.1)': + dependencies: + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@types/ws': 8.5.8 + graphql: 16.8.1 + graphql-ws: 5.14.1(graphql@16.8.1) + isomorphic-ws: 5.0.0(ws@8.14.2) + tslib: 2.6.2 + ws: 8.14.2 transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true - /@graphql-tools/executor-http@1.0.0(@types/node@18.17.5)(graphql@16.7.1): - resolution: {integrity: sha512-7R9IWRN1Iszyayd4qgguITLLTmRUZ3wSS5umK0xwShB8mFQ5cSsVx6rewPhGIwGEenN6e9ahwcGX9ytuLlw55g==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor-http@1.0.3(@types/node@18.18.6)(graphql@16.8.1)': dependencies: - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) '@repeaterjs/repeater': 3.0.4 - '@whatwg-node/fetch': 0.9.0 - dset: 3.1.2 + '@whatwg-node/fetch': 0.9.13 extract-files: 11.0.0 - graphql: 16.7.1 - meros: 1.2.1(@types/node@18.17.5) - tslib: 2.6.1 + graphql: 16.8.1 + meros: 1.3.0(@types/node@18.18.6) + tslib: 2.6.2 value-or-promise: 1.0.12 transitivePeerDependencies: - '@types/node' - dev: true - /@graphql-tools/executor-legacy-ws@1.0.0(graphql@16.7.1): - resolution: {integrity: sha512-8c0wlhYz7G6imuWqHqjpveflN8IVL3gXIxel5lzpAvPvxsSXpiNig3jADkIBB+eaxzR9R1lbwxqonxPUGI4CdQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor-legacy-ws@1.0.4(graphql@16.8.1)': dependencies: - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - '@types/ws': 8.5.5 - graphql: 16.7.1 - isomorphic-ws: 5.0.0(ws@8.13.0) - tslib: 2.6.1 - ws: 8.13.0 + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@types/ws': 8.5.8 + graphql: 16.8.1 + isomorphic-ws: 5.0.0(ws@8.14.2) + tslib: 2.6.2 + ws: 8.14.2 transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true - /@graphql-tools/executor@1.1.0(graphql@16.7.1): - resolution: {integrity: sha512-+1wmnaUHETSYxiK/ELsT60x584Rw3QKBB7F/7fJ83HKPnLifmE2Dm/K9Eyt6L0Ppekf1jNUbWBpmBGb8P5hAeg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/executor@1.2.0(graphql@16.8.1)': dependencies: - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - '@graphql-typed-document-node/core': 3.2.0(graphql@16.7.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) '@repeaterjs/repeater': 3.0.4 - graphql: 16.7.1 - tslib: 2.6.1 + graphql: 16.8.1 + tslib: 2.6.2 value-or-promise: 1.0.12 - dev: true - /@graphql-tools/git-loader@8.0.0(@babel/core@7.22.5)(graphql@16.7.1): - resolution: {integrity: sha512-0QAzWywOdWC4vozYFi4OuAxv1QvHo6PwLY+D8DCQn+knxWZAsJe86SESxBkQ5R03yHFWPaiBVWKDB+lxxgC7Uw==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/git-loader@8.0.2(graphql@16.8.1)': dependencies: - '@graphql-tools/graphql-tag-pluck': 8.0.0(@babel/core@7.22.5)(graphql@16.7.1) - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - graphql: 16.7.1 + '@graphql-tools/graphql-tag-pluck': 8.0.2(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + graphql: 16.8.1 is-glob: 4.0.3 micromatch: 4.0.5 - tslib: 2.6.1 + tslib: 2.6.2 unixify: 1.0.0 transitivePeerDependencies: - - '@babel/core' - supports-color - dev: true - /@graphql-tools/github-loader@8.0.0(@babel/core@7.22.5)(@types/node@18.17.5)(graphql@16.7.1): - resolution: {integrity: sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/github-loader@8.0.0(@types/node@18.18.6)(graphql@16.8.1)': dependencies: '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/executor-http': 1.0.0(@types/node@18.17.5)(graphql@16.7.1) - '@graphql-tools/graphql-tag-pluck': 8.0.0(@babel/core@7.22.5)(graphql@16.7.1) - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - '@whatwg-node/fetch': 0.9.0 - graphql: 16.7.1 - tslib: 2.6.1 + '@graphql-tools/executor-http': 1.0.3(@types/node@18.18.6)(graphql@16.8.1) + '@graphql-tools/graphql-tag-pluck': 8.0.2(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@whatwg-node/fetch': 0.9.13 + graphql: 16.8.1 + tslib: 2.6.2 value-or-promise: 1.0.12 transitivePeerDependencies: - - '@babel/core' - '@types/node' - encoding - supports-color - dev: true - /@graphql-tools/graphql-file-loader@8.0.0(graphql@16.7.1): - resolution: {integrity: sha512-wRXj9Z1IFL3+zJG1HWEY0S4TXal7+s1vVhbZva96MSp0kbb/3JBF7j0cnJ44Eq0ClccMgGCDFqPFXty4JlpaPg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/graphql-file-loader@8.0.0(graphql@16.8.1)': dependencies: - '@graphql-tools/import': 7.0.0(graphql@16.7.1) - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) + '@graphql-tools/import': 7.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) globby: 11.1.0 - graphql: 16.7.1 - tslib: 2.6.1 + graphql: 16.8.1 + tslib: 2.6.2 unixify: 1.0.0 - dev: true - /@graphql-tools/graphql-tag-pluck@8.0.0(@babel/core@7.22.5)(graphql@16.7.1): - resolution: {integrity: sha512-/xFXF7RwWf1UDAnUN/984Q1clRxRcWwO7lxi+BDzuwN14DJb424FVAmFOroBeeFWQNdj8qtNGLWhAbx23khvHQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/graphql-tag-pluck@8.0.2(graphql@16.8.1)': dependencies: - '@babel/parser': 7.22.5 - '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.22.5) - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - graphql: 16.7.1 - tslib: 2.6.1 + '@babel/core': 7.23.2 + '@babel/parser': 7.23.0 + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.23.2) + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 transitivePeerDependencies: - - '@babel/core' - supports-color - dev: true - /@graphql-tools/import@7.0.0(graphql@16.7.1): - resolution: {integrity: sha512-NVZiTO8o1GZs6OXzNfjB+5CtQtqsZZpQOq+Uu0w57kdUkT4RlQKlwhT8T81arEsbV55KpzkpFsOZP7J1wdmhBw==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/import@7.0.0(graphql@16.8.1)': dependencies: - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - graphql: 16.7.1 + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + graphql: 16.8.1 resolve-from: 5.0.0 - tslib: 2.6.1 - dev: true + tslib: 2.6.2 - /@graphql-tools/json-file-loader@8.0.0(graphql@16.7.1): - resolution: {integrity: sha512-ki6EF/mobBWJjAAC84xNrFMhNfnUFD6Y0rQMGXekrUgY0NdeYXHU0ZUgHzC9O5+55FslqUmAUHABePDHTyZsLg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/json-file-loader@8.0.0(graphql@16.8.1)': dependencies: - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) globby: 11.1.0 - graphql: 16.7.1 - tslib: 2.6.1 + graphql: 16.8.1 + tslib: 2.6.2 unixify: 1.0.0 - dev: true - /@graphql-tools/load@8.0.0(graphql@16.7.1): - resolution: {integrity: sha512-Cy874bQJH0FP2Az7ELPM49iDzOljQmK1PPH6IuxsWzLSTxwTqd8dXA09dcVZrI7/LsN26heTY2R8q2aiiv0GxQ==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/load@8.0.0(graphql@16.8.1)': dependencies: - '@graphql-tools/schema': 10.0.0(graphql@16.7.1) - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - graphql: 16.7.1 + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + graphql: 16.8.1 p-limit: 3.1.0 - tslib: 2.6.1 - dev: true + tslib: 2.6.2 - /@graphql-tools/merge@9.0.0(graphql@16.7.1): - resolution: {integrity: sha512-J7/xqjkGTTwOJmaJQJ2C+VDBDOWJL3lKrHJN4yMaRLAJH3PosB7GiPRaSDZdErs0+F77sH2MKs2haMMkywzx7Q==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/merge@9.0.0(graphql@16.8.1)': dependencies: - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - graphql: 16.7.1 - tslib: 2.6.1 - dev: true + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 - /@graphql-tools/optimize@2.0.0(graphql@16.7.1): - resolution: {integrity: sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/optimize@2.0.0(graphql@16.8.1)': dependencies: - graphql: 16.7.1 - tslib: 2.6.1 + graphql: 16.8.1 + tslib: 2.6.2 - /@graphql-tools/prisma-loader@8.0.0(@types/node@18.17.5)(graphql@16.7.1): - resolution: {integrity: sha512-AvvVFj+E+e8kG5QaVcitLTr7VZOa5CmvJ8HwlZslmg9OD1qoVDvhroGoR5/3y5e6n1xUjCWlO1xoo3QBseMuSw==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/prisma-loader@8.0.1(@types/node@18.18.6)(graphql@16.8.1)': dependencies: - '@graphql-tools/url-loader': 8.0.0(@types/node@18.17.5)(graphql@16.7.1) - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - '@types/js-yaml': 4.0.5 - '@types/json-stable-stringify': 1.0.33 - '@whatwg-node/fetch': 0.9.0 + '@graphql-tools/url-loader': 8.0.0(@types/node@18.18.6)(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@types/js-yaml': 4.0.8 + '@types/json-stable-stringify': 1.0.35 + '@whatwg-node/fetch': 0.9.13 chalk: 4.1.2 debug: 4.3.4 - dotenv: 16.0.1 - graphql: 16.7.1 - graphql-request: 6.1.0(graphql@16.7.1) - http-proxy-agent: 6.1.0 - https-proxy-agent: 6.2.1 - jose: 4.13.1 + dotenv: 16.3.1 + graphql: 16.8.1 + graphql-request: 6.1.0(graphql@16.8.1) + http-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.2 + jose: 4.15.4 js-yaml: 4.1.0 - json-stable-stringify: 1.0.1 + json-stable-stringify: 1.0.2 lodash: 4.17.21 scuid: 1.1.0 - tslib: 2.6.1 + tslib: 2.6.2 yaml-ast-parser: 0.0.43 transitivePeerDependencies: - '@types/node' @@ -1412,164 +4159,113 @@ packages: - encoding - supports-color - utf-8-validate - dev: true - /@graphql-tools/relay-operation-optimizer@7.0.0(graphql@16.7.1): - resolution: {integrity: sha512-UNlJi5y3JylhVWU4MBpL0Hun4Q7IoJwv9xYtmAz+CgRa066szzY7dcuPfxrA7cIGgG/Q6TVsKsYaiF4OHPs1Fw==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/relay-operation-optimizer@7.0.0(graphql@16.8.1)': dependencies: - '@ardatan/relay-compiler': 12.0.0(graphql@16.7.1) - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - graphql: 16.7.1 - tslib: 2.6.1 + '@ardatan/relay-compiler': 12.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 transitivePeerDependencies: - encoding - supports-color - /@graphql-tools/schema@10.0.0(graphql@16.7.1): - resolution: {integrity: sha512-kf3qOXMFcMs2f/S8Y3A8fm/2w+GaHAkfr3Gnhh2LOug/JgpY/ywgFVxO3jOeSpSEdoYcDKLcXVjMigNbY4AdQg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/schema@10.0.0(graphql@16.8.1)': dependencies: - '@graphql-tools/merge': 9.0.0(graphql@16.7.1) - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - graphql: 16.7.1 - tslib: 2.6.1 + '@graphql-tools/merge': 9.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 value-or-promise: 1.0.12 - dev: true - /@graphql-tools/url-loader@8.0.0(@types/node@18.17.5)(graphql@16.7.1): - resolution: {integrity: sha512-rPc9oDzMnycvz+X+wrN3PLrhMBQkG4+sd8EzaFN6dypcssiefgWKToXtRKI8HHK68n2xEq1PyrOpkjHFJB+GwA==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/url-loader@8.0.0(@types/node@18.18.6)(graphql@16.8.1)': dependencies: '@ardatan/sync-fetch': 0.0.1 - '@graphql-tools/delegate': 10.0.0(graphql@16.7.1) - '@graphql-tools/executor-graphql-ws': 1.0.0(graphql@16.7.1) - '@graphql-tools/executor-http': 1.0.0(@types/node@18.17.5)(graphql@16.7.1) - '@graphql-tools/executor-legacy-ws': 1.0.0(graphql@16.7.1) - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - '@graphql-tools/wrap': 10.0.0(graphql@16.7.1) - '@types/ws': 8.5.5 - '@whatwg-node/fetch': 0.9.0 - graphql: 16.7.1 - isomorphic-ws: 5.0.0(ws@8.13.0) - tslib: 2.6.1 + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/executor-graphql-ws': 1.1.0(graphql@16.8.1) + '@graphql-tools/executor-http': 1.0.3(@types/node@18.18.6)(graphql@16.8.1) + '@graphql-tools/executor-legacy-ws': 1.0.4(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + '@graphql-tools/wrap': 10.0.1(graphql@16.8.1) + '@types/ws': 8.5.8 + '@whatwg-node/fetch': 0.9.13 + graphql: 16.8.1 + isomorphic-ws: 5.0.0(ws@8.14.2) + tslib: 2.6.2 value-or-promise: 1.0.12 - ws: 8.13.0 + ws: 8.14.2 transitivePeerDependencies: - '@types/node' - bufferutil - encoding - utf-8-validate - dev: true - /@graphql-tools/utils@10.0.5(graphql@16.7.1): - resolution: {integrity: sha512-ZTioQqg9z9eCG3j+KDy54k1gp6wRIsLqkx5yi163KVvXVkfjsrdErCyZjrEug21QnKE9piP4tyxMpMMOT1RuRw==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/utils@10.0.7(graphql@16.8.1)': dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.7.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) dset: 3.1.2 - graphql: 16.7.1 - tslib: 2.6.1 + graphql: 16.8.1 + tslib: 2.6.2 - /@graphql-tools/wrap@10.0.0(graphql@16.7.1): - resolution: {integrity: sha512-HDOeUUh6UhpiH0WPJUQl44ODt1x5pnMUbOJZ7GjTdGQ7LK0AgVt3ftaAQ9duxLkiAtYJmu5YkULirfZGj4HzDg==} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/wrap@10.0.1(graphql@16.8.1)': dependencies: - '@graphql-tools/delegate': 10.0.0(graphql@16.7.1) - '@graphql-tools/schema': 10.0.0(graphql@16.7.1) - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - graphql: 16.7.1 - tslib: 2.6.1 + '@graphql-tools/delegate': 10.0.3(graphql@16.8.1) + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.6.2 value-or-promise: 1.0.12 - dev: true - /@graphql-typed-document-node/core@3.2.0(graphql@16.7.1): - resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-typed-document-node/core@3.2.0(graphql@16.8.1)': dependencies: - graphql: 16.7.1 + graphql: 16.8.1 - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} - engines: {node: '>=10.10.0'} + '@humanwhocodes/config-array@0.11.13': dependencies: '@humanwhocodes/object-schema': 2.0.1 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true + '@humanwhocodes/module-importer@1.0.1': {} - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - dev: true + '@humanwhocodes/object-schema@2.0.1': {} - /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} + '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 js-yaml: 3.14.1 resolve-from: 5.0.0 - dev: true - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: true + '@istanbuljs/schema@0.1.3': {} - /@jest/console@29.7.0: - resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 18.17.5 + '@types/node': 20.8.7 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - dev: true - /@jest/core@29.7.0: - resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + '@jest/core@29.7.0': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.17.5 + '@types/node': 20.8.7 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 3.3.0 + ci-info: 3.9.0 exit: 0.1.2 - graceful-fs: 4.2.9 + graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@18.17.5) + jest-config: 29.7.0(@types/node@20.8.7) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1589,50 +4285,35 @@ packages: - babel-plugin-macros - supports-color - ts-node - dev: true - /@jest/environment@29.7.0: - resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/environment@29.7.0': dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.17.5 + '@types/node': 20.8.7 jest-mock: 29.7.0 - dev: true - /@jest/expect-utils@29.7.0: - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/expect-utils@29.7.0': dependencies: jest-get-type: 29.6.3 - dev: true - /@jest/expect@29.7.0: - resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/expect@29.7.0': dependencies: expect: 29.7.0 jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color - dev: true - /@jest/fake-timers@29.7.0: - resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/fake-timers@29.7.0': dependencies: '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.0.2 - '@types/node': 18.17.5 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 20.8.7 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 - dev: true - /@jest/globals@29.7.0: - resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/globals@29.7.0': dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 @@ -1640,347 +4321,229 @@ packages: jest-mock: 29.7.0 transitivePeerDependencies: - supports-color - dev: true - /@jest/reporters@29.7.0: - resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + '@jest/reporters@29.7.0': dependencies: '@bcoe/v8-coverage': 0.2.3 '@jest/console': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.18 - '@types/node': 18.17.5 + '@jridgewell/trace-mapping': 0.3.20 + '@types/node': 20.8.7 chalk: 4.1.2 - collect-v8-coverage: 1.0.1 + collect-v8-coverage: 1.0.2 exit: 0.1.2 glob: 7.2.3 - graceful-fs: 4.2.9 + graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 6.0.0 - istanbul-lib-report: 3.0.0 + istanbul-lib-instrument: 6.0.1 + istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.3 + istanbul-reports: 3.1.6 jest-message-util: 29.7.0 jest-util: 29.7.0 jest-worker: 29.7.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - v8-to-istanbul: 9.0.1 + v8-to-istanbul: 9.1.3 transitivePeerDependencies: - supports-color - 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} + '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.8 - dev: true - /@jest/source-map@29.6.3: - resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/source-map@29.6.3': dependencies: - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.20 callsites: 3.1.0 - graceful-fs: 4.2.9 - dev: true + graceful-fs: 4.2.11 - /@jest/test-result@29.7.0: - resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/test-result@29.7.0': dependencies: '@jest/console': 29.7.0 '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.4 - collect-v8-coverage: 1.0.1 - dev: true + '@types/istanbul-lib-coverage': 2.0.5 + collect-v8-coverage: 1.0.2 - /@jest/test-sequencer@29.7.0: - resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/test-sequencer@29.7.0': dependencies: '@jest/test-result': 29.7.0 - graceful-fs: 4.2.9 + graceful-fs: 4.2.11 jest-haste-map: 29.7.0 slash: 3.0.0 - dev: true - /@jest/transform@29.7.0: - resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.23.2 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.20 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.9 + graceful-fs: 4.2.11 jest-haste-map: 29.7.0 jest-regex-util: 29.6.3 jest-util: 29.7.0 micromatch: 4.0.5 - pirates: 4.0.4 + pirates: 4.0.6 slash: 3.0.0 write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color - dev: true - /@jest/types@29.6.3: - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/types@29.6.3': dependencies: '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 18.17.5 - '@types/yargs': 17.0.10 + '@types/istanbul-lib-coverage': 2.0.5 + '@types/istanbul-reports': 3.0.3 + '@types/node': 20.8.7 + '@types/yargs': 17.0.29 chalk: 4.1.2 - dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.3': dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.18 - - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} + '@jridgewell/trace-mapping': 0.3.20 - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} + '@jridgewell/resolve-uri@3.1.1': {} - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + '@jridgewell/set-array@1.1.2': {} - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.4.15': {} - /@jridgewell/trace-mapping@0.3.18: - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + '@jridgewell/trace-mapping@0.3.20': dependencies: - '@jridgewell/resolve-uri': 3.1.0 - '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true + '@nodelib/fs.stat@2.0.5': {} - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 - dev: true + fastq: 1.15.0 - /@peculiar/asn1-schema@2.2.0: - resolution: {integrity: sha512-1ENEJNY7Lwlua/1wvzpYP194WtjQBfFxvde2FlzfBFh/ln6wvChrtxlORhbKEnYswzn6fOC4c7HdC5izLPMTJg==} + '@peculiar/asn1-schema@2.3.8': dependencies: asn1js: 3.0.5 - pvtsutils: 1.3.2 - tslib: 2.6.1 - dev: true + pvtsutils: 1.3.5 + tslib: 2.6.2 - /@peculiar/json-schema@1.1.12: - resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} - engines: {node: '>=8.0.0'} + '@peculiar/json-schema@1.1.12': dependencies: - tslib: 2.6.1 - dev: true + tslib: 2.6.2 - /@peculiar/webcrypto@1.4.0: - resolution: {integrity: sha512-U58N44b2m3OuTgpmKgf0LPDOmP3bhwNz01vAnj1mBwxBASRhptWYK+M3zG+HBkDqGQM+bFsoIihTW8MdmPXEqg==} - engines: {node: '>=10.12.0'} + '@peculiar/webcrypto@1.4.3': dependencies: - '@peculiar/asn1-schema': 2.2.0 + '@peculiar/asn1-schema': 2.3.8 '@peculiar/json-schema': 1.1.12 - pvtsutils: 1.3.2 - tslib: 2.6.1 - webcrypto-core: 1.7.5 - dev: true + pvtsutils: 1.3.5 + tslib: 2.6.2 + webcrypto-core: 1.7.7 - /@repeaterjs/repeater@3.0.4: - resolution: {integrity: sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==} - dev: true + '@repeaterjs/repeater@3.0.4': {} - /@sinclair/typebox@0.27.8: - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - dev: true + '@sinclair/typebox@0.27.8': {} - /@sinonjs/commons@2.0.0: - resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} + '@sinonjs/commons@3.0.0': dependencies: type-detect: 4.0.8 - dev: true - /@sinonjs/fake-timers@10.0.2: - resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} + '@sinonjs/fake-timers@10.3.0': dependencies: - '@sinonjs/commons': 2.0.0 - dev: true + '@sinonjs/commons': 3.0.0 - /@tsconfig/recommended@1.0.3: - resolution: {integrity: sha512-+jby/Guq9H8O7NWgCv6X8VAiQE8Dr/nccsCtL74xyHKhu2Knu5EAKmOZj3nLCnLm1KooUzKY+5DsnGVqhM8/wQ==} - dev: true + '@tsconfig/recommended@1.0.3': {} - /@types/babel__core@7.1.18: - resolution: {integrity: sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==} + '@types/babel__core@7.20.3': dependencies: - '@babel/parser': 7.22.5 - '@babel/types': 7.22.5 - '@types/babel__generator': 7.6.4 - '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.14.2 - dev: true + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + '@types/babel__generator': 7.6.6 + '@types/babel__template': 7.4.3 + '@types/babel__traverse': 7.20.3 - /@types/babel__generator@7.6.4: - resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} + '@types/babel__generator@7.6.6': dependencies: - '@babel/types': 7.22.5 - dev: true + '@babel/types': 7.23.0 - /@types/babel__template@7.4.1: - resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} + '@types/babel__template@7.4.3': dependencies: - '@babel/parser': 7.22.5 - '@babel/types': 7.22.5 - dev: true + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 - /@types/babel__traverse@7.14.2: - resolution: {integrity: sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==} + '@types/babel__traverse@7.20.3': dependencies: - '@babel/types': 7.22.5 - dev: true + '@babel/types': 7.23.0 - /@types/chai-subset@1.3.3: - resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==} + '@types/chai-subset@1.3.4': dependencies: - '@types/chai': 4.3.5 - dev: true + '@types/chai': 4.3.9 - /@types/chai@4.3.5: - resolution: {integrity: sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==} - dev: true + '@types/chai@4.3.9': {} - /@types/graceful-fs@4.1.5: - resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} + '@types/graceful-fs@4.1.8': dependencies: - '@types/node': 18.17.5 - dev: true + '@types/node': 20.8.7 - /@types/graphlib@2.1.8: - resolution: {integrity: sha512-8nbbyD3zABRA9ePoBgAl2ym8cIwKQXTfv1gaIRTdY99yEOCaHfmjBeRp+BIemS8NtOqoWK7mfzWxjNrxLK3T5w==} - dev: true + '@types/graphlib@2.1.10': {} - /@types/istanbul-lib-coverage@2.0.4: - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} - dev: true + '@types/istanbul-lib-coverage@2.0.5': {} - /@types/istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} + '@types/istanbul-lib-report@3.0.2': dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - dev: true + '@types/istanbul-lib-coverage': 2.0.5 - /@types/istanbul-reports@3.0.1: - resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + '@types/istanbul-reports@3.0.3': dependencies: - '@types/istanbul-lib-report': 3.0.0 - dev: true + '@types/istanbul-lib-report': 3.0.2 - /@types/jest@29.5.6: - resolution: {integrity: sha512-/t9NnzkOpXb4Nfvg17ieHE6EeSjDS2SGSpNYfoLbUAeL/EOueU/RSdOWFpfQTXBEM7BguYW1XQ0EbM+6RlIh6w==} + '@types/jest@29.5.6': dependencies: expect: 29.7.0 pretty-format: 29.7.0 - dev: true - /@types/js-yaml@4.0.5: - resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==} - dev: true + '@types/js-yaml@4.0.8': {} - /@types/json-schema@7.0.12: - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - dev: true + '@types/json-schema@7.0.14': {} - /@types/json-stable-stringify@1.0.33: - resolution: {integrity: sha512-qEWiQff6q2tA5gcJGWwzplQcXdJtm+0oy6IHGHzlOf3eFAkGE/FIPXZK9ofWgNSHVp8AFFI33PJJshS0ei3Gvw==} - dev: true + '@types/json-stable-stringify@1.0.35': {} - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true + '@types/json5@0.0.29': {} - /@types/node@18.17.5: - resolution: {integrity: sha512-xNbS75FxH6P4UXTPUJp/zNPq6/xsfdJKussCWNOnz4aULWIRwMgP1LgaB5RiBnMX1DPCYenuqGZfnIAx5mbFLA==} - dev: true + '@types/node@18.18.6': {} - /@types/node@20.1.3: - resolution: {integrity: sha512-NP2yfZpgmf2eDRPmgGq+fjGjSwFgYbihA8/gK+ey23qT9RkxsgNTZvGOEpXgzIGqesTYkElELLgtKoMQTys5vA==} - dev: true + '@types/node@20.8.7': + dependencies: + undici-types: 5.25.3 - /@types/semver@7.5.0: - resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} - dev: true + '@types/semver@7.5.4': {} - /@types/stack-utils@2.0.1: - resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} - dev: true + '@types/stack-utils@2.0.2': {} - /@types/ws@8.5.5: - resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} + '@types/ws@8.5.8': dependencies: - '@types/node': 18.17.5 - dev: true + '@types/node': 20.8.7 - /@types/yargs-parser@20.2.1: - resolution: {integrity: sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==} - dev: true + '@types/yargs-parser@21.0.2': {} - /@types/yargs@17.0.10: - resolution: {integrity: sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==} + '@types/yargs@17.0.29': dependencies: - '@types/yargs-parser': 20.2.1 - dev: true + '@types/yargs-parser': 21.0.2 - /@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0)(typescript@5.2.2): - resolution: {integrity: sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0)(typescript@5.2.2)': dependencies: - '@eslint-community/regexpp': 4.6.2 + '@eslint-community/regexpp': 4.9.1 '@typescript-eslint/parser': 6.8.0(eslint@8.52.0)(typescript@5.2.2) '@typescript-eslint/scope-manager': 6.8.0 '@typescript-eslint/type-utils': 6.8.0(eslint@8.52.0)(typescript@5.2.2) @@ -1992,21 +4555,12 @@ packages: ignore: 5.2.4 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.1(typescript@5.2.2) + ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@6.8.0(eslint@8.52.0)(typescript@5.2.2): - resolution: {integrity: sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@6.8.0(eslint@8.52.0)(typescript@5.2.2)': dependencies: '@typescript-eslint/scope-manager': 6.8.0 '@typescript-eslint/types': 6.8.0 @@ -2017,49 +4571,26 @@ packages: typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@6.8.0: - resolution: {integrity: sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@6.8.0': dependencies: '@typescript-eslint/types': 6.8.0 '@typescript-eslint/visitor-keys': 6.8.0 - dev: true - /@typescript-eslint/type-utils@6.8.0(eslint@8.52.0)(typescript@5.2.2): - resolution: {integrity: sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/type-utils@6.8.0(eslint@8.52.0)(typescript@5.2.2)': dependencies: '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) '@typescript-eslint/utils': 6.8.0(eslint@8.52.0)(typescript@5.2.2) debug: 4.3.4 eslint: 8.52.0 - ts-api-utils: 1.0.1(typescript@5.2.2) + ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/types@6.8.0: - resolution: {integrity: sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true + '@typescript-eslint/types@6.8.0': {} - /@typescript-eslint/typescript-estree@6.8.0(typescript@5.2.2): - resolution: {integrity: sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@6.8.0(typescript@5.2.2)': dependencies: '@typescript-eslint/types': 6.8.0 '@typescript-eslint/visitor-keys': 6.8.0 @@ -2067,21 +4598,16 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.1(typescript@5.2.2) + ts-api-utils: 1.0.3(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@6.8.0(eslint@8.52.0)(typescript@5.2.2): - resolution: {integrity: sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@6.8.0(eslint@8.52.0)(typescript@5.2.2)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.0 + '@types/json-schema': 7.0.14 + '@types/semver': 7.5.4 '@typescript-eslint/scope-manager': 6.8.0 '@typescript-eslint/types': 6.8.0 '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2) @@ -2090,555 +4616,370 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/visitor-keys@6.8.0: - resolution: {integrity: sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@6.8.0': dependencies: '@typescript-eslint/types': 6.8.0 eslint-visitor-keys: 3.4.3 - dev: true - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true + '@ungap/structured-clone@1.2.0': {} - /@vitest/expect@0.34.1: - resolution: {integrity: sha512-q2CD8+XIsQ+tHwypnoCk8Mnv5e6afLFvinVGCq3/BOT4kQdVQmY6rRfyKkwcg635lbliLPqbunXZr+L1ssUWiQ==} + '@vitest/expect@0.34.6': dependencies: - '@vitest/spy': 0.34.1 - '@vitest/utils': 0.34.1 - chai: 4.3.7 - dev: true + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 + chai: 4.3.10 - /@vitest/runner@0.34.1: - resolution: {integrity: sha512-YfQMpYzDsYB7yqgmlxZ06NI4LurHWfrH7Wy3Pvf/z/vwUSgq1zLAb1lWcItCzQG+NVox+VvzlKQrYEXb47645g==} + '@vitest/runner@0.34.6': dependencies: - '@vitest/utils': 0.34.1 + '@vitest/utils': 0.34.6 p-limit: 4.0.0 pathe: 1.1.1 - dev: true - /@vitest/snapshot@0.34.1: - resolution: {integrity: sha512-0O9LfLU0114OqdF8lENlrLsnn024Tb1CsS9UwG0YMWY2oGTQfPtkW+B/7ieyv0X9R2Oijhi3caB1xgGgEgclSQ==} + '@vitest/snapshot@0.34.6': dependencies: - magic-string: 0.30.2 + magic-string: 0.30.5 pathe: 1.1.1 pretty-format: 29.7.0 - dev: true - /@vitest/spy@0.34.1: - resolution: {integrity: sha512-UT4WcI3EAPUNO8n6y9QoEqynGGEPmmRxC+cLzneFFXpmacivjHZsNbiKD88KUScv5DCHVDgdBsLD7O7s1enFcQ==} + '@vitest/spy@0.34.6': dependencies: - tinyspy: 2.1.1 - dev: true + tinyspy: 2.2.0 - /@vitest/utils@0.34.1: - resolution: {integrity: sha512-/ql9dsFi4iuEbiNcjNHQWXBum7aL8pyhxvfnD9gNtbjR9fUKAjxhj4AA3yfLXg6gJpMGGecvtF8Au2G9y3q47Q==} + '@vitest/utils@0.34.6': dependencies: diff-sequences: 29.6.3 - loupe: 2.3.6 + loupe: 2.3.7 pretty-format: 29.7.0 - dev: true - /@whatwg-node/events@0.0.2: - resolution: {integrity: sha512-WKj/lI4QjnLuPrim0cfO7i+HsDSXHxNv1y0CrJhdntuO3hxWZmnXCwNDnwOvry11OjRin6cgWNF+j/9Pn8TN4w==} - dev: true + '@whatwg-node/events@0.0.3': {} - /@whatwg-node/events@0.1.0: - resolution: {integrity: sha512-PnnAP/o6QkgAdjcExKugzl5ZUqPVcv9lvgGz/to3Xe5Du/P5Zw6MzB8P8mI/B4mplYOYsr6AkXkb4plG0ydCow==} - engines: {node: '>=16.0.0'} - dev: true + '@whatwg-node/events@0.1.1': {} - /@whatwg-node/fetch@0.8.2(@types/node@18.17.5): - resolution: {integrity: sha512-6u1xGzFZvskJpQXhWreR9s1/4nsuY4iFRsTb4BC3NiDHmzgj/Hu1Ovt4iHs5KAjLzbnsjaQOI5f5bQPucqvPsQ==} + '@whatwg-node/fetch@0.8.8': dependencies: - '@peculiar/webcrypto': 1.4.0 - '@whatwg-node/node-fetch': 0.3.2(@types/node@18.17.5) + '@peculiar/webcrypto': 1.4.3 + '@whatwg-node/node-fetch': 0.3.6 busboy: 1.6.0 - urlpattern-polyfill: 6.0.2 + urlpattern-polyfill: 8.0.2 web-streams-polyfill: 3.2.1 - transitivePeerDependencies: - - '@types/node' - dev: true - /@whatwg-node/fetch@0.9.0: - resolution: {integrity: sha512-zEyXaoz5w6BpKYKyZLTwBA41fqGuscOvSoPHytADRo1FY/s/fmjwiKq4QGmB88DlNuQ8e57s6AgWqIYyAT0Zmg==} - engines: {node: '>=16.0.0'} + '@whatwg-node/fetch@0.9.13': dependencies: - '@whatwg-node/node-fetch': 0.4.0 - urlpattern-polyfill: 8.0.2 - dev: true + '@whatwg-node/node-fetch': 0.4.19 + urlpattern-polyfill: 9.0.0 - /@whatwg-node/node-fetch@0.3.2(@types/node@18.17.5): - resolution: {integrity: sha512-MFPehIybgtPJG7vN4+wNk2i5ek4/qIl+1hzchGCdq7gObWsXWH+L+rvyazIoj8lo8Mt8EZeES8Cg+aPsl+7gPw==} - peerDependencies: - '@types/node': ^18.0.6 + '@whatwg-node/node-fetch@0.3.6': dependencies: - '@types/node': 18.17.5 - '@whatwg-node/events': 0.0.2 + '@whatwg-node/events': 0.0.3 busboy: 1.6.0 - fast-querystring: 1.1.1 + fast-querystring: 1.1.2 fast-url-parser: 1.1.3 - tslib: 2.6.1 - dev: true + tslib: 2.6.2 - /@whatwg-node/node-fetch@0.4.0: - resolution: {integrity: sha512-aFfJNTMwkWrkl8I9nTkslVjPlkL+zb/Z71ng+71UbYYm1gPHfltHHXBiM99aZgUCaqyvaR5XzzwyCL6m0ikqsA==} - engines: {node: '>=16.0.0'} + '@whatwg-node/node-fetch@0.4.19': dependencies: - '@whatwg-node/events': 0.1.0 + '@whatwg-node/events': 0.1.1 busboy: 1.6.0 - fast-querystring: 1.1.1 + fast-querystring: 1.1.2 fast-url-parser: 1.1.3 - tslib: 2.6.1 - dev: true + tslib: 2.6.2 - /acorn-jsx@5.3.2(acorn@8.10.0): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.10.0): dependencies: acorn: 8.10.0 - dev: true - - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} - dev: true - /acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn-walk@8.2.0: {} - /acorn@8.9.0: - resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.10.0: {} - /agent-base@7.0.2: - resolution: {integrity: sha512-k2/tQ1+8Zf50dEUJWklUP80LcE/+Ph+OJ6cf2Ff2fD/c/TtCe6ofnCoNMz9UnyxOQYlaAALZtEWETzn+1JjfHg==} - engines: {node: '>= 14'} + agent-base@7.1.0: dependencies: debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 - dev: true - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 - dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + ansi-regex@5.0.1: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true + ansi-styles@5.2.0: {} - /anymatch@3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + array-buffer-byte-length@1.0.0: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 is-array-buffer: 3.0.2 - dev: true - /array-includes@3.1.6: - resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} - engines: {node: '>= 0.4'} + array-includes@3.1.7: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 is-string: 1.0.7 - dev: true - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true + array-union@2.1.0: {} - /array.prototype.findlastindex@1.2.2: - resolution: {integrity: sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==} - engines: {node: '>= 0.4'} + array.prototype.findlastindex@1.2.3: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.1 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.2 - /array.prototype.flat@1.3.1: - resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} - engines: {node: '>= 0.4'} + array.prototype.flat@1.3.2: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 - /array.prototype.flatmap@1.3.1: - resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} - engines: {node: '>= 0.4'} + array.prototype.flatmap@1.3.2: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 - /arraybuffer.prototype.slice@1.0.1: - resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} - engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.2: dependencies: array-buffer-byte-length: 1.0.0 - call-bind: 1.0.2 - define-properties: 1.2.0 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 - dev: true - /asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + asap@2.0.6: {} - /asn1js@3.0.5: - resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} - engines: {node: '>=12.0.0'} + asn1js@3.0.5: dependencies: - pvtsutils: 1.3.2 + pvtsutils: 1.3.5 pvutils: 1.1.3 - tslib: 2.6.1 - dev: true + tslib: 2.6.2 - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true + assertion-error@1.1.0: {} - /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - dev: true + astral-regex@2.0.0: {} - /auto-bind@4.0.0: - resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} - engines: {node: '>=8'} + auto-bind@4.0.0: {} - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true + available-typed-arrays@1.0.5: {} - /babel-jest@29.7.0(@babel/core@7.22.5): - resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 + babel-jest@29.7.0(@babel/core@7.23.2): dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.23.2 '@jest/transform': 29.7.0 - '@types/babel__core': 7.1.18 + '@types/babel__core': 7.20.3 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.22.5) + babel-preset-jest: 29.6.3(@babel/core@7.23.2) chalk: 4.1.2 - graceful-fs: 4.2.9 + graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} + babel-plugin-istanbul@6.1.1: dependencies: '@babel/helper-plugin-utils': 7.22.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.1.0 + istanbul-lib-instrument: 5.2.1 test-exclude: 6.0.0 transitivePeerDependencies: - supports-color - dev: true - - /babel-plugin-jest-hoist@29.6.3: - resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@babel/template': 7.22.5 - '@babel/types': 7.22.5 - '@types/babel__core': 7.1.18 - '@types/babel__traverse': 7.14.2 - dev: true - - /babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: - resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.5): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.5 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.5) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.5) - dev: true - - /babel-preset-fbjs@3.4.0(@babel/core@7.22.5): - resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.22.5 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.5) - '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.22.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.5) - '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-classes': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.5) + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 + '@types/babel__core': 7.20.3 + '@types/babel__traverse': 7.20.3 + + babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: {} + + babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.2): + dependencies: + '@babel/core': 7.23.2 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.2) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.2) + + babel-preset-fbjs@3.4.0(@babel/core@7.23.2): + dependencies: + '@babel/core': 7.23.2 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.2) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.23.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.2) + '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.2) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.2) + '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.23.2) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-destructuring': 7.23.0(@babel/core@7.23.2) + '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.23.2) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.2) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.2) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.2) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.23.2) babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 - transitivePeerDependencies: - - supports-color - /babel-preset-jest@29.6.3(@babel/core@7.22.5): - resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 + babel-preset-jest@29.6.3(@babel/core@7.23.2): dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.23.2 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) - dev: true + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.2) - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@1.0.2: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true + base64-js@1.5.1: {} - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 - readable-stream: 3.6.0 - dev: true + readable-stream: 3.6.2 - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + braces@3.0.2: dependencies: fill-range: 7.0.1 - dev: true - /browserslist@4.21.9: - resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.22.1: dependencies: - caniuse-lite: 1.0.30001504 - electron-to-chromium: 1.4.433 - node-releases: 2.0.12 - update-browserslist-db: 1.0.11(browserslist@4.21.9) + caniuse-lite: 1.0.30001553 + electron-to-chromium: 1.4.563 + node-releases: 2.0.13 + update-browserslist-db: 1.0.13(browserslist@4.22.1) - /bs-logger@0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} + bs-logger@0.2.6: dependencies: fast-json-stable-stringify: 2.1.0 - dev: true - /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + bser@2.1.1: dependencies: node-int64: 0.4.0 - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-from@1.1.2: {} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true - /busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} + busboy@1.6.0: dependencies: streamsearch: 1.1.0 - dev: true - /cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - dev: true + cac@6.7.14: {} - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + call-bind@1.0.5: dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.1 - dev: true + function-bind: 1.1.2 + get-intrinsic: 1.2.2 + set-function-length: 1.1.1 - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + callsites@3.1.0: {} - /camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camel-case@4.1.2: dependencies: pascal-case: 3.1.2 - tslib: 2.6.1 + tslib: 2.6.2 - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} + camelcase@5.3.1: {} - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true + camelcase@6.3.0: {} - /caniuse-lite@1.0.30001504: - resolution: {integrity: sha512-5uo7eoOp2mKbWyfMXnGO9rJWOGU8duvzEiYITW+wivukL7yHH4gX9yuRaobu6El4jPxo6jKZfG+N6fB621GD/Q==} + caniuse-lite@1.0.30001553: {} - /capital-case@1.0.4: - resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + capital-case@1.0.4: dependencies: no-case: 3.0.4 - tslib: 2.6.1 + tslib: 2.6.2 upper-case-first: 2.0.2 - /chai@4.3.7: - resolution: {integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==} - engines: {node: '>=4'} + chai@4.3.10: dependencies: assertion-error: 1.1.0 - check-error: 1.0.2 + check-error: 1.0.3 deep-eql: 4.1.3 - get-func-name: 2.0.0 - loupe: 2.3.6 + get-func-name: 2.0.2 + loupe: 2.3.7 pathval: 1.1.1 type-detect: 4.0.8 - dev: true - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - /change-case-all@1.0.15: - resolution: {integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==} + change-case-all@1.0.15: dependencies: change-case: 4.1.2 is-lower-case: 2.0.2 @@ -2651,8 +4992,7 @@ packages: upper-case: 2.0.2 upper-case-first: 2.0.2 - /change-case@4.1.2: - resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + change-case@4.1.2: dependencies: camel-case: 4.1.2 capital-case: 1.0.4 @@ -2665,150 +5005,94 @@ packages: path-case: 3.0.4 sentence-case: 3.0.4 snake-case: 3.0.4 - tslib: 2.6.1 + tslib: 2.6.2 - /char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - dev: true + char-regex@1.0.2: {} - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true + chardet@0.7.0: {} - /check-error@1.0.2: - resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} - dev: true + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 - /ci-info@3.3.0: - resolution: {integrity: sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==} - dev: true + ci-info@3.9.0: {} - /cjs-module-lexer@1.2.2: - resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} - dev: true + cjs-module-lexer@1.2.3: {} - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true + clean-stack@2.2.0: {} - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 - dev: true - /cli-spinners@2.6.1: - resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} - engines: {node: '>=6'} - dev: true + cli-spinners@2.9.1: {} - /cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} + cli-truncate@2.1.0: dependencies: slice-ansi: 3.0.0 string-width: 4.2.3 - dev: true - /cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - dev: true + cli-width@3.0.0: {} - /cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + cliui@6.0.0: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true + clone@1.0.4: {} - /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true + co@4.6.0: {} - /collect-v8-coverage@1.0.1: - resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} - dev: true + collect-v8-coverage@1.0.2: {} - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-name@1.1.4: {} - /colorette@2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} - dev: true + colorette@2.0.20: {} - /common-tags@1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} + common-tags@1.8.2: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concat-map@0.0.1: {} - /constant-case@3.0.4: - resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + constant-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.6.1 + tslib: 2.6.2 upper-case: 2.0.2 - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true + convert-source-map@2.0.0: {} - /cosmiconfig@8.1.3: - resolution: {integrity: sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==} - engines: {node: '>=14'} + cosmiconfig@8.3.6(typescript@5.2.2): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - dev: true + typescript: 5.2.2 - /create-jest@29.7.0(@types/node@18.17.5): - resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true + create-jest@29.7.0(@types/node@18.18.6): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 - graceful-fs: 4.2.9 - jest-config: 29.7.0(@types/node@18.17.5) + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@18.18.6) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -2816,200 +5100,124 @@ packages: - babel-plugin-macros - supports-color - ts-node - dev: true - /cross-fetch@3.1.6: - resolution: {integrity: sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==} + cross-fetch@3.1.8: dependencies: - node-fetch: 2.6.11 + node-fetch: 2.7.0 transitivePeerDependencies: - encoding - /cross-spawn@6.0.5: - resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} - engines: {node: '>=4.8'} + cross-spawn@6.0.5: dependencies: nice-try: 1.0.5 path-key: 2.0.1 - semver: 5.7.1 + semver: 5.7.2 shebang-command: 1.2.0 which: 1.3.1 - dev: true - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - /dataloader@2.2.2: - resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} - dev: true + dataloader@2.2.2: {} - /debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - dev: true + debounce@1.2.1: {} - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@3.2.7: dependencies: ms: 2.1.3 - dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.4: dependencies: ms: 2.1.2 - /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} + decamelize@1.2.0: {} - /dedent@1.2.0: - resolution: {integrity: sha512-i4tcg0ClgvMUSxwHpt+NHQ01ZJmAkl6eBvDNrSZG9e+oLRTCSHv0wpr/Bzjpf6CwKeIHGevE1M34Y1Axdms5VQ==} - peerDependencies: - babel-plugin-macros: ^3.1.0 - peerDependenciesMeta: - babel-plugin-macros: - optional: true - dev: true + dedent@1.5.1: {} - /deep-eql@4.1.3: - resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} - engines: {node: '>=6'} + deep-eql@4.1.3: dependencies: type-detect: 4.0.8 - dev: true - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + deep-is@0.1.4: {} - /deepmerge@4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} - engines: {node: '>=0.10.0'} - dev: true + deepmerge@4.3.1: {} - /defaults@1.0.3: - resolution: {integrity: sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==} + defaults@1.0.4: dependencies: clone: 1.0.4 - dev: true - /define-properties@1.2.0: - resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} - engines: {node: '>= 0.4'} + define-data-property@1.1.1: dependencies: - has-property-descriptors: 1.0.0 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 object-keys: 1.1.1 - dev: true - /dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} + dependency-graph@0.11.0: {} - /detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true + detect-indent@6.1.0: {} - /detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: true + detect-newline@3.1.0: {} - /diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + diff-sequences@29.6.3: {} - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dev: true - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + doctrine@2.1.0: dependencies: esutils: 2.0.3 - dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + doctrine@3.0.0: dependencies: esutils: 2.0.3 - dev: true - /dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dot-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.6.1 + tslib: 2.6.2 - /dotenv@16.0.1: - resolution: {integrity: sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==} - engines: {node: '>=12'} - dev: true + dotenv@16.3.1: {} - /dset@3.1.2: - resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} - engines: {node: '>=4'} + dset@3.1.2: {} - /electron-to-chromium@1.4.433: - resolution: {integrity: sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==} + electron-to-chromium@1.4.563: {} - /emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - dev: true + emittery@0.13.1: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@8.0.0: {} - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - dev: true - /es-abstract@1.22.1: - resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} - engines: {node: '>= 0.4'} + es-abstract@1.22.3: dependencies: array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.1 + arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.2 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 - has: 1.0.3 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.1 has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.5 + hasown: 2.0.0 + internal-slot: 1.0.6 is-array-buffer: 3.0.2 is-callable: 1.2.7 is-negative-zero: 2.0.2 @@ -3018,52 +5226,39 @@ packages: is-string: 1.0.7 is-typed-array: 1.1.12 is-weakref: 1.0.2 - object-inspect: 1.12.3 + object-inspect: 1.13.1 object-keys: 1.1.1 object.assign: 4.1.4 - regexp.prototype.flags: 1.5.0 - safe-array-concat: 1.0.0 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.7 - string.prototype.trimend: 1.0.6 - string.prototype.trimstart: 1.0.6 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 typed-array-buffer: 1.0.0 typed-array-byte-length: 1.0.0 typed-array-byte-offset: 1.0.0 typed-array-length: 1.0.4 unbox-primitive: 1.0.2 - which-typed-array: 1.1.11 - dev: true + which-typed-array: 1.1.13 - /es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.2: dependencies: - get-intrinsic: 1.2.1 - has: 1.0.3 + get-intrinsic: 1.2.2 has-tostringtag: 1.0.0 - dev: true + hasown: 2.0.0 - /es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + es-shim-unscopables@1.0.2: dependencies: - has: 1.0.3 - dev: true + hasown: 2.0.0 - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-to-primitive@1.2.1: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.18.20: optionalDependencies: '@esbuild/android-arm': 0.18.20 '@esbuild/android-arm64': 0.18.20 @@ -3087,129 +5282,73 @@ packages: '@esbuild/win32-arm64': 0.18.20 '@esbuild/win32-ia32': 0.18.20 '@esbuild/win32-x64': 0.18.20 - dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} + escalade@3.1.1: {} - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + escape-string-regexp@1.0.5: {} - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true + escape-string-regexp@2.0.0: {} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true + escape-string-regexp@4.0.0: {} - /eslint-import-resolver-node@0.3.7: - resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} + eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.12.1 - resolve: 1.22.3 + is-core-module: 2.13.1 + resolve: 1.22.8 transitivePeerDependencies: - supports-color - dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.7)(eslint@8.52.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 + eslint-module-utils@2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0): dependencies: '@typescript-eslint/parser': 6.8.0(eslint@8.52.0)(typescript@5.2.2) debug: 3.2.7 eslint: 8.52.0 - eslint-import-resolver-node: 0.3.7 + eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - dev: true - /eslint-plugin-import@2.28.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0): - resolution: {integrity: sha512-B8s/n+ZluN7sxj9eUf7/pRFERX0r5bnFA2dCaLHy2ZeaQEAz0k+ZZkFWRFHJAqxfxQDx6KLv9LeIki7cFdwW+Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.8.0)(eslint@8.52.0): dependencies: '@typescript-eslint/parser': 6.8.0(eslint@8.52.0)(typescript@5.2.2) - array-includes: 3.1.6 - array.prototype.findlastindex: 1.2.2 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 eslint: 8.52.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.7)(eslint@8.52.0) - has: 1.0.3 - is-core-module: 2.12.1 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.52.0) + hasown: 2.0.0 + is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.6 - object.groupby: 1.0.0 - object.values: 1.1.6 - resolve: 1.22.3 + object.fromentries: 2.0.7 + object.groupby: 1.0.1 + object.values: 1.1.7 semver: 6.3.1 tsconfig-paths: 3.14.2 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-plugin-simple-import-sort@10.0.0(eslint@8.52.0): - resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} - peerDependencies: - eslint: '>=5.0.0' + eslint-plugin-simple-import-sort@10.0.0(eslint@8.52.0): dependencies: eslint: 8.52.0 - dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + eslint-visitor-keys@3.4.3: {} - /eslint@8.52.0: - resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint@8.52.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) - '@eslint-community/regexpp': 4.6.2 + '@eslint-community/regexpp': 4.9.1 '@eslint/eslintrc': 2.1.2 '@eslint/js': 8.52.0 '@humanwhocodes/config-array': 0.11.13 @@ -3225,13 +5364,13 @@ packages: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.4.2 + esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.19.0 + globals: 13.23.0 graphemer: 1.4.0 ignore: 5.2.4 imurmurhash: 0.1.4 @@ -3248,50 +5387,28 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@9.6.1: dependencies: acorn: 8.10.0 acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.3 - dev: true - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true + esprima@4.0.1: {} - /esquery@1.4.2: - resolution: {integrity: sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==} - engines: {node: '>=0.10'} + esquery@1.5.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + esutils@2.0.3: {} - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + execa@5.1.1: dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -3302,242 +5419,152 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true - /exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - dev: true + exit@0.1.2: {} - /expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + expect@29.7.0: dependencies: '@jest/expect-utils': 29.7.0 jest-get-type: 29.6.3 jest-matcher-utils: 29.7.0 jest-message-util: 29.7.0 jest-util: 29.7.0 - dev: true - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + external-editor@3.1.0: dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true - /extract-files@11.0.0: - resolution: {integrity: sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==} - engines: {node: ^12.20 || >= 14.13} - dev: true + extract-files@11.0.0: {} - /fast-decode-uri-component@1.0.1: - resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} - dev: true + fast-decode-uri-component@1.0.1: {} - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-glob@3.2.11: - resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.1: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-levenshtein@2.0.6: {} - /fast-querystring@1.1.1: - resolution: {integrity: sha512-qR2r+e3HvhEFmpdHMv//U8FnFlnYjaC6QKDuaXALDkw2kvHO8WDjxH+f/rHGR4Me4pnk8p9JAkRNTjYHAKRn2Q==} + fast-querystring@1.1.2: dependencies: fast-decode-uri-component: 1.0.1 - dev: true - /fast-url-parser@1.1.3: - resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} + fast-url-parser@1.1.3: dependencies: punycode: 1.4.1 - dev: true - /fastq@1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + fastq@1.15.0: dependencies: reusify: 1.0.4 - dev: true - /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fb-watchman@2.0.2: dependencies: bser: 2.1.1 - /fbjs-css-vars@1.0.2: - resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} + fbjs-css-vars@1.0.2: {} - /fbjs@3.0.5: - resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} + fbjs@3.0.5: dependencies: - cross-fetch: 3.1.6 + cross-fetch: 3.1.8 fbjs-css-vars: 1.0.2 loose-envify: 1.4.0 object-assign: 4.1.1 promise: 7.3.1 setimmediate: 1.0.5 - ua-parser-js: 1.0.35 + ua-parser-js: 1.0.36 transitivePeerDependencies: - encoding - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 - dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@6.0.1: dependencies: - flat-cache: 3.0.4 - dev: true + flat-cache: 3.1.1 - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 - dev: true - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@3.1.1: dependencies: - flatted: 3.2.4 + flatted: 3.2.9 + keyv: 4.5.4 rimraf: 3.0.2 - dev: true - /flatted@3.2.4: - resolution: {integrity: sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==} - dev: true + flatted@3.2.9: {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.3: dependencies: is-callable: 1.2.7 - dev: true - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fs.realpath@1.0.0: {} - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.3: optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true + function-bind@1.1.2: {} - /function.prototype.name@1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.6: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 functions-have-names: 1.2.3 - dev: true - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true + functions-have-names@1.2.3: {} - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} + gensync@1.0.0-beta.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + get-caller-file@2.0.5: {} - /get-func-name@2.0.0: - resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} - dev: true + get-func-name@2.0.2: {} - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + get-intrinsic@1.2.2: dependencies: - function-bind: 1.1.1 - has: 1.0.3 + function-bind: 1.1.2 has-proto: 1.0.1 has-symbols: 1.0.3 - dev: true + hasown: 2.0.0 - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: true + get-package-type@0.1.0: {} - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + get-stream@6.0.1: {} - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} + get-symbol-description@1.0.0: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - dev: true + call-bind: 1.0.5 + get-intrinsic: 1.2.2 - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -3546,263 +5573,158 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} + globals@11.12.0: {} - /globals@13.19.0: - resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} - engines: {node: '>=8'} + globals@13.23.0: dependencies: type-fest: 0.20.2 - dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} + globalthis@1.0.3: dependencies: - define-properties: 1.2.0 - dev: true + define-properties: 1.2.1 - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.11 + fast-glob: 3.3.1 ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 - dev: true - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.0.1: dependencies: - get-intrinsic: 1.2.1 - dev: true + get-intrinsic: 1.2.2 - /graceful-fs@4.2.9: - resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} - dev: true + graceful-fs@4.2.11: {} - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + graphemer@1.4.0: {} - /graphlib@2.1.8: - resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} + graphlib@2.1.8: dependencies: lodash: 4.17.21 - dev: false - /graphql-config@5.0.2(@types/node@18.17.5)(graphql@16.7.1): - resolution: {integrity: sha512-7TPxOrlbiG0JplSZYCyxn2XQtqVhXomEjXUmWJVSS5ET1nPhOJSsIb/WTwqWhcYX6G0RlHXSj9PLtGTKmxLNGg==} - engines: {node: '>= 16.0.0'} - peerDependencies: - cosmiconfig-toml-loader: ^1.0.0 - graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - peerDependenciesMeta: - cosmiconfig-toml-loader: - optional: true - dependencies: - '@graphql-tools/graphql-file-loader': 8.0.0(graphql@16.7.1) - '@graphql-tools/json-file-loader': 8.0.0(graphql@16.7.1) - '@graphql-tools/load': 8.0.0(graphql@16.7.1) - '@graphql-tools/merge': 9.0.0(graphql@16.7.1) - '@graphql-tools/url-loader': 8.0.0(@types/node@18.17.5)(graphql@16.7.1) - '@graphql-tools/utils': 10.0.5(graphql@16.7.1) - cosmiconfig: 8.1.3 - graphql: 16.7.1 - jiti: 1.18.2 + graphql-config@5.0.3(@types/node@18.18.6)(graphql@16.8.1)(typescript@5.2.2): + dependencies: + '@graphql-tools/graphql-file-loader': 8.0.0(graphql@16.8.1) + '@graphql-tools/json-file-loader': 8.0.0(graphql@16.8.1) + '@graphql-tools/load': 8.0.0(graphql@16.8.1) + '@graphql-tools/merge': 9.0.0(graphql@16.8.1) + '@graphql-tools/url-loader': 8.0.0(@types/node@18.18.6)(graphql@16.8.1) + '@graphql-tools/utils': 10.0.7(graphql@16.8.1) + cosmiconfig: 8.3.6(typescript@5.2.2) + graphql: 16.8.1 + jiti: 1.20.0 minimatch: 4.2.3 string-env-interpolation: 1.0.1 - tslib: 2.6.1 + tslib: 2.6.2 transitivePeerDependencies: - '@types/node' - bufferutil - encoding + - typescript - utf-8-validate - dev: true - /graphql-request@6.1.0(graphql@16.7.1): - resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} - peerDependencies: - graphql: 14 - 16 + graphql-request@6.1.0(graphql@16.8.1): dependencies: - '@graphql-typed-document-node/core': 3.2.0(graphql@16.7.1) - cross-fetch: 3.1.6 - graphql: 16.7.1 + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + cross-fetch: 3.1.8 + graphql: 16.8.1 transitivePeerDependencies: - encoding - dev: true - /graphql-tag@2.12.6(graphql@16.7.1): - resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} - engines: {node: '>=10'} - peerDependencies: - graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql-tag@2.12.6(graphql@16.8.1): dependencies: - graphql: 16.7.1 - tslib: 2.6.1 + graphql: 16.8.1 + tslib: 2.6.2 - /graphql-ws@5.13.1(graphql@16.7.1): - resolution: {integrity: sha512-eiX7ES/ZQr0q7hSM5UBOEIFfaAUmAY9/CSDyAnsETuybByU7l/v46drRg9DQoTvVABEHp3QnrvwgTRMhqy7zxQ==} - engines: {node: '>=10'} - peerDependencies: - graphql: '>=0.11 <=16' + graphql-ws@5.14.1(graphql@16.8.1): dependencies: - graphql: 16.7.1 - dev: true + graphql: 16.8.1 - /graphql@16.7.1: - resolution: {integrity: sha512-DRYR9tf+UGU0KOsMcKAlXeFfX89UiiIZ0dRU3mR0yJfu6OjZqUcp68NnFLnqQU5RexygFoDy1EW+ccOYcPfmHg==} - engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + graphql@16.8.1: {} - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + has-bigints@1.0.2: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + has-flag@3.0.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + has-flag@4.0.0: {} - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + has-property-descriptors@1.0.1: dependencies: - get-intrinsic: 1.2.1 - dev: true + get-intrinsic: 1.2.2 - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.0.1: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.0.3: {} - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.0: dependencies: has-symbols: 1.0.3 - dev: true - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} + hasown@2.0.0: dependencies: - function-bind: 1.1.1 - dev: true + function-bind: 1.1.2 - /header-case@2.0.4: - resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + header-case@2.0.4: dependencies: capital-case: 1.0.4 - tslib: 2.6.1 + tslib: 2.6.2 - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + hosted-git-info@2.8.9: {} - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true + html-escaper@2.0.2: {} - /http-proxy-agent@6.1.0: - resolution: {integrity: sha512-75t5ACHLOMnz/KsDAS4BdHx4J0sneT/HW+Sz070NR+n7RZ7SmYXYn2FXq6D0XwQid8hYgRVf6HZJrYuGzaEqtw==} - engines: {node: '>= 14'} + http-proxy-agent@7.0.0: dependencies: - agent-base: 7.0.2 + agent-base: 7.1.0 debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - /https-proxy-agent@6.2.1: - resolution: {integrity: sha512-ONsE3+yfZF2caH5+bJlcddtWqNI3Gvs5A38+ngvljxaBiRXRswym2c7yf8UAeFpRFKjFNHIFEHqR/OLAWJzyiA==} - engines: {node: '>= 14'} + https-proxy-agent@7.0.2: dependencies: - agent-base: 7.0.2 + agent-base: 7.1.0 debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + human-signals@2.1.0: {} - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - dev: true - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true + ieee754@1.2.1: {} - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - dev: true + ignore@5.2.4: {} - /immutable@3.7.6: - resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} - engines: {node: '>=0.8.0'} + immutable@3.7.6: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - /import-from@4.0.0: - resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} - engines: {node: '>=12.2'} + import-from@4.0.0: {} - /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true + import-local@3.1.0: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - dev: true - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + imurmurhash@0.1.4: {} - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true + indent-string@4.0.0: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + inherits@2.0.4: {} - /inquirer@8.2.0: - resolution: {integrity: sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==} - engines: {node: '>=8.0.0'} + inquirer@8.2.6: dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -3814,298 +5736,188 @@ packages: mute-stream: 0.0.8 ora: 5.4.1 run-async: 2.4.1 - rxjs: 7.5.5 + rxjs: 7.8.1 string-width: 4.2.3 strip-ansi: 6.0.1 through: 2.3.8 - dev: true + wrap-ansi: 6.2.0 - /internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} - engines: {node: '>= 0.4'} + internal-slot@1.0.6: dependencies: - get-intrinsic: 1.2.1 - has: 1.0.3 + get-intrinsic: 1.2.2 + hasown: 2.0.0 side-channel: 1.0.4 - dev: true - /invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + invariant@2.2.4: dependencies: loose-envify: 1.4.0 - /is-absolute@1.0.0: - resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} - engines: {node: '>=0.10.0'} + is-absolute@1.0.0: dependencies: is-relative: 1.0.0 is-windows: 1.0.2 - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + is-array-buffer@3.0.2: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-typed-array: 1.1.12 - dev: true - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-arrayish@0.2.1: {} - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 - dev: true - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-boolean-object@1.1.2: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 - dev: true - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-core-module@2.12.1: - resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} + is-core-module@2.13.1: dependencies: - has: 1.0.3 - dev: true + hasown: 2.0.0 - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-date-object@1.0.5: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + is-fullwidth-code-point@3.0.0: {} - /is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: true + is-generator-fn@2.1.0: {} - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true + is-interactive@1.0.0: {} - /is-lower-case@2.0.2: - resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} + is-lower-case@2.0.2: dependencies: - tslib: 2.6.1 + tslib: 2.6.2 - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true + is-negative-zero@2.0.2: {} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + is-path-inside@3.0.3: {} - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + is-regex@1.1.4: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-tostringtag: 1.0.0 - dev: true - /is-relative@1.0.0: - resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} - engines: {node: '>=0.10.0'} + is-relative@1.0.0: dependencies: is-unc-path: 1.0.0 - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + is-shared-array-buffer@1.0.2: dependencies: - call-bind: 1.0.2 - dev: true + call-bind: 1.0.5 - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + is-stream@2.0.1: {} - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-string@1.0.7: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 - dev: true - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.12: dependencies: - which-typed-array: 1.1.11 - dev: true + which-typed-array: 1.1.13 - /is-unc-path@1.0.0: - resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} - engines: {node: '>=0.10.0'} + is-unc-path@1.0.0: dependencies: unc-path-regex: 0.1.2 - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-unicode-supported@0.1.0: {} - /is-upper-case@2.0.2: - resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} + is-upper-case@2.0.2: dependencies: - tslib: 2.6.1 + tslib: 2.6.2 - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.0.2: dependencies: - call-bind: 1.0.2 - dev: true + call-bind: 1.0.5 - /is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} + is-windows@1.0.2: {} - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + isarray@2.0.5: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /isomorphic-ws@5.0.0(ws@8.13.0): - resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} - peerDependencies: - ws: '*' + isomorphic-ws@5.0.0(ws@8.14.2): dependencies: - ws: 8.13.0 - dev: true + ws: 8.14.2 - /istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} - engines: {node: '>=8'} - dev: true + istanbul-lib-coverage@3.2.0: {} - /istanbul-lib-instrument@5.1.0: - resolution: {integrity: sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==} - engines: {node: '>=8'} + istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.22.5 - '@babel/parser': 7.22.5 + '@babel/core': 7.23.2 + '@babel/parser': 7.23.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /istanbul-lib-instrument@6.0.0: - resolution: {integrity: sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==} - engines: {node: '>=10'} + istanbul-lib-instrument@6.0.1: dependencies: - '@babel/core': 7.22.5 - '@babel/parser': 7.22.5 + '@babel/core': 7.23.2 + '@babel/parser': 7.23.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 7.5.4 transitivePeerDependencies: - supports-color - dev: true - /istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} + istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.0 - make-dir: 3.1.0 + make-dir: 4.0.0 supports-color: 7.2.0 - dev: true - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} + istanbul-lib-source-maps@4.0.1: dependencies: debug: 4.3.4 istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: - supports-color - dev: true - /istanbul-reports@3.1.3: - resolution: {integrity: sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==} - engines: {node: '>=8'} + istanbul-reports@3.1.6: dependencies: html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 - dev: true + istanbul-lib-report: 3.0.1 - /jest-changed-files@29.7.0: - resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-changed-files@29.7.0: dependencies: execa: 5.1.1 jest-util: 29.7.0 p-limit: 3.1.0 - dev: true - /jest-circus@29.7.0: - resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-circus@29.7.0: dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.17.5 + '@types/node': 20.8.7 chalk: 4.1.2 co: 4.6.0 - dedent: 1.2.0 + dedent: 1.5.1 is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -4115,64 +5927,44 @@ packages: jest-util: 29.7.0 p-limit: 3.1.0 pretty-format: 29.7.0 - pure-rand: 6.0.0 + pure-rand: 6.0.4 slash: 3.0.0 - stack-utils: 2.0.5 + stack-utils: 2.0.6 transitivePeerDependencies: - babel-plugin-macros - supports-color - dev: true - /jest-cli@29.7.0(@types/node@18.17.5): - resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + jest-cli@29.7.0(@types/node@18.18.6): dependencies: '@jest/core': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@18.17.5) + create-jest: 29.7.0(@types/node@18.18.6) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@18.17.5) + jest-config: 29.7.0(@types/node@18.18.6) jest-util: 29.7.0 jest-validate: 29.7.0 - yargs: 17.4.1 + yargs: 17.7.2 transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - dev: true - /jest-config@29.7.0(@types/node@18.17.5): - resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true + jest-config@29.7.0(@types/node@18.18.6): dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.23.2 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.17.5 - babel-jest: 29.7.0(@babel/core@7.22.5) + '@types/node': 18.18.6 + babel-jest: 29.7.0(@babel/core@7.23.2) chalk: 4.1.2 - ci-info: 3.3.0 - deepmerge: 4.2.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 glob: 7.2.3 - graceful-fs: 4.2.9 + graceful-fs: 4.2.11 jest-circus: 29.7.0 jest-environment-node: 29.7.0 jest-get-type: 29.6.3 @@ -4189,169 +5981,148 @@ packages: transitivePeerDependencies: - babel-plugin-macros - supports-color - dev: true - /jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-config@29.7.0(@types/node@20.8.7): + dependencies: + '@babel/core': 7.23.2 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.8.7 + babel-jest: 29.7.0(@babel/core@7.23.2) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.7.0: dependencies: chalk: 4.1.2 diff-sequences: 29.6.3 jest-get-type: 29.6.3 pretty-format: 29.7.0 - dev: true - /jest-docblock@29.7.0: - resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-docblock@29.7.0: dependencies: detect-newline: 3.1.0 - dev: true - /jest-each@29.7.0: - resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-each@29.7.0: dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 jest-get-type: 29.6.3 jest-util: 29.7.0 pretty-format: 29.7.0 - dev: true - /jest-environment-node@29.7.0: - resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-environment-node@29.7.0: dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.17.5 + '@types/node': 20.8.7 jest-mock: 29.7.0 jest-util: 29.7.0 - dev: true - /jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + jest-get-type@29.6.3: {} - /jest-haste-map@29.7.0: - resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-haste-map@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.5 - '@types/node': 18.17.5 - anymatch: 3.1.2 + '@types/graceful-fs': 4.1.8 + '@types/node': 20.8.7 + anymatch: 3.1.3 fb-watchman: 2.0.2 - graceful-fs: 4.2.9 + graceful-fs: 4.2.11 jest-regex-util: 29.6.3 jest-util: 29.7.0 jest-worker: 29.7.0 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: - fsevents: 2.3.2 - dev: true + fsevents: 2.3.3 - /jest-leak-detector@29.7.0: - resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-leak-detector@29.7.0: dependencies: jest-get-type: 29.6.3 pretty-format: 29.7.0 - dev: true - /jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-matcher-utils@29.7.0: dependencies: chalk: 4.1.2 jest-diff: 29.7.0 jest-get-type: 29.6.3 pretty-format: 29.7.0 - dev: true - /jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-message-util@29.7.0: dependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.22.13 '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.1 + '@types/stack-utils': 2.0.2 chalk: 4.1.2 - graceful-fs: 4.2.9 + graceful-fs: 4.2.11 micromatch: 4.0.5 pretty-format: 29.7.0 slash: 3.0.0 - stack-utils: 2.0.5 - dev: true + stack-utils: 2.0.6 - /jest-mock@29.7.0: - resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 18.17.5 + '@types/node': 20.8.7 jest-util: 29.7.0 - dev: true - /jest-pnp-resolver@1.2.2(jest-resolve@29.7.0): - resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): dependencies: jest-resolve: 29.7.0 - dev: true - /jest-regex-util@29.6.3: - resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + jest-regex-util@29.6.3: {} - /jest-resolve-dependencies@29.7.0: - resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-resolve-dependencies@29.7.0: dependencies: jest-regex-util: 29.6.3 jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color - dev: true - /jest-resolve@29.7.0: - resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-resolve@29.7.0: dependencies: chalk: 4.1.2 - graceful-fs: 4.2.9 + graceful-fs: 4.2.11 jest-haste-map: 29.7.0 - jest-pnp-resolver: 1.2.2(jest-resolve@29.7.0) + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) jest-util: 29.7.0 jest-validate: 29.7.0 - resolve: 1.22.3 - resolve.exports: 2.0.0 + resolve: 1.22.8 + resolve.exports: 2.0.2 slash: 3.0.0 - dev: true - /jest-runner@29.7.0: - resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-runner@29.7.0: dependencies: '@jest/console': 29.7.0 '@jest/environment': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.17.5 + '@types/node': 20.8.7 chalk: 4.1.2 emittery: 0.13.1 - graceful-fs: 4.2.9 + graceful-fs: 4.2.11 jest-docblock: 29.7.0 jest-environment-node: 29.7.0 jest-haste-map: 29.7.0 @@ -4366,11 +6137,8 @@ packages: source-map-support: 0.5.13 transitivePeerDependencies: - supports-color - dev: true - /jest-runtime@29.7.0: - resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-runtime@29.7.0: dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 @@ -4379,12 +6147,12 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.17.5 + '@types/node': 20.8.7 chalk: 4.1.2 - cjs-module-lexer: 1.2.2 - collect-v8-coverage: 1.0.1 + cjs-module-lexer: 1.2.3 + collect-v8-coverage: 1.0.2 glob: 7.2.3 - graceful-fs: 4.2.9 + graceful-fs: 4.2.11 jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-mock: 29.7.0 @@ -4396,24 +6164,21 @@ packages: strip-bom: 4.0.0 transitivePeerDependencies: - supports-color - dev: true - /jest-snapshot@29.7.0: - resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.22.5 - '@babel/generator': 7.22.5 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-syntax-typescript': 7.16.7(@babel/core@7.22.5) - '@babel/types': 7.22.5 + '@babel/core': 7.23.2 + '@babel/generator': 7.23.0 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2) + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2) + '@babel/types': 7.23.0 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.5) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.2) chalk: 4.1.2 expect: 29.7.0 - graceful-fs: 4.2.9 + graceful-fs: 4.2.11 jest-diff: 29.7.0 jest-get-type: 29.6.3 jest-matcher-utils: 29.7.0 @@ -4424,35 +6189,17 @@ packages: semver: 7.5.4 transitivePeerDependencies: - supports-color - dev: true - - /jest-util@29.6.2: - resolution: {integrity: sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.1.3 - chalk: 4.1.2 - ci-info: 3.3.0 - graceful-fs: 4.2.9 - picomatch: 2.3.1 - dev: true - /jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 18.17.5 + '@types/node': 20.8.7 chalk: 4.1.2 - ci-info: 3.3.0 - graceful-fs: 4.2.9 + ci-info: 3.9.0 + graceful-fs: 4.2.11 picomatch: 2.3.1 - dev: true - /jest-validate@29.7.0: - resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-validate@29.7.0: dependencies: '@jest/types': 29.6.3 camelcase: 6.3.0 @@ -4460,436 +6207,257 @@ packages: jest-get-type: 29.6.3 leven: 3.1.0 pretty-format: 29.7.0 - dev: true - /jest-watcher@29.7.0: - resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-watcher@29.7.0: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 18.17.5 + '@types/node': 20.8.7 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 jest-util: 29.7.0 string-length: 4.0.2 - dev: true - /jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@29.7.0: dependencies: - '@types/node': 18.17.5 + '@types/node': 20.8.7 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true - /jest@29.7.0(@types/node@18.17.5): - resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + jest@29.7.0(@types/node@18.18.6): dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@18.17.5) + jest-cli: 29.7.0(@types/node@18.18.6) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - dev: true - /jiti@1.18.2: - resolution: {integrity: sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==} - hasBin: true - dev: true + jiti@1.20.0: {} - /jose@4.13.1: - resolution: {integrity: sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ==} - dev: true + jose@4.15.4: {} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@4.0.0: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + js-yaml@3.14.1: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true + jsesc@2.5.2: {} - /json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - dev: true + json-buffer@3.0.1: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + json-parse-better-errors@1.0.2: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-parse-even-better-errors@2.3.1: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-schema-traverse@0.4.1: {} - /json-stable-stringify@1.0.1: - resolution: {integrity: sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==} + json-stable-stringify-without-jsonify@1.0.1: {} + + json-stable-stringify@1.0.2: dependencies: - jsonify: 0.0.0 - dev: true + jsonify: 0.0.1 - /json-to-pretty-yaml@1.2.2: - resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} - engines: {node: '>= 0.2.0'} + json-to-pretty-yaml@1.2.2: dependencies: remedial: 1.0.8 remove-trailing-spaces: 1.0.8 - dev: true - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true + json5@1.0.2: dependencies: minimist: 1.2.8 - dev: true - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + json5@2.2.3: {} - /jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} - dev: true + jsonc-parser@3.2.0: {} - /jsonify@0.0.0: - resolution: {integrity: sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==} - dev: true + jsonify@0.0.1: {} - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: true + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: true + kleur@3.0.3: {} - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + leven@3.1.0: {} + + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + lines-and-columns@1.2.4: {} - /listr2@4.0.5: - resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} - engines: {node: '>=12'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true + listr2@4.0.5: dependencies: cli-truncate: 2.1.0 - colorette: 2.0.19 + colorette: 2.0.20 log-update: 4.0.0 p-map: 4.0.0 rfdc: 1.3.0 - rxjs: 7.5.5 + rxjs: 7.8.1 through: 2.3.8 wrap-ansi: 7.0.0 - dev: true - /load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} + load-json-file@4.0.0: dependencies: - graceful-fs: 4.2.9 + graceful-fs: 4.2.11 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 - dev: true - /local-pkg@0.4.3: - resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} - engines: {node: '>=14'} - dev: true + local-pkg@0.4.3: {} - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - dev: true + lodash.memoize@4.1.2: {} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.merge@4.6.2: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lodash@4.17.21: {} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true - /log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} + log-update@4.0.0: dependencies: ansi-escapes: 4.3.2 cli-cursor: 3.1.0 slice-ansi: 4.0.0 wrap-ansi: 6.2.0 - dev: true - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - /loupe@2.3.6: - resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} + loupe@2.3.7: dependencies: - get-func-name: 2.0.0 - dev: true + get-func-name: 2.0.2 - /lower-case-first@2.0.2: - resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} + lower-case-first@2.0.2: dependencies: - tslib: 2.6.1 + tslib: 2.6.2 - /lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lower-case@2.0.2: dependencies: - tslib: 2.6.1 + tslib: 2.6.2 - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@6.0.0: dependencies: yallist: 4.0.0 - dev: true - /magic-string@0.30.2: - resolution: {integrity: sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==} - engines: {node: '>=12'} + magic-string@0.30.5: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} + make-dir@4.0.0: dependencies: - semver: 6.3.1 - dev: true + semver: 7.5.4 - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + make-error@1.3.6: {} - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + makeerror@1.0.12: dependencies: tmpl: 1.0.5 - dev: true - /map-cache@0.2.2: - resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} - engines: {node: '>=0.10.0'} + map-cache@0.2.2: {} - /memorystream@0.3.1: - resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} - engines: {node: '>= 0.10.0'} - dev: true + memorystream@0.3.1: {} - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + merge-stream@2.0.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge2@1.4.1: {} - /meros@1.2.1(@types/node@18.17.5): - resolution: {integrity: sha512-R2f/jxYqCAGI19KhAvaxSOxALBMkaXWH2a7rOyqQw+ZmizX5bKkEYWLzdhC+U82ZVVPVp6MCXe3EkVligh+12g==} - engines: {node: '>=13'} - peerDependencies: - '@types/node': '>=13' - peerDependenciesMeta: - '@types/node': - optional: true + meros@1.3.0(@types/node@18.18.6): dependencies: - '@types/node': 18.17.5 - dev: true + '@types/node': 18.18.6 - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + micromatch@4.0.5: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + mimic-fn@2.1.0: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - /minimatch@4.2.3: - resolution: {integrity: sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==} - engines: {node: '>=10'} + minimatch@4.2.3: dependencies: brace-expansion: 1.1.11 - dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + minimist@1.2.8: {} - /mlly@1.4.0: - resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==} + mlly@1.4.2: dependencies: acorn: 8.10.0 pathe: 1.1.1 pkg-types: 1.0.3 - ufo: 1.2.0 - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ufo: 1.3.1 - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true + ms@2.1.2: {} - /mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - dev: true + ms@2.1.3: {} - /myzod@1.10.2: - resolution: {integrity: sha512-vTVMVAWMJxXjMpScUuLg583NiYnAMit78Y4ZOkAQXevCQp3ZwlXuTY/aWrgTXxbDTysei3kahkvkbNSNy93o2g==} - dev: true + mute-stream@0.0.8: {} - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nanoid@3.3.6: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + natural-compare@1.4.0: {} - /nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - dev: true + nice-try@1.0.5: {} - /no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + no-case@3.0.4: dependencies: lower-case: 2.0.2 - tslib: 2.6.1 + tslib: 2.6.2 - /node-fetch@2.6.11: - resolution: {integrity: sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + node-int64@0.4.0: {} - /node-releases@2.0.12: - resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} + node-releases@2.0.13: {} - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 - resolve: 1.22.3 - semver: 5.7.1 + resolve: 1.22.8 + semver: 5.7.2 validate-npm-package-license: 3.0.4 - dev: true - /normalize-path@2.1.1: - resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} - engines: {node: '>=0.10.0'} + normalize-path@2.1.1: dependencies: remove-trailing-separator: 1.1.0 - dev: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /npm-run-all@4.1.5: - resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} - engines: {node: '>= 4'} - hasBin: true + npm-run-all@4.1.5: dependencies: ansi-styles: 3.2.1 chalk: 2.4.2 @@ -4898,85 +6466,56 @@ packages: minimatch: 3.1.2 pidtree: 0.3.1 read-pkg: 3.0.0 - shell-quote: 1.7.3 - string.prototype.padend: 3.1.3 - dev: true + shell-quote: 1.8.1 + string.prototype.padend: 3.1.5 - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - dev: true - /nullthrows@1.1.1: - resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + nullthrows@1.1.1: {} - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + object-assign@4.1.1: {} - /object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - dev: true + object-inspect@1.13.1: {} - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-keys@1.1.1: {} - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} + object.assign@4.1.4: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 + call-bind: 1.0.5 + define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true - /object.fromentries@2.0.6: - resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} - engines: {node: '>= 0.4'} + object.fromentries@2.0.7: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 - /object.groupby@1.0.0: - resolution: {integrity: sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==} + object.groupby@1.0.1: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - get-intrinsic: 1.2.1 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.2 - /object.values@1.1.6: - resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} - engines: {node: '>= 0.4'} + object.values@1.1.7: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 @@ -4984,1065 +6523,641 @@ packages: levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + ora@5.4.1: dependencies: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.6.1 + cli-spinners: 2.9.1 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 - dev: true - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true + os-tmpdir@1.0.2: {} - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + p-limit@2.3.0: dependencies: p-try: 2.2.0 - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-limit@4.0.0: dependencies: yocto-queue: 1.0.0 - dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} + p-map@4.0.0: dependencies: aggregate-error: 3.1.0 - dev: true - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} + p-try@2.2.0: {} - /param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + param-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.6.1 + tslib: 2.6.2 - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /parse-filepath@1.0.2: - resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} - engines: {node: '>=0.8'} + parse-filepath@1.0.2: dependencies: is-absolute: 1.0.0 map-cache: 0.2.2 path-root: 0.1.1 - /parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} + parse-json@4.0.0: dependencies: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 - dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.22.5 + '@babel/code-frame': 7.22.13 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true - /pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + pascal-case@3.1.2: dependencies: no-case: 3.0.4 - tslib: 2.6.1 + tslib: 2.6.2 - /path-case@3.0.4: - resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + path-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.6.1 + tslib: 2.6.2 - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + path-is-absolute@1.0.1: {} - /path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - dev: true + path-key@2.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + path-key@3.1.1: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-parse@1.0.7: {} - /path-root-regex@0.1.2: - resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} - engines: {node: '>=0.10.0'} + path-root-regex@0.1.2: {} - /path-root@0.1.1: - resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} - engines: {node: '>=0.10.0'} + path-root@0.1.1: dependencies: path-root-regex: 0.1.2 - /path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} + path-type@3.0.0: dependencies: pify: 3.0.0 - dev: true - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + path-type@4.0.0: {} - /pathe@1.1.1: - resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} - dev: true + pathe@1.1.1: {} - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true + pathval@1.1.1: {} - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.0.0: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /pidtree@0.3.1: - resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} - engines: {node: '>=0.10'} - hasBin: true - dev: true + pidtree@0.3.1: {} - /pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} - dev: true + pify@3.0.0: {} - /pirates@4.0.4: - resolution: {integrity: sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==} - engines: {node: '>= 6'} - dev: true + pirates@4.0.6: {} - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - dev: true - /pkg-types@1.0.3: - resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + pkg-types@1.0.3: dependencies: jsonc-parser: 3.2.0 - mlly: 1.4.0 + mlly: 1.4.2 pathe: 1.1.1 - dev: true - /postcss@8.4.27: - resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.31: dependencies: nanoid: 3.3.6 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + prelude-ls@1.2.1: {} - /prettier@3.0.3: - resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} - engines: {node: '>=14'} - hasBin: true - dev: true + prettier@3.0.3: {} - /pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.1.0 - dev: true + react-is: 18.2.0 - /promise@7.3.1: - resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + promise@7.3.1: dependencies: asap: 2.0.6 - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} + prompts@2.4.2: dependencies: kleur: 3.0.3 sisteransi: 1.0.5 - dev: true - /property-expr@2.0.5: - resolution: {integrity: sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==} - dev: true + property-expr@2.0.6: {} - /punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - dev: true + punycode@1.4.1: {} - /punycode@2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} - engines: {node: '>=6'} - dev: true + punycode@2.3.0: {} - /pure-rand@6.0.0: - resolution: {integrity: sha512-rLSBxJjP+4DQOgcJAx6RZHT2he2pkhQdSnofG5VWyVl6GRq/K02ISOuOLcsMOrtKDIJb8JN2zm3FFzWNbezdPw==} - dev: true + pure-rand@6.0.4: {} - /pvtsutils@1.3.2: - resolution: {integrity: sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ==} + pvtsutils@1.3.5: dependencies: - tslib: 2.6.1 - dev: true + tslib: 2.6.2 - /pvutils@1.1.3: - resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} - engines: {node: '>=6.0.0'} - dev: true + pvutils@1.1.3: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + queue-microtask@1.2.3: {} - /react-is@18.1.0: - resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} - dev: true + react-is@18.2.0: {} - /read-pkg@3.0.0: - resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} - engines: {node: '>=4'} + read-pkg@3.0.0: dependencies: load-json-file: 4.0.0 normalize-package-data: 2.5.0 path-type: 3.0.0 - dev: true - /readable-stream@3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + regenerator-runtime@0.14.0: {} - /regexp.prototype.flags@1.5.0: - resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.1: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - functions-have-names: 1.2.3 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 - /relay-runtime@12.0.0: - resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} + relay-runtime@12.0.0: dependencies: - '@babel/runtime': 7.22.5 + '@babel/runtime': 7.23.2 fbjs: 3.0.5 invariant: 2.2.4 transitivePeerDependencies: - encoding - /remedial@1.0.8: - resolution: {integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==} - dev: true + remedial@1.0.8: {} - /remove-trailing-separator@1.1.0: - resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} - dev: true + remove-trailing-separator@1.1.0: {} - /remove-trailing-spaces@1.0.8: - resolution: {integrity: sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==} - dev: true + remove-trailing-spaces@1.0.8: {} - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + require-directory@2.1.1: {} - /require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + require-main-filename@2.0.0: {} - /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} + resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 - dev: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + resolve-from@4.0.0: {} - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + resolve-from@5.0.0: {} - /resolve.exports@2.0.0: - resolution: {integrity: sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==} - engines: {node: '>=10'} - dev: true + resolve.exports@2.0.2: {} - /resolve@1.22.3: - resolution: {integrity: sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==} - hasBin: true + resolve@1.22.8: dependencies: - is-core-module: 2.12.1 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.0.4: {} - /rfdc@1.3.0: - resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} - dev: true + rfdc@1.3.0: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true + rimraf@3.0.2: dependencies: glob: 7.2.3 - dev: true - /rollup@3.28.0: - resolution: {integrity: sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true + rollup@3.29.4: optionalDependencies: - fsevents: 2.3.2 - dev: true + fsevents: 2.3.3 - /run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - dev: true + run-async@2.4.1: {} - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /rxjs@7.5.5: - resolution: {integrity: sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==} + rxjs@7.8.1: dependencies: - tslib: 2.6.1 - dev: true + tslib: 2.6.2 - /safe-array-concat@1.0.0: - resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} - engines: {node: '>=0.4'} + safe-array-concat@1.0.1: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 has-symbols: 1.0.3 isarray: 2.0.5 - dev: true - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true + safe-buffer@5.2.1: {} - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + safe-regex-test@1.0.0: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-regex: 1.1.4 - dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safer-buffer@2.1.2: {} - /scuid@1.1.0: - resolution: {integrity: sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==} - dev: true + scuid@1.1.0: {} - /semver@5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true - dev: true + semver@5.7.2: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true + semver@6.3.1: {} - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true + semver@7.5.4: dependencies: lru-cache: 6.0.0 - dev: true - /sentence-case@3.0.4: - resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + sentence-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.6.1 + tslib: 2.6.2 upper-case-first: 2.0.2 - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + set-blocking@2.0.0: {} - /setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + set-function-length@1.1.1: + dependencies: + define-data-property: 1.1.1 + get-intrinsic: 1.2.2 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 - /shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + set-function-name@2.0.1: + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.1 + + setimmediate@1.0.5: {} + + shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 - dev: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - dev: true + shebang-regex@1.0.0: {} - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - /shell-quote@1.7.3: - resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} - dev: true + shell-quote@1.8.1: {} - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + side-channel@1.0.4: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.12.3 - dev: true + call-bind: 1.0.5 + get-intrinsic: 1.2.2 + object-inspect: 1.13.1 - /siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - dev: true + siginfo@2.0.0: {} - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + signal-exit@3.0.7: {} - /signedsource@1.0.0: - resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} + signedsource@1.0.0: {} - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true + sisteransi@1.0.5: {} - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true + slash@3.0.0: {} - /slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} + slice-ansi@3.0.0: dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - dev: true - /slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} + slice-ansi@4.0.0: dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - dev: true - /snake-case@3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + snake-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.6.1 + tslib: 2.6.2 - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true + source-map-js@1.0.2: {} - /source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + source-map-support@0.5.13: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /spdx-correct@3.1.1: - resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.11 - dev: true + spdx-license-ids: 3.0.16 - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true + spdx-exceptions@2.3.0: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.11 - dev: true + spdx-license-ids: 3.0.16 - /spdx-license-ids@3.0.11: - resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==} - dev: true + spdx-license-ids@3.0.16: {} - /sponge-case@1.0.1: - resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} + sponge-case@1.0.1: dependencies: - tslib: 2.6.1 + tslib: 2.6.2 - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + sprintf-js@1.0.3: {} - /stack-utils@2.0.5: - resolution: {integrity: sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==} - engines: {node: '>=10'} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 - dev: true - /stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - dev: true + stackback@0.0.2: {} - /std-env@3.3.3: - resolution: {integrity: sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==} - dev: true + std-env@3.4.3: {} - /streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - dev: true + streamsearch@1.1.0: {} - /string-env-interpolation@1.0.1: - resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} - dev: true + string-env-interpolation@1.0.1: {} - /string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} + string-length@4.0.2: dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 - dev: true - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string.prototype.padend@3.1.3: - resolution: {integrity: sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==} - engines: {node: '>= 0.4'} + string.prototype.padend@3.1.5: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 - /string.prototype.trim@1.2.7: - resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.8: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 - /string.prototype.trimend@1.0.6: - resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + string.prototype.trimend@1.0.7: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 - /string.prototype.trimstart@1.0.6: - resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + string.prototype.trimstart@1.0.7: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - dev: true + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + strip-bom@3.0.0: {} - /strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: true + strip-bom@4.0.0: {} - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + strip-final-newline@2.0.0: {} - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /strip-literal@1.3.0: - resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + strip-literal@1.3.0: dependencies: acorn: 8.10.0 - dev: true - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /swap-case@2.0.2: - resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} + swap-case@2.0.2: dependencies: - tslib: 2.6.1 + tslib: 2.6.2 - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 - dev: true - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-table@0.2.0: {} - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true + through@2.3.8: {} - /tiny-case@1.0.3: - resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} - dev: true + tiny-case@1.0.3: {} - /tinybench@2.5.0: - resolution: {integrity: sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==} - dev: true + tinybench@2.5.1: {} - /tinypool@0.7.0: - resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} - engines: {node: '>=14.0.0'} - dev: true + tinypool@0.7.0: {} - /tinyspy@2.1.1: - resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==} - engines: {node: '>=14.0.0'} - dev: true + tinyspy@2.2.0: {} - /title-case@3.0.3: - resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + title-case@3.0.3: dependencies: - tslib: 2.6.1 + tslib: 2.6.2 - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - dev: true - /tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: true + tmpl@1.0.5: {} - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} + to-fast-properties@2.0.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /toposort@2.0.2: - resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} - dev: true + toposort@2.0.2: {} - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@0.0.3: {} - /ts-api-utils@1.0.1(typescript@5.2.2): - resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' + ts-api-utils@1.0.3(typescript@5.2.2): dependencies: typescript: 5.2.2 - dev: true - /ts-dedent@2.2.0: - resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} - engines: {node: '>=6.10'} - dev: true + ts-dedent@2.2.0: {} - /ts-jest@29.1.1(@babel/core@7.22.5)(jest@29.7.0)(typescript@5.2.2): - resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@jest/types': ^29.0.0 - babel-jest: ^29.0.0 - esbuild: '*' - jest: ^29.0.0 - typescript: '>=4.3 <6' - peerDependenciesMeta: - '@babel/core': - optional: true - '@jest/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true + ts-jest@29.1.1(@babel/core@7.23.2)(jest@29.7.0)(typescript@5.2.2): dependencies: - '@babel/core': 7.22.5 + '@babel/core': 7.23.2 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@18.17.5) - jest-util: 29.6.2 + jest: 29.7.0(@types/node@18.18.6) + jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.5.4 typescript: 5.2.2 - yargs-parser: 21.0.1 - dev: true + yargs-parser: 21.1.1 - /ts-log@2.2.4: - resolution: {integrity: sha512-DEQrfv6l7IvN2jlzc/VTdZJYsWUnQNCsueYjMkC/iXoEoi5fNan6MjeDqkvhfzbmHgdz9UxDUluX3V5HdjTydQ==} - dev: true + ts-log@2.2.5: {} - /tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + tsconfig-paths@3.14.2: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true - /tslib@2.5.3: - resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} + tslib@2.5.3: {} - /tslib@2.6.1: - resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} + tslib@2.6.2: {} - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true + type-detect@4.0.8: {} - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + type-fest@0.20.2: {} - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true + type-fest@0.21.3: {} - /type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - dev: true + type-fest@2.19.0: {} - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.0: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.5 + get-intrinsic: 1.2.2 is-typed-array: 1.1.12 - dev: true - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.0: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - dev: true - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.0: dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - dev: true - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + typed-array-length@1.0.4: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 is-typed-array: 1.1.12 - dev: true - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.2.2: {} - /ua-parser-js@1.0.35: - resolution: {integrity: sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==} + ua-parser-js@1.0.36: {} - /ufo@1.2.0: - resolution: {integrity: sha512-RsPyTbqORDNDxqAdQPQBpgqhWle1VcTSou/FraClYlHf6TZnQcGslpLcAphNR+sQW4q5lLWLbOsRlh9j24baQg==} - dev: true + ufo@1.3.1: {} - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.0.2: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.5 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true - /unc-path-regex@0.1.2: - resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} - engines: {node: '>=0.10.0'} + unc-path-regex@0.1.2: {} - /unixify@1.0.0: - resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} - engines: {node: '>=0.10.0'} + undici-types@5.25.3: {} + + unixify@1.0.0: dependencies: normalize-path: 2.1.1 - dev: true - /update-browserslist-db@1.0.11(browserslist@4.21.9): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.0.13(browserslist@4.22.1): dependencies: - browserslist: 4.21.9 + browserslist: 4.22.1 escalade: 3.1.1 picocolors: 1.0.0 - /upper-case-first@2.0.2: - resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + upper-case-first@2.0.2: dependencies: - tslib: 2.6.1 + tslib: 2.6.2 - /upper-case@2.0.2: - resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + upper-case@2.0.2: dependencies: - tslib: 2.6.1 + tslib: 2.6.2 - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: - punycode: 2.1.1 - dev: true + punycode: 2.3.0 - /urlpattern-polyfill@6.0.2: - resolution: {integrity: sha512-5vZjFlH9ofROmuWmXM9yj2wljYKgWstGwe8YTyiqM7hVum/g9LyCizPZtb3UqsuppVwety9QJmfc42VggLpTgg==} - dependencies: - braces: 3.0.2 - dev: true + urlpattern-polyfill@8.0.2: {} - /urlpattern-polyfill@8.0.2: - resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} - dev: true + urlpattern-polyfill@9.0.0: {} - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true + util-deprecate@1.0.2: {} - /v8-to-istanbul@9.0.1: - resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} - engines: {node: '>=10.12.0'} + v8-to-istanbul@9.1.3: dependencies: - '@jridgewell/trace-mapping': 0.3.18 - '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.9.0 - dev: true + '@jridgewell/trace-mapping': 0.3.20 + '@types/istanbul-lib-coverage': 2.0.5 + convert-source-map: 2.0.0 - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-license@3.0.4: dependencies: - spdx-correct: 3.1.1 + spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: true - /value-or-promise@1.0.12: - resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} - engines: {node: '>=12'} - dev: true + value-or-promise@1.0.12: {} - /vite-node@0.34.1(@types/node@20.1.3): - resolution: {integrity: sha512-odAZAL9xFMuAg8aWd7nSPT+hU8u2r9gU3LRm9QKjxBEF2rRdWpMuqkrkjvyVQEdNFiBctqr2Gg4uJYizm5Le6w==} - engines: {node: '>=v14.18.0'} - hasBin: true + vite-node@0.34.6(@types/node@20.8.7): dependencies: cac: 6.7.14 debug: 4.3.4 - mlly: 1.4.0 + mlly: 1.4.2 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.4.9(@types/node@20.1.3) + vite: 4.5.0(@types/node@20.8.7) transitivePeerDependencies: - '@types/node' - less @@ -6052,98 +7167,41 @@ packages: - sugarss - supports-color - terser - dev: true - /vite@4.4.9(@types/node@20.1.3): - resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - 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 + vite@4.5.0(@types/node@20.8.7): dependencies: - '@types/node': 20.1.3 + '@types/node': 20.8.7 esbuild: 0.18.20 - postcss: 8.4.27 - rollup: 3.28.0 + postcss: 8.4.31 + rollup: 3.29.4 optionalDependencies: - fsevents: 2.3.2 - dev: true - - /vitest@0.34.1: - resolution: {integrity: sha512-G1PzuBEq9A75XSU88yO5G4vPT20UovbC/2osB2KEuV/FisSIIsw7m5y2xMdB7RsAGHAfg2lPmp2qKr3KWliVlQ==} - engines: {node: '>=v14.18.0'} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@vitest/browser': '*' - '@vitest/ui': '*' - happy-dom: '*' - jsdom: '*' - playwright: '*' - safaridriver: '*' - webdriverio: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - playwright: - optional: true - safaridriver: - optional: true - webdriverio: - optional: true - dependencies: - '@types/chai': 4.3.5 - '@types/chai-subset': 1.3.3 - '@types/node': 20.1.3 - '@vitest/expect': 0.34.1 - '@vitest/runner': 0.34.1 - '@vitest/snapshot': 0.34.1 - '@vitest/spy': 0.34.1 - '@vitest/utils': 0.34.1 - acorn: 8.9.0 + fsevents: 2.3.3 + + vitest@0.34.6: + dependencies: + '@types/chai': 4.3.9 + '@types/chai-subset': 1.3.4 + '@types/node': 20.8.7 + '@vitest/expect': 0.34.6 + '@vitest/runner': 0.34.6 + '@vitest/snapshot': 0.34.6 + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 + acorn: 8.10.0 acorn-walk: 8.2.0 cac: 6.7.14 - chai: 4.3.7 + chai: 4.3.10 debug: 4.3.4 local-pkg: 0.4.3 - magic-string: 0.30.2 + magic-string: 0.30.5 pathe: 1.1.1 picocolors: 1.0.0 - std-env: 3.3.3 + std-env: 3.4.3 strip-literal: 1.3.0 - tinybench: 2.5.0 + tinybench: 2.5.1 tinypool: 0.7.0 - vite: 4.4.9(@types/node@20.1.3) - vite-node: 0.34.1(@types/node@20.1.3) + vite: 4.5.0(@types/node@20.8.7) + vite-node: 0.34.6(@types/node@20.8.7) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -6153,172 +7211,104 @@ packages: - sugarss - supports-color - terser - dev: true - /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + walker@1.0.8: dependencies: makeerror: 1.0.12 - dev: true - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + wcwidth@1.0.1: dependencies: - defaults: 1.0.3 - dev: true + defaults: 1.0.4 - /web-streams-polyfill@3.2.1: - resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} - engines: {node: '>= 8'} - dev: true + web-streams-polyfill@3.2.1: {} - /webcrypto-core@1.7.5: - resolution: {integrity: sha512-gaExY2/3EHQlRNNNVSrbG2Cg94Rutl7fAaKILS1w8ZDhGxdFOaw6EbCfHIxPy9vt/xwp5o0VQAx9aySPF6hU1A==} + webcrypto-core@1.7.7: dependencies: - '@peculiar/asn1-schema': 2.2.0 + '@peculiar/asn1-schema': 2.3.8 '@peculiar/json-schema': 1.1.12 asn1js: 3.0.5 - pvtsutils: 1.3.2 - tslib: 2.6.1 - dev: true + pvtsutils: 1.3.5 + tslib: 2.6.2 - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@3.0.1: {} - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true - /which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + which-module@2.0.1: {} - /which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.13: dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + call-bind: 1.0.5 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - dev: true - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true + which@1.3.1: dependencies: isexe: 2.0.0 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /why-is-node-running@2.2.2: - resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} - engines: {node: '>=8'} - hasBin: true + why-is-node-running@2.2.2: dependencies: siginfo: 2.0.0 stackback: 0.0.2 - dev: true - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + wrappy@1.0.2: {} - /write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + write-file-atomic@4.0.2: dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 - dev: true - /ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + ws@8.14.2: {} - /y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + y18n@4.0.3: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + y18n@5.0.8: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@3.1.1: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + yallist@4.0.0: {} - /yaml-ast-parser@0.0.43: - resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} - dev: true + yaml-ast-parser@0.0.43: {} - /yaml@2.3.1: - resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} - engines: {node: '>= 14'} - dev: true + yaml@2.3.3: {} - /yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 - /yargs-parser@21.0.1: - resolution: {integrity: sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==} - engines: {node: '>=12'} - dev: true + yargs-parser@21.1.1: {} - /yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} + yargs@15.4.1: dependencies: cliui: 6.0.0 decamelize: 1.2.0 @@ -6332,38 +7322,23 @@ packages: y18n: 4.0.3 yargs-parser: 18.1.3 - /yargs@17.4.1: - resolution: {integrity: sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: - cliui: 7.0.4 + cliui: 8.0.1 escalade: 3.1.1 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 - yargs-parser: 21.0.1 - dev: true + yargs-parser: 21.1.1 - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: true + yocto-queue@1.0.0: {} - /yup@1.3.2: - resolution: {integrity: sha512-6KCM971iQtJ+/KUaHdrhVr2LDkfhBtFPRnsG1P8F4q3uUVQ2RfEM9xekpha9aA4GXWJevjM10eDcPQ1FfWlmaQ==} + yup@1.3.2: dependencies: - property-expr: 2.0.5 + property-expr: 2.0.6 tiny-case: 1.0.3 toposort: 2.0.2 type-fest: 2.19.0 - dev: true - - /zod@3.22.4: - resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} - dev: true diff --git a/src/config.ts b/src/config.ts index 04c1af45..4b205bf3 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,39 +1,29 @@ import { TypeScriptPluginConfig } from '@graphql-codegen/typescript'; -export type ValidationSchema = 'yup' | 'zod' | 'myzod'; export type ValidationSchemaExportType = 'function' | 'const'; -export interface DirectiveConfig { - [directive: string]: { - [argument: string]: string | string[] | DirectiveObjectArguments; - }; -} - -export interface DirectiveObjectArguments { - [matched: string]: string | string[]; -} +/** + * directive example: + * + * email: Email! @rules(apply: ["email:rfc", "minLength:100"]) + * + * { + * email: "email", + * minLength: ["min", "$1"], + * } + */ +export type Rule = + | string // "integer" + | string[]; // ["size", "255"] +export type Rules = { + [ruleName: string]: Rule; +}; interface ScalarSchemas { [name: string]: string; } export interface ValidationSchemaPluginConfig extends TypeScriptPluginConfig { - /** - * @description specify generate schema - * @default yup - * - * @exampleMarkdown - * ```yml - * generates: - * path/to/file.ts: - * plugins: - * - typescript - * - graphql-codegen-validation-schema - * config: - * schema: yup - * ``` - */ - schema?: ValidationSchema; /** * @description import types from generated typescript type path * if not given, omit import statement. @@ -138,21 +128,6 @@ export interface ValidationSchemaPluginConfig extends TypeScriptPluginConfig { * ``` */ enumsAsTypes?: boolean; - /** - * @description Generates validation string schema as do not allow empty characters by default. - * @default false - * - * @exampleMarkdown - * ```yml - * generates: - * path/to/file.ts: - * plugins: - * - graphql-codegen-validation-schema - * config: - * notAllowEmptyString: true - * ``` - */ - notAllowEmptyString?: boolean; /** * @description Extends or overrides validation schema for the built-in scalars and custom GraphQL scalars. * @@ -165,14 +140,6 @@ export interface ValidationSchemaPluginConfig extends TypeScriptPluginConfig { * Email: yup.string().email() * ``` * - * @exampleMarkdown - * ```yml - * config: - * schema: zod - * scalarSchemas: - * Date: z.date() - * Email: z.string().email() - * ``` */ scalarSchemas?: ScalarSchemas; /** @@ -193,7 +160,7 @@ export interface ValidationSchemaPluginConfig extends TypeScriptPluginConfig { * withObjectType: true * ``` */ - withObjectType?: boolean; + withObjectType?: false | 'no-reserved' | 'all'; /** * @description Specify validation schema export type. * @default function @@ -220,35 +187,22 @@ export interface ValidationSchemaPluginConfig extends TypeScriptPluginConfig { * - graphql-codegen-validation-schema * config: * schema: yup - * directives: - * required: - * msg: required - * # This is example using constraint directive. - * # see: https://github.com/confuser/graphql-constraint-directive - * constraint: - * minLength: min # same as ['min', '$1'] - * maxLength: max - * startsWith: ["matches", "/^$1/"] - * endsWith: ["matches", "/$1$/"] - * contains: ["matches", "/$1/"] - * notContains: ["matches", "/^((?!$1).)*$/"] - * pattern: ["matches", "/$1/"] - * format: - * # For example, `@constraint(format: "uri")`. this case $1 will be "uri". - * # Therefore the generator generates yup schema `.url()` followed by `uri: 'url'` - * # If $1 does not match anywhere, the generator will ignore. - * uri: url - * email: email - * uuid: uuid - * # yup does not have `ipv4` API. If you want to add this, - * # you need to add the logic using `yup.addMethod`. - * # see: https://github.com/jquense/yup#addmethodschematype-schema-name-string-method--schema-void - * ipv4: ipv4 - * min: ["min", "$1 - 1"] - * max: ["max", "$1 + 1"] - * exclusiveMin: min - * exclusiveMax: max + * rules: + * minLength: min + * maxLength: max * ``` */ - directives?: DirectiveConfig; + rules?: Rules; + /** + * a list of rules to ignore + */ + ignoreRules?: string[]; + /** + * a list of types to be lazy evaluated + */ + lazyTypes?: string[]; + /** + * a list of rules to be lazy evaluated + */ + lazyRules?: string[]; } diff --git a/src/directive.ts b/src/directive.ts deleted file mode 100644 index a85efb10..00000000 --- a/src/directive.ts +++ /dev/null @@ -1,211 +0,0 @@ -import { ConstArgumentNode, ConstDirectiveNode, ConstValueNode, Kind, valueFromASTUntyped } from 'graphql'; - -import { DirectiveConfig, DirectiveObjectArguments } from './config'; -import { isConvertableRegexp } from './regexp'; - -export interface FormattedDirectiveConfig { - [directive: string]: FormattedDirectiveArguments; -} - -export interface FormattedDirectiveArguments { - [argument: string]: string[] | FormattedDirectiveObjectArguments | undefined; -} - -export interface FormattedDirectiveObjectArguments { - [matched: string]: string[] | undefined; -} - -const isFormattedDirectiveObjectArguments = ( - arg: FormattedDirectiveArguments[keyof FormattedDirectiveArguments] -): arg is FormattedDirectiveObjectArguments => arg !== undefined && !Array.isArray(arg); - -// ```yml -// directives: -// required: -// msg: required -// constraint: -// minLength: min -// format: -// uri: url -// email: email -// ``` -// -// This function convterts to like below -// { -// 'required': { -// 'msg': ['required', '$1'], -// }, -// 'constraint': { -// 'minLength': ['min', '$1'], -// 'format': { -// 'uri': ['url', '$2'], -// 'email': ['email', '$2'], -// } -// } -// } -export const formatDirectiveConfig = (config: DirectiveConfig): FormattedDirectiveConfig => { - return Object.fromEntries( - Object.entries(config).map(([directive, arg]) => { - const formatted = Object.fromEntries( - Object.entries(arg).map(([arg, val]) => { - if (Array.isArray(val)) { - return [arg, val]; - } - if (typeof val === 'string') { - return [arg, [val, '$1']]; - } - return [arg, formatDirectiveObjectArguments(val)]; - }) - ); - return [directive, formatted]; - }) - ); -}; - -// ```yml -// format: -// # For example, `@constraint(format: "uri")`. this case $1 will be "uri". -// # Therefore the generator generates yup schema `.url()` followed by `uri: 'url'` -// # If $1 does not match anywhere, the generator will ignore. -// uri: url -// email: ["email", "$2"] -// ``` -// -// This function convterts to like below -// { -// 'uri': ['url', '$2'], -// 'email': ['email'], -// } -export const formatDirectiveObjectArguments = (args: DirectiveObjectArguments): FormattedDirectiveObjectArguments => { - const formatted = Object.entries(args).map(([arg, val]) => { - if (Array.isArray(val)) { - return [arg, val]; - } - return [arg, [val, '$2']]; - }); - return Object.fromEntries(formatted); -}; - -// This function generates `.required("message").min(100).email()` -// -// config -// { -// 'required': { -// 'msg': ['required', '$1'], -// }, -// 'constraint': { -// 'minLength': ['min', '$1'], -// 'format': { -// 'uri': ['url', '$2'], -// 'email': ['email', '$2'], -// } -// } -// } -// -// GraphQL schema -// ```graphql -// input ExampleInput { -// email: String! @required(msg: "message") @constraint(minLength: 100, format: "email") -// } -// ``` -export const buildApi = (config: FormattedDirectiveConfig, directives: ReadonlyArray): string => - directives - .filter(directive => config[directive.name.value] !== undefined) - .map(directive => { - const directiveName = directive.name.value; - const argsConfig = config[directiveName]; - return buildApiFromDirectiveArguments(argsConfig, directive.arguments ?? []); - }) - .join(''); - -const buildApiSchema = (validationSchema: string[] | undefined, argValue: ConstValueNode): string => { - if (!validationSchema) { - return ''; - } - const schemaApi = validationSchema[0]; - const schemaApiArgs = validationSchema.slice(1).map(templateArg => { - const gqlSchemaArgs = apiArgsFromConstValueNode(argValue); - return applyArgToApiSchemaTemplate(templateArg, gqlSchemaArgs); - }); - return `.${schemaApi}(${schemaApiArgs.join(', ')})`; -}; - -const buildApiFromDirectiveArguments = ( - config: FormattedDirectiveArguments, - args: ReadonlyArray -): string => { - return args - .map(arg => { - const argName = arg.name.value; - const validationSchema = config[argName]; - if (isFormattedDirectiveObjectArguments(validationSchema)) { - return buildApiFromDirectiveObjectArguments(validationSchema, arg.value); - } - return buildApiSchema(validationSchema, arg.value); - }) - .join(''); -}; - -const buildApiFromDirectiveObjectArguments = ( - config: FormattedDirectiveObjectArguments, - argValue: ConstValueNode -): string => { - if (argValue.kind !== Kind.STRING) { - return ''; - } - const validationSchema = config[argValue.value]; - return buildApiSchema(validationSchema, argValue); -}; - -const applyArgToApiSchemaTemplate = (template: string, apiArgs: any[]): string => { - const matches = template.matchAll(/[$](\d+)/g); - for (const match of matches) { - const placeholder = match[0]; // `$1` - const idx = parseInt(match[1], 10) - 1; // start with `1 - 1` - const apiArg = apiArgs[idx]; - if (apiArg === undefined) { - template = template.replace(placeholder, ''); - continue; - } - if (template === placeholder) { - return stringify(apiArg); - } - template = template.replace(placeholder, apiArg); - } - if (template !== '') { - return stringify(template, true); - } - return template; -}; - -const stringify = (arg: any, quoteString?: boolean): string => { - if (Array.isArray(arg)) { - return arg.map(v => stringify(v, true)).join(','); - } - if (typeof arg === 'string') { - if (isConvertableRegexp(arg)) { - return arg; - } - if (quoteString) { - return JSON.stringify(arg); - } - } - if (typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'bigint') { - return `${arg}`; - } - return JSON.stringify(arg); -}; - -const apiArgsFromConstValueNode = (value: ConstValueNode): any[] => { - const val = valueFromASTUntyped(value); - if (Array.isArray(val)) { - return val; - } - return [val]; -}; - -export const exportedForTesting = { - applyArgToApiSchemaTemplate, - buildApiFromDirectiveObjectArguments, - buildApiFromDirectiveArguments, -}; diff --git a/src/graphql.ts b/src/graphql.ts index 58b3b922..43fd649c 100644 --- a/src/graphql.ts +++ b/src/graphql.ts @@ -10,25 +10,26 @@ import { NameNode, NonNullTypeNode, ObjectTypeDefinitionNode, + specifiedScalarTypes, TypeNode, visit, } from 'graphql'; -export const isListType = (typ?: TypeNode): typ is ListTypeNode => typ?.kind === 'ListType'; -export const isNonNullType = (typ?: TypeNode): typ is NonNullTypeNode => typ?.kind === 'NonNullType'; -export const isNamedType = (typ?: TypeNode): typ is NamedTypeNode => typ?.kind === 'NamedType'; +export const isListType = (typ: TypeNode): typ is ListTypeNode => typ.kind === 'ListType'; +export const isNonNullType = (typ: TypeNode): typ is NonNullTypeNode => typ.kind === 'NonNullType'; +export const isNamedType = (typ: TypeNode): typ is NamedTypeNode => typ.kind === 'NamedType'; export const isInput = (kind: string) => kind.includes('Input'); type ObjectTypeDefinitionFn = (node: ObjectTypeDefinitionNode) => any; export const ObjectTypeDefinitionBuilder = ( - useObjectTypes: boolean | undefined, + useObjectTypes: false | 'no-reserved' | 'all' | undefined, callback: ObjectTypeDefinitionFn ): ObjectTypeDefinitionFn | undefined => { if (!useObjectTypes) return undefined; return node => { - if (/^(Query|Mutation|Subscription)$/.test(node.name.value)) { + if (useObjectTypes === 'no-reserved' && /^(Query|Mutation|Subscription)$/.test(node.name.value)) { return; } return callback(node); @@ -175,3 +176,8 @@ export const isGeneratedByIntrospection = (schema: GraphQLSchema): boolean => Object.entries(schema.getTypeMap()) .filter(([name, type]) => !name.startsWith('__') && !isSpecifiedScalarType(type)) .every(([, type]) => type.astNode === undefined); + +export const isSpecifiedScalarName = ( + scalarName: string +): scalarName is (typeof specifiedScalarTypes)[number]['name'] => + specifiedScalarTypes.some(({ name }) => name === scalarName); diff --git a/src/index.ts b/src/index.ts index c4f6ff24..18cfb1d7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,18 +4,15 @@ import { buildSchema, GraphQLSchema, printSchema, visit } from 'graphql'; import { ValidationSchemaPluginConfig } from './config'; import { isGeneratedByIntrospection, topologicalSortAST } from './graphql'; -import { MyZodSchemaVisitor } from './myzod/index'; -import { SchemaVisitor } from './types'; -import { YupSchemaVisitor } from './yup/index'; -import { ZodSchemaVisitor } from './zod/index'; +import { YupSchemaVisitor } from './yup'; export const plugin: PluginFunction = ( schema: GraphQLSchema, _documents: Types.DocumentFile[], config: ValidationSchemaPluginConfig ): Types.ComplexPluginOutput => { - const { schema: _schema, ast } = _transformSchemaAST(schema, config); - const visitor = schemaVisitor(_schema, config); + const { schema: transformedSchema, ast } = _transformSchemaAST(schema, config); + const visitor = new YupSchemaVisitor(transformedSchema, config); const result = visit(ast, visitor); @@ -29,15 +26,6 @@ export const plugin: PluginFunction { - if (config?.schema === 'zod') { - return new ZodSchemaVisitor(schema, config); - } else if (config?.schema === 'myzod') { - return new MyZodSchemaVisitor(schema, config); - } - return new YupSchemaVisitor(schema, config); -}; - const _transformSchemaAST = (schema: GraphQLSchema, config: ValidationSchemaPluginConfig) => { const { schema: _schema, ast } = transformSchemaAST(schema, config); diff --git a/src/myzod/index.ts b/src/myzod/index.ts deleted file mode 100644 index a8e77496..00000000 --- a/src/myzod/index.ts +++ /dev/null @@ -1,313 +0,0 @@ -import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common'; -import { - EnumTypeDefinitionNode, - FieldDefinitionNode, - GraphQLSchema, - InputObjectTypeDefinitionNode, - InputValueDefinitionNode, - NameNode, - ObjectTypeDefinitionNode, - TypeNode, - UnionTypeDefinitionNode, -} from 'graphql'; - -import { ValidationSchemaPluginConfig } from '../config'; -import { buildApi, formatDirectiveConfig } from '../directive'; -import { BaseSchemaVisitor } from '../schema_visitor'; -import { Visitor } from '../visitor'; -import { isInput, isListType, isNamedType, isNonNullType, ObjectTypeDefinitionBuilder } from './../graphql'; - -const anySchema = `definedNonNullAnySchema`; - -export class MyZodSchemaVisitor extends BaseSchemaVisitor { - constructor(schema: GraphQLSchema, config: ValidationSchemaPluginConfig) { - super(schema, config); - } - - importValidationSchema(): string { - return `import * as myzod from 'myzod'`; - } - - initialEmit(): string { - return ( - '\n' + - [ - new DeclarationBlock({}).export().asKind('const').withName(`${anySchema}`).withContent(`myzod.object({})`) - .string, - ...this.enumDeclarations, - ].join('\n') - ); - } - - get InputObjectTypeDefinition() { - return { - leave: (node: InputObjectTypeDefinitionNode) => { - const visitor = this.createVisitor('input'); - const name = visitor.convertName(node.name.value); - this.importTypes.push(name); - return this.buildInputFields(node.fields ?? [], visitor, name); - }, - }; - } - - get ObjectTypeDefinition() { - return { - leave: ObjectTypeDefinitionBuilder(this.config.withObjectType, (node: ObjectTypeDefinitionNode) => { - const visitor = this.createVisitor('output'); - const name = visitor.convertName(node.name.value); - this.importTypes.push(name); - - // Building schema for field arguments. - const argumentBlocks = this.buildObjectTypeDefinitionArguments(node, visitor); - const appendArguments = argumentBlocks ? '\n' + argumentBlocks : ''; - - // Building schema for fields. - const shape = node.fields?.map(field => generateFieldMyZodSchema(this.config, visitor, field, 2)).join(',\n'); - - switch (this.config.validationSchemaExportType) { - case 'const': - return ( - new DeclarationBlock({}) - .export() - .asKind('const') - .withName(`${name}Schema: myzod.Type<${name}>`) - .withContent( - [ - `myzod.object({`, - indent(`__typename: myzod.literal('${node.name.value}').optional(),`, 2), - shape, - '})', - ].join('\n') - ).string + appendArguments - ); - - case 'function': - default: - return ( - new DeclarationBlock({}) - .export() - .asKind('function') - .withName(`${name}Schema(): myzod.Type<${name}>`) - .withBlock( - [ - indent(`return myzod.object({`), - indent(`__typename: myzod.literal('${node.name.value}').optional(),`, 2), - shape, - indent('})'), - ].join('\n') - ).string + appendArguments - ); - } - }), - }; - } - - get EnumTypeDefinition() { - return { - leave: (node: EnumTypeDefinitionNode) => { - const visitor = this.createVisitor('both'); - const enumname = visitor.convertName(node.name.value); - this.importTypes.push(enumname); - // z.enum are basically myzod.literals - // hoist enum declarations - this.enumDeclarations.push( - this.config.enumsAsTypes - ? new DeclarationBlock({}) - .export() - .asKind('type') - .withName(`${enumname}Schema`) - .withContent( - `myzod.literals(${node.values?.map(enumOption => `'${enumOption.name.value}'`).join(', ')})` - ).string - : new DeclarationBlock({}) - .export() - .asKind('const') - .withName(`${enumname}Schema`) - .withContent(`myzod.enum(${enumname})`).string - ); - }, - }; - } - - get UnionTypeDefinition() { - return { - leave: (node: UnionTypeDefinitionNode) => { - if (!node.types || !this.config.withObjectType) return; - - const visitor = this.createVisitor('output'); - - const unionName = visitor.convertName(node.name.value); - const unionElements = node.types - ?.map(t => { - const element = visitor.convertName(t.name.value); - const typ = visitor.getType(t.name.value); - if (typ?.astNode?.kind === 'EnumTypeDefinition') { - return `${element}Schema`; - } - switch (this.config.validationSchemaExportType) { - case 'const': - return `${element}Schema`; - case 'function': - default: - return `${element}Schema()`; - } - }) - .join(', '); - const unionElementsCount = node.types?.length ?? 0; - - const union = unionElementsCount > 1 ? `myzod.union([${unionElements}])` : unionElements; - - switch (this.config.validationSchemaExportType) { - case 'const': - return new DeclarationBlock({}).export().asKind('const').withName(`${unionName}Schema`).withContent(union) - .string; - case 'function': - default: - return new DeclarationBlock({}) - .export() - .asKind('function') - .withName(`${unionName}Schema()`) - .withBlock(indent(`return ${union}`)).string; - } - }, - }; - } - - protected buildInputFields( - fields: readonly (FieldDefinitionNode | InputValueDefinitionNode)[], - visitor: Visitor, - name: string - ) { - const shape = fields.map(field => generateFieldMyZodSchema(this.config, visitor, field, 2)).join(',\n'); - - switch (this.config.validationSchemaExportType) { - case 'const': - return new DeclarationBlock({}) - .export() - .asKind('const') - .withName(`${name}Schema: myzod.Type<${name}>`) - .withContent(['myzod.object({', shape, '})'].join('\n')).string; - - case 'function': - default: - return new DeclarationBlock({}) - .export() - .asKind('function') - .withName(`${name}Schema(): myzod.Type<${name}>`) - .withBlock([indent(`return myzod.object({`), shape, indent('})')].join('\n')).string; - } - } -} - -const generateFieldMyZodSchema = ( - config: ValidationSchemaPluginConfig, - visitor: Visitor, - field: InputValueDefinitionNode | FieldDefinitionNode, - indentCount: number -): string => { - const gen = generateFieldTypeMyZodSchema(config, visitor, field, field.type); - return indent(`${field.name.value}: ${maybeLazy(field.type, gen)}`, indentCount); -}; - -const generateFieldTypeMyZodSchema = ( - config: ValidationSchemaPluginConfig, - visitor: Visitor, - field: InputValueDefinitionNode | FieldDefinitionNode, - type: TypeNode, - parentType?: TypeNode -): string => { - if (isListType(type)) { - const gen = generateFieldTypeMyZodSchema(config, visitor, field, type.type, type); - if (!isNonNullType(parentType)) { - const arrayGen = `myzod.array(${maybeLazy(type.type, gen)})`; - const maybeLazyGen = applyDirectives(config, field, arrayGen); - return `${maybeLazyGen}.optional().nullable()`; - } - return `myzod.array(${maybeLazy(type.type, gen)})`; - } - if (isNonNullType(type)) { - const gen = generateFieldTypeMyZodSchema(config, visitor, field, type.type, type); - return maybeLazy(type.type, gen); - } - if (isNamedType(type)) { - const gen = generateNameNodeMyZodSchema(config, visitor, type.name); - if (isListType(parentType)) { - return `${gen}.nullable()`; - } - const appliedDirectivesGen = applyDirectives(config, field, gen); - if (isNonNullType(parentType)) { - if (visitor.shouldEmitAsNotAllowEmptyString(type.name.value)) { - return `${gen}.min(1)`; - } - return appliedDirectivesGen; - } - if (isListType(parentType)) { - return `${appliedDirectivesGen}.nullable()`; - } - return `${appliedDirectivesGen}.optional().nullable()`; - } - console.warn('unhandled type:', type); - return ''; -}; - -const applyDirectives = ( - config: ValidationSchemaPluginConfig, - field: InputValueDefinitionNode | FieldDefinitionNode, - gen: string -): string => { - if (config.directives && field.directives) { - const formatted = formatDirectiveConfig(config.directives); - return gen + buildApi(formatted, field.directives); - } - return gen; -}; - -const generateNameNodeMyZodSchema = ( - config: ValidationSchemaPluginConfig, - visitor: Visitor, - node: NameNode -): string => { - const converter = visitor.getNameNodeConverter(node); - - switch (converter?.targetKind) { - case 'InputObjectTypeDefinition': - case 'ObjectTypeDefinition': - case 'UnionTypeDefinition': - // using switch-case rather than if-else to allow for future expansion - switch (config.validationSchemaExportType) { - case 'const': - return `${converter.convertName()}Schema`; - case 'function': - default: - return `${converter.convertName()}Schema()`; - } - case 'EnumTypeDefinition': - return `${converter.convertName()}Schema`; - default: - return myzod4Scalar(config, visitor, node.value); - } -}; - -const maybeLazy = (type: TypeNode, schema: string): string => { - if (isNamedType(type) && isInput(type.name.value)) { - return `myzod.lazy(() => ${schema})`; - } - return schema; -}; - -const myzod4Scalar = (config: ValidationSchemaPluginConfig, visitor: Visitor, scalarName: string): string => { - if (config.scalarSchemas?.[scalarName]) { - return config.scalarSchemas[scalarName]; - } - const tsType = visitor.getScalarType(scalarName); - switch (tsType) { - case 'string': - return `myzod.string()`; - case 'number': - return `myzod.number()`; - case 'boolean': - return `myzod.boolean()`; - } - console.warn('unhandled name:', scalarName); - return anySchema; -}; diff --git a/src/schema_visitor.ts b/src/schema_visitor.ts deleted file mode 100644 index 686ca7d9..00000000 --- a/src/schema_visitor.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { FieldDefinitionNode, GraphQLSchema, InputValueDefinitionNode, ObjectTypeDefinitionNode } from 'graphql'; - -import { ValidationSchemaPluginConfig } from './config'; -import { SchemaVisitor } from './types'; -import { Visitor } from './visitor'; - -export abstract class BaseSchemaVisitor implements SchemaVisitor { - protected importTypes: string[] = []; - protected enumDeclarations: string[] = []; - - constructor( - protected schema: GraphQLSchema, - protected config: ValidationSchemaPluginConfig - ) {} - - abstract importValidationSchema(): string; - - buildImports(): string[] { - if (this.config.importFrom && this.importTypes.length > 0) { - return [ - this.importValidationSchema(), - `import ${this.config.useTypeImports ? 'type ' : ''}{ ${this.importTypes.join(', ')} } from '${ - this.config.importFrom - }'`, - ]; - } - return [this.importValidationSchema()]; - } - - abstract initialEmit(): string; - - createVisitor(scalarDirection: 'input' | 'output' | 'both'): Visitor { - return new Visitor(scalarDirection, this.schema, this.config); - } - - protected abstract buildInputFields( - fields: readonly (FieldDefinitionNode | InputValueDefinitionNode)[], - visitor: Visitor, - name: string - ): string; - - protected buildObjectTypeDefinitionArguments(node: ObjectTypeDefinitionNode, visitor: Visitor) { - return visitor.buildArgumentsSchemaBlock(node, (typeName, field) => { - this.importTypes.push(typeName); - return this.buildInputFields(field.arguments ?? [], visitor, typeName); - }); - } -} diff --git a/src/types.ts b/src/types.ts index 4fe8df9f..cbee5d6b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -6,7 +6,7 @@ export type NewVisitor = Partial<{ }; }>; -export interface SchemaVisitor extends NewVisitor { +export interface Interpreter { buildImports: () => string[]; initialEmit: () => string; } diff --git a/src/visitor.ts b/src/visitor.ts index cc06e829..30a9577d 100644 --- a/src/visitor.ts +++ b/src/visitor.ts @@ -1,77 +1,51 @@ import { TsVisitor } from '@graphql-codegen/typescript'; -import { FieldDefinitionNode, GraphQLSchema, NameNode, ObjectTypeDefinitionNode, specifiedScalarTypes } from 'graphql'; +import { NormalizedScalarsMap } from '@graphql-codegen/visitor-plugin-common'; +import { GraphQLSchema, Kind } from 'graphql'; import { ValidationSchemaPluginConfig } from './config'; export class Visitor extends TsVisitor { constructor( - private scalarDirection: 'input' | 'output' | 'both', private schema: GraphQLSchema, - private pluginConfig: ValidationSchemaPluginConfig + pluginConfig: ValidationSchemaPluginConfig ) { super(schema, pluginConfig); } - private isSpecifiedScalarName(scalarName: string) { - return specifiedScalarTypes.some(({ name }) => name === scalarName); - } - - public getType(name: string) { - return this.schema.getType(name); - } - - public getNameNodeConverter(node: NameNode) { - const typ = this.schema.getType(node.value); - const astNode = typ?.astNode; - if (astNode === undefined || astNode === null) { - return undefined; + public getKind(graphQLTypeName: string) { + const foundType = this.schema.getType(graphQLTypeName); + if (!foundType) { + throw new Error(`type ${graphQLTypeName} not found in schema`); } - return { - targetKind: astNode.kind, - convertName: () => this.convertName(astNode.name.value), - }; - } - public getScalarType(scalarName: string): string | null { - if (this.scalarDirection === 'both') { + // String 等の組み込みの scalar の場合、 astNode がない + if (!foundType.astNode) { return null; } - return this.scalars[scalarName][this.scalarDirection]; + + const kind = foundType.astNode.kind; + assertsNotInterface(kind); + + return kind; } - public shouldEmitAsNotAllowEmptyString(name: string): boolean { - if (this.pluginConfig.notAllowEmptyString !== true) { - return false; - } - const typ = this.getType(name); - if (typ?.astNode?.kind !== 'ScalarTypeDefinition' && !this.isSpecifiedScalarName(name)) { - return false; - } - const tsType = this.getScalarType(name); - return tsType === 'string'; + public getTypeScriptScalarType( + graphQLTypeName: string, + scalarDirection: keyof NormalizedScalarsMap[string] + ): string | null { + return this.scalars[graphQLTypeName]?.[scalarDirection] ?? null; } +} - public buildArgumentsSchemaBlock( - node: ObjectTypeDefinitionNode, - callback: (typeName: string, field: FieldDefinitionNode) => string - ) { - const fieldsWithArguments = node.fields?.filter(field => field.arguments && field.arguments.length > 0) ?? []; - if (fieldsWithArguments.length === 0) { - return undefined; - } - return fieldsWithArguments - .map(field => { - const name = - node.name.value + - (this.config.addUnderscoreToArgsType ? '_' : '') + - this.convertName(field, { - useTypesPrefix: false, - useTypesSuffix: false, - }) + - 'Args'; +/** + * String 等の組み込みの scalar の場合は null + */ +export type GetKindResult = ReturnType; - return callback(name, field); - }) - .join('\n'); +function assertsNotInterface( + kind: TKind +): asserts kind is Exclude { + if (kind === Kind.INTERFACE_TYPE_DEFINITION) { + throw new Error(`unexpected kind: ${kind}`); } } diff --git a/src/yup/ImportBuilder.ts b/src/yup/ImportBuilder.ts new file mode 100644 index 00000000..3432883d --- /dev/null +++ b/src/yup/ImportBuilder.ts @@ -0,0 +1,17 @@ +export class ImportBuilder { + constructor( + private readonly importFrom: string | undefined, + private readonly useTypeImports: boolean | undefined + ) {} + + build(types: readonly string[]): string[] { + if (!this.importFrom || types.length === 0) return [IMPORT_STATEMENT_YUP]; + + return [ + IMPORT_STATEMENT_YUP, + `import ${this.useTypeImports ? 'type ' : ''}{ ${types.join(', ')} } from '${this.importFrom}'`, + ]; + } +} + +const IMPORT_STATEMENT_YUP = `import * as yup from 'yup'`; diff --git a/src/yup/InitialEmitter.ts b/src/yup/InitialEmitter.ts new file mode 100644 index 00000000..b3643949 --- /dev/null +++ b/src/yup/InitialEmitter.ts @@ -0,0 +1,25 @@ +import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common'; + +import { WithObjectTypesSpec } from './withObjectTypesSpecs/WithObjectTypesSpec'; + +export class InitialEmitter { + constructor(private readonly withObjectTypesSpec: WithObjectTypesSpec) {} + + emit(enumDeclarations: readonly string[]): string { + if (!this.withObjectTypesSpec.shouldIncludeUnion()) return '\n' + enumDeclarations.join('\n'); + return '\n' + enumDeclarations.join('\n') + '\n' + this.unionFunctionDeclaration(); + } + + private unionFunctionDeclaration(): string { + return new DeclarationBlock({}) + .asKind('function') + .withName('union(schemas: Record>)') + .withBlock( + [ + indent('return (yup.object() as unknown as yup.ObjectSchema).when('), + indent('([value], schema) => schemas[value?.__typename] ?? schema', 2), + indent(').defined()'), // HACK: 型を合わせるために、union は undefined を許容しないこととした。問題が出たら考える。 + ].join('\n') + ).string; + } +} diff --git a/src/yup/Kit.ts b/src/yup/Kit.ts new file mode 100644 index 00000000..e00ade6a --- /dev/null +++ b/src/yup/Kit.ts @@ -0,0 +1,142 @@ +import { NormalizedScalarsMap } from '@graphql-codegen/visitor-plugin-common'; +import { GraphQLSchema } from 'graphql'; + +import { ValidationSchemaPluginConfig } from '../config'; +import { Visitor } from '../visitor'; +import { ConstExportTypeStrategy } from './exportTypeStrategies/ConstExportTypeStrategy'; +import { ExportTypeStrategy } from './exportTypeStrategies/ExportTypeStrategy'; +import { FunctionExportTypeStrategy } from './exportTypeStrategies/FunctionExportTypeStrategy'; +import { ImportBuilder } from './ImportBuilder'; +import { InitialEmitter } from './InitialEmitter'; +import { Registry } from './registry'; +import { FieldFactory } from './renderable/field/FieldFactory'; +import { FieldRenderer } from './renderable/field/FieldRenderer'; +import { RuleASTFactory } from './renderable/ruleAST/RuleASTFactory'; +import { RuleASTRenderer } from './renderable/ruleAST/RuleASTRenderer'; +import { ShapeFactory } from './renderable/shape/ShapeFactory'; +import { ShapeRenderer } from './renderable/shape/ShapeRenderer'; +import { TypeASTFactory } from './renderable/typeAST/TypeASTFactory'; +import { TypeASTRenderer } from './renderable/typeAST/TypeASTRenderer'; +import { EnumTypeDefinitionFactory } from './visitFunctionFactories/EnumTypeDefinitionFactory'; +import { InputObjectTypeDefinitionFactory } from './visitFunctionFactories/InputObjectTypeDefinitionFactory'; +import { ObjectTypeDefinitionFactory } from './visitFunctionFactories/ObjectTypeDefinitionFactory'; +import { UnionTypesDefinitionFactory } from './visitFunctionFactories/UnionTypesDefinitionFactory'; +import { AllWithObjectTypesSpec } from './withObjectTypesSpecs/AllWithObjectTypesSpec'; +import { NoReservedWithObjectTypesSpec } from './withObjectTypesSpecs/NoReservedWithObjectTypesSpec'; +import { NullWithObjectTypesSpec } from './withObjectTypesSpecs/NullWithObjectTypesSpec'; +import { WithObjectTypesSpec } from './withObjectTypesSpecs/WithObjectTypesSpec'; + +export class Kit { + constructor( + private readonly schema: GraphQLSchema, + private readonly config: ValidationSchemaPluginConfig + ) {} + + getVisitor() { + return new Visitor(this.schema, this.config); + } + + getWithObjectTypesSpec(): WithObjectTypesSpec { + const type = this.config.withObjectType ?? false; + switch (type) { + case 'no-reserved': + return new NoReservedWithObjectTypesSpec(); + case 'all': + return new AllWithObjectTypesSpec(); + case false: + return new NullWithObjectTypesSpec(); + default: + return assertNever(type); + } + } + + getExportTypesStrategy(): ExportTypeStrategy { + const type = this.config.validationSchemaExportType ?? 'function'; + switch (type) { + case 'function': + return new FunctionExportTypeStrategy(); + case 'const': + return new ConstExportTypeStrategy(); + default: + return assertNever(type); + } + } + + getShapeRenderer() { + return new ShapeRenderer(this.getFieldRenderer()); + } + + getFieldRenderer() { + return new FieldRenderer(this.getTypeASTRenderer()); + } + + getTypeASTRenderer() { + return new TypeASTRenderer(this.config, this.getRuleASTRenderer(), this.getExportTypesStrategy()); + } + + getRuleASTRenderer() { + return new RuleASTRenderer(); + } + + getShapeFactory(scalarDirection: keyof NormalizedScalarsMap[string]) { + return new ShapeFactory(this.getFieldFactory(scalarDirection)); + } + + getFieldFactory(scalarDirection: keyof NormalizedScalarsMap[string]) { + return new FieldFactory(this.getTypeASTFactory(scalarDirection), this.getRuleASTFactory()); + } + getTypeASTFactory(scalarDirection: keyof NormalizedScalarsMap[string]) { + return new TypeASTFactory(this.config.lazyTypes, scalarDirection, this.getVisitor()); + } + + getRuleASTFactory() { + return new RuleASTFactory(this.config.rules, this.config.ignoreRules, this.config.lazyRules); + } + + getImportBuilder() { + return new ImportBuilder(this.config.importFrom, this.config.useTypeImports); + } + + getInitialEmitter() { + return new InitialEmitter(this.getWithObjectTypesSpec()); + } + + getInputObjectTypeDefinitionFactory(registry: Registry) { + return new InputObjectTypeDefinitionFactory( + registry, + this.getVisitor(), + this.getExportTypesStrategy(), + this.getShapeFactory('input'), + this.getShapeRenderer() + ); + } + + getObjectTypeDefinitionFactory(registry: Registry) { + return new ObjectTypeDefinitionFactory( + registry, + this.getVisitor(), + this.getWithObjectTypesSpec(), + this.getExportTypesStrategy(), + this.getShapeFactory('output'), + this.getShapeRenderer(), + this.config.addUnderscoreToArgsType + ); + } + + getEnumTypeDefinitionFactory(registry: Registry) { + return new EnumTypeDefinitionFactory(this.config.enumsAsTypes, registry, this.getVisitor()); + } + + getUnionTypesDefinitionFactory(registry: Registry) { + return new UnionTypesDefinitionFactory( + registry, + this.getVisitor(), + this.getWithObjectTypesSpec(), + this.getExportTypesStrategy() + ); + } +} + +function assertNever(type: never): never { + throw new Error(`undefined type ${type}`); +} diff --git a/src/yup/exportTypeStrategies/ConstExportTypeStrategy.ts b/src/yup/exportTypeStrategies/ConstExportTypeStrategy.ts new file mode 100644 index 00000000..acbc32bc --- /dev/null +++ b/src/yup/exportTypeStrategies/ConstExportTypeStrategy.ts @@ -0,0 +1,39 @@ +import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common'; +import { Kind } from 'graphql'; + +import { ExportTypeStrategy } from './ExportTypeStrategy'; + +export class ConstExportTypeStrategy implements ExportTypeStrategy { + objectTypeDefinition(name: string, typeName: string, shape: string, appendArguments: string): string { + return ( + new DeclarationBlock({}) + .export() + .asKind('const') + .withName(`${name}Schema: yup.ObjectSchema<${name}>`) + .withContent( + [`yup.object({`, indent(`__typename: yup.string<'${typeName}'>(),`, 2), shape, '}).strict()'].join('\n') + ).string + appendArguments + ); + } + + unionTypeDefinition(unionName: string, unionElements: string): string { + return new DeclarationBlock({}) + .export() + .asKind('const') + .withName(`${unionName}Schema: yup.ObjectSchema<${unionName}>`) + .withContent(`union<${unionName}>(${unionElements})`).string; + } + + inputObjectTypeDefinition(name: string, shape: string): string { + return new DeclarationBlock({}) + .export() + .asKind('const') + .withName(`${name}Schema: yup.ObjectSchema<${name}>`) + .withContent(['yup.object({', shape, '}).strict()'].join('\n')).string; + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + schemaEvaluation(schema: string, _kind: Kind | null): string { + return schema; + } +} diff --git a/src/yup/exportTypeStrategies/ExportTypeStrategy.ts b/src/yup/exportTypeStrategies/ExportTypeStrategy.ts new file mode 100644 index 00000000..699bfe72 --- /dev/null +++ b/src/yup/exportTypeStrategies/ExportTypeStrategy.ts @@ -0,0 +1,8 @@ +import { Kind } from 'graphql'; + +export interface ExportTypeStrategy { + objectTypeDefinition(name: string, typeName: string, shape: string, appendArguments: string): string; + unionTypeDefinition(unionName: string, unionElements: string): string; + inputObjectTypeDefinition(name: string, shape: string): string; + schemaEvaluation(schema: string, kind: Kind | null): string; +} diff --git a/src/yup/exportTypeStrategies/FunctionExportTypeStrategy.ts b/src/yup/exportTypeStrategies/FunctionExportTypeStrategy.ts new file mode 100644 index 00000000..1257f3c3 --- /dev/null +++ b/src/yup/exportTypeStrategies/FunctionExportTypeStrategy.ts @@ -0,0 +1,46 @@ +import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common'; +import { Kind } from 'graphql'; + +import { ExportTypeStrategy } from './ExportTypeStrategy'; + +export class FunctionExportTypeStrategy implements ExportTypeStrategy { + objectTypeDefinition(name: string, typeName: string, shape: string, appendArguments: string): string { + return ( + new DeclarationBlock({}) + .export() + .asKind('function') + .withName(`${name}Schema(): yup.ObjectSchema<${name}>`) + .withBlock( + [ + indent(`return yup.object({`), + indent(`__typename: yup.string<'${typeName}'>(),`, 2), + shape, + indent('}).strict()'), + ].join('\n') + ).string + appendArguments + ); + } + + unionTypeDefinition(unionName: string, unionElements: string): string { + return new DeclarationBlock({}) + .export() + .asKind('function') + .withName(`${unionName}Schema(): yup.ObjectSchema<${unionName}>`) + .withBlock(indent(`return union<${unionName}>(${unionElements})`)).string; + } + + inputObjectTypeDefinition(name: string, shape: string): string { + return new DeclarationBlock({}) + .export() + .asKind('function') + .withName(`${name}Schema(): yup.ObjectSchema<${name}>`) + .withBlock([indent(`return yup.object({`), shape, indent('}).strict()')].join('\n')).string; + } + + schemaEvaluation(schema: string, kind: Kind | null): string { + // enum は関数出力形式でも定数として出力する + if (kind === Kind.ENUM_TYPE_DEFINITION) return schema; + + return `${schema}()`; + } +} diff --git a/src/yup/index.ts b/src/yup/index.ts index 171d47f4..5a021bfa 100644 --- a/src/yup/index.ts +++ b/src/yup/index.ts @@ -1,326 +1,64 @@ -import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common'; -import { - EnumTypeDefinitionNode, - FieldDefinitionNode, - GraphQLSchema, - InputObjectTypeDefinitionNode, - InputValueDefinitionNode, - NameNode, - ObjectTypeDefinitionNode, - TypeNode, - UnionTypeDefinitionNode, -} from 'graphql'; +import { GraphQLSchema } from 'graphql'; import { ValidationSchemaPluginConfig } from '../config'; -import { buildApi, formatDirectiveConfig } from '../directive'; -import { BaseSchemaVisitor } from '../schema_visitor'; -import { Visitor } from '../visitor'; -import { isInput, isListType, isNamedType, isNonNullType, ObjectTypeDefinitionBuilder } from './../graphql'; +import { Interpreter, NewVisitor } from '../types'; +import { ImportBuilder } from './ImportBuilder'; +import { InitialEmitter } from './InitialEmitter'; +import { Kit } from './Kit'; +import { Registry } from './registry'; +import { EnumTypeDefinitionFactory } from './visitFunctionFactories/EnumTypeDefinitionFactory'; +import { InputObjectTypeDefinitionFactory } from './visitFunctionFactories/InputObjectTypeDefinitionFactory'; +import { ObjectTypeDefinitionFactory } from './visitFunctionFactories/ObjectTypeDefinitionFactory'; +import { UnionTypesDefinitionFactory } from './visitFunctionFactories/UnionTypesDefinitionFactory'; + +export class YupSchemaVisitor implements NewVisitor, Interpreter { + private readonly registry: Registry = new Registry(); + private readonly importBuilder: ImportBuilder; + private readonly initialEmitter: InitialEmitter; + private readonly inputObjectTypeDefinitionFactory: InputObjectTypeDefinitionFactory; + private readonly objectTypeDefinitionFactory: ObjectTypeDefinitionFactory; + private readonly enumTypeDefinitionFactory: EnumTypeDefinitionFactory; + private readonly unionTypesDefinitionFactory: UnionTypesDefinitionFactory; -export class YupSchemaVisitor extends BaseSchemaVisitor { constructor(schema: GraphQLSchema, config: ValidationSchemaPluginConfig) { - super(schema, config); + const kit = new Kit(schema, config); + this.importBuilder = kit.getImportBuilder(); + this.initialEmitter = kit.getInitialEmitter(); + this.inputObjectTypeDefinitionFactory = kit.getInputObjectTypeDefinitionFactory(this.registry); + this.objectTypeDefinitionFactory = kit.getObjectTypeDefinitionFactory(this.registry); + this.enumTypeDefinitionFactory = kit.getEnumTypeDefinitionFactory(this.registry); + this.unionTypesDefinitionFactory = kit.getUnionTypesDefinitionFactory(this.registry); } - importValidationSchema(): string { - return `import * as yup from 'yup'`; + buildImports(): string[] { + return this.importBuilder.build(this.registry.getTypes()); } initialEmit(): string { - if (!this.config.withObjectType) return '\n' + this.enumDeclarations.join('\n'); - return ( - '\n' + - this.enumDeclarations.join('\n') + - '\n' + - new DeclarationBlock({}) - .asKind('function') - .withName('union(...schemas: ReadonlyArray>): yup.MixedSchema') - .withBlock( - [ - indent('return yup.mixed().test({'), - indent('test: (value) => schemas.some((schema) => schema.isValidSync(value))', 2), - indent('}).defined()'), - ].join('\n') - ).string - ); + return this.initialEmitter.emit(this.registry.getEnumDeclarations()); } get InputObjectTypeDefinition() { return { - leave: (node: InputObjectTypeDefinitionNode) => { - const visitor = this.createVisitor('input'); - const name = visitor.convertName(node.name.value); - this.importTypes.push(name); - return this.buildInputFields(node.fields ?? [], visitor, name); - }, + leave: this.inputObjectTypeDefinitionFactory.create(), }; } get ObjectTypeDefinition() { return { - leave: ObjectTypeDefinitionBuilder(this.config.withObjectType, (node: ObjectTypeDefinitionNode) => { - const visitor = this.createVisitor('output'); - const name = visitor.convertName(node.name.value); - this.importTypes.push(name); - - // Building schema for field arguments. - const argumentBlocks = this.buildObjectTypeDefinitionArguments(node, visitor); - const appendArguments = argumentBlocks ? '\n' + argumentBlocks : ''; - - // Building schema for fields. - const shape = node.fields - ?.map(field => { - const fieldSchema = generateFieldYupSchema(this.config, visitor, field, 2); - return isNonNullType(field.type) ? fieldSchema : `${fieldSchema}.optional()`; - }) - .join(',\n'); - - switch (this.config.validationSchemaExportType) { - case 'const': - return ( - new DeclarationBlock({}) - .export() - .asKind('const') - .withName(`${name}Schema: yup.ObjectSchema<${name}>`) - .withContent( - [ - `yup.object({`, - indent(`__typename: yup.string<'${node.name.value}'>().optional(),`, 2), - shape, - '})', - ].join('\n') - ).string + appendArguments - ); - - case 'function': - default: - return ( - new DeclarationBlock({}) - .export() - .asKind('function') - .withName(`${name}Schema(): yup.ObjectSchema<${name}>`) - .withBlock( - [ - indent(`return yup.object({`), - indent(`__typename: yup.string<'${node.name.value}'>().optional(),`, 2), - shape, - indent('})'), - ].join('\n') - ).string + appendArguments - ); - } - }), + leave: this.objectTypeDefinitionFactory.create(), }; } get EnumTypeDefinition() { return { - leave: (node: EnumTypeDefinitionNode) => { - const visitor = this.createVisitor('both'); - const enumname = visitor.convertName(node.name.value); - this.importTypes.push(enumname); - - // hoise enum declarations - if (this.config.enumsAsTypes) { - const enums = node.values?.map(enumOption => `'${enumOption.name.value}'`); - - this.enumDeclarations.push( - new DeclarationBlock({}) - .export() - .asKind('const') - .withName(`${enumname}Schema`) - .withContent(`yup.string().oneOf([${enums?.join(', ')}]).defined()`).string - ); - } else { - const values = node.values - ?.map( - enumOption => - `${enumname}.${visitor.convertName(enumOption.name, { - useTypesPrefix: false, - transformUnderscore: true, - })}` - ) - .join(', '); - this.enumDeclarations.push( - new DeclarationBlock({}) - .export() - .asKind('const') - .withName(`${enumname}Schema`) - .withContent(`yup.string<${enumname}>().oneOf([${values}]).defined()`).string - ); - } - }, + leave: this.enumTypeDefinitionFactory.create(), }; } get UnionTypeDefinition() { return { - leave: (node: UnionTypeDefinitionNode) => { - if (!node.types || !this.config.withObjectType) return; - const visitor = this.createVisitor('output'); - - const unionName = visitor.convertName(node.name.value); - this.importTypes.push(unionName); - - const unionElements = node.types - ?.map(t => { - const element = visitor.convertName(t.name.value); - const typ = visitor.getType(t.name.value); - if (typ?.astNode?.kind === 'EnumTypeDefinition') { - return `${element}Schema`; - } - switch (this.config.validationSchemaExportType) { - case 'const': - return `${element}Schema`; - case 'function': - default: - return `${element}Schema()`; - } - }) - .join(', '); - - switch (this.config.validationSchemaExportType) { - case 'const': - return new DeclarationBlock({}) - .export() - .asKind('const') - .withName(`${unionName}Schema: yup.MixedSchema<${unionName}>`) - .withContent(`union<${unionName}>(${unionElements})`).string; - case 'function': - default: - return new DeclarationBlock({}) - .export() - .asKind('function') - .withName(`${unionName}Schema(): yup.MixedSchema<${unionName}>`) - .withBlock(indent(`return union<${unionName}>(${unionElements})`)).string; - } - }, + leave: this.unionTypesDefinitionFactory.create(), }; } - - protected buildInputFields( - fields: readonly (FieldDefinitionNode | InputValueDefinitionNode)[], - visitor: Visitor, - name: string - ) { - const shape = fields - ?.map(field => { - const fieldSchema = generateFieldYupSchema(this.config, visitor, field, 2); - return isNonNullType(field.type) ? fieldSchema : `${fieldSchema}.optional()`; - }) - .join(',\n'); - - switch (this.config.validationSchemaExportType) { - case 'const': - return new DeclarationBlock({}) - .export() - .asKind('const') - .withName(`${name}Schema: yup.ObjectSchema<${name}>`) - .withContent(['yup.object({', shape, '})'].join('\n')).string; - - case 'function': - default: - return new DeclarationBlock({}) - .export() - .asKind('function') - .withName(`${name}Schema(): yup.ObjectSchema<${name}>`) - .withBlock([indent(`return yup.object({`), shape, indent('})')].join('\n')).string; - } - } } - -const generateFieldYupSchema = ( - config: ValidationSchemaPluginConfig, - visitor: Visitor, - field: InputValueDefinitionNode | FieldDefinitionNode, - indentCount: number -): string => { - let gen = generateFieldTypeYupSchema(config, visitor, field.type); - if (config.directives && field.directives) { - const formatted = formatDirectiveConfig(config.directives); - gen += buildApi(formatted, field.directives); - } - return indent(`${field.name.value}: ${maybeLazy(field.type, gen)}`, indentCount); -}; - -const generateFieldTypeYupSchema = ( - config: ValidationSchemaPluginConfig, - visitor: Visitor, - type: TypeNode, - parentType?: TypeNode -): string => { - if (isListType(type)) { - const gen = generateFieldTypeYupSchema(config, visitor, type.type, type); - if (!isNonNullType(parentType)) { - return `yup.array(${maybeLazy(type.type, gen)}).defined().nullable()`; - } - return `yup.array(${maybeLazy(type.type, gen)}).defined()`; - } - if (isNonNullType(type)) { - const gen = generateFieldTypeYupSchema(config, visitor, type.type, type); - return maybeLazy(type.type, gen); - } - if (isNamedType(type)) { - const gen = generateNameNodeYupSchema(config, visitor, type.name); - if (isNonNullType(parentType)) { - if (visitor.shouldEmitAsNotAllowEmptyString(type.name.value)) { - return `${gen}.required()`; - } - return `${gen}.nonNullable()`; - } - const typ = visitor.getType(type.name.value); - if (typ?.astNode?.kind === 'InputObjectTypeDefinition') { - return `${gen}`; - } - return `${gen}.nullable()`; - } - console.warn('unhandled type:', type); - return ''; -}; - -const generateNameNodeYupSchema = (config: ValidationSchemaPluginConfig, visitor: Visitor, node: NameNode): string => { - const converter = visitor.getNameNodeConverter(node); - - switch (converter?.targetKind) { - case 'InputObjectTypeDefinition': - case 'ObjectTypeDefinition': - case 'UnionTypeDefinition': - // using switch-case rather than if-else to allow for future expansion - switch (config.validationSchemaExportType) { - case 'const': - return `${converter.convertName()}Schema`; - case 'function': - default: - return `${converter.convertName()}Schema()`; - } - case 'EnumTypeDefinition': - return `${converter.convertName()}Schema`; - default: - return yup4Scalar(config, visitor, node.value); - } -}; - -const maybeLazy = (type: TypeNode, schema: string): string => { - if (isNamedType(type) && isInput(type.name.value)) { - // https://github.com/jquense/yup/issues/1283#issuecomment-786559444 - return `yup.lazy(() => ${schema})`; - } - return schema; -}; - -const yup4Scalar = (config: ValidationSchemaPluginConfig, visitor: Visitor, scalarName: string): string => { - if (config.scalarSchemas?.[scalarName]) { - return `${config.scalarSchemas[scalarName]}.defined()`; - } - const tsType = visitor.getScalarType(scalarName); - switch (tsType) { - case 'string': - return `yup.string().defined()`; - case 'number': - return `yup.number().defined()`; - case 'boolean': - return `yup.boolean().defined()`; - } - console.warn('unhandled name:', scalarName); - return `yup.mixed()`; -}; diff --git a/src/yup/registry.ts b/src/yup/registry.ts new file mode 100644 index 00000000..fcab78ac --- /dev/null +++ b/src/yup/registry.ts @@ -0,0 +1,22 @@ +export class Registry { + private readonly types: string[] = []; + private readonly enumDeclarations: string[] = []; + + public registerType(type: string): void { + if (this.types.includes(type)) return; + this.types.push(type); + } + + public registerEnumDeclaration(enumDeclaration: string): void { + if (this.enumDeclarations.includes(enumDeclaration)) return; + this.enumDeclarations.push(enumDeclaration); + } + + public getTypes(): readonly string[] { + return this.types; + } + + public getEnumDeclarations(): readonly string[] { + return this.enumDeclarations; + } +} diff --git a/src/yup/renderable/field/Field.ts b/src/yup/renderable/field/Field.ts new file mode 100644 index 00000000..2adec667 --- /dev/null +++ b/src/yup/renderable/field/Field.ts @@ -0,0 +1,25 @@ +import { TypeASTNode } from '../typeAST/TypeASTNode'; +import { FieldMetadata } from './FieldMetadata'; +import { FieldRenderer } from './FieldRenderer'; + +export class Field { + constructor( + private readonly metadata: FieldMetadata, + private readonly type: TypeASTNode + ) {} + + public getData() { + return { + metadata: this.metadata, + type: this.type, + }; + } + + public requiresLazy(): boolean { + return this.metadata.requiresLazy() || this.type.requiresLazy(); + } + + public render(fieldRenderer: FieldRenderer) { + return fieldRenderer.renderField(this); + } +} diff --git a/src/yup/renderable/field/FieldFactory.ts b/src/yup/renderable/field/FieldFactory.ts new file mode 100644 index 00000000..c215236e --- /dev/null +++ b/src/yup/renderable/field/FieldFactory.ts @@ -0,0 +1,41 @@ +import { ConstDirectiveNode, FieldDefinitionNode, InputValueDefinitionNode } from 'graphql'; + +import { isNonNullType } from '../../../graphql'; +import { RuleASTFactory } from '../ruleAST/RuleASTFactory'; +import { TypeASTFactory } from '../typeAST/TypeASTFactory'; +import { Field } from './Field'; +import { FieldMetadata } from './FieldMetadata'; + +export class FieldFactory { + public constructor( + private readonly typeASTFactory: TypeASTFactory, + private readonly ruleASTFactory: RuleASTFactory + ) {} + + public create(graphQLFieldNode: InputValueDefinitionNode | FieldDefinitionNode): Field { + const directives = graphQLFieldNode.directives ?? []; + const rulesDirective = findDirectiveByName(directives, 'rules'); + const rulesForArrayDirective = findDirectiveByName(directives, 'rulesForArray'); + + const metadata = new FieldMetadata({ + name: graphQLFieldNode.name.value, + label: graphQLFieldNode.description + ? graphQLFieldNode.description.block + ? graphQLFieldNode.description.value.split('\n')[0] + : graphQLFieldNode.description.value + : null, + isOptional: !isNonNullType(graphQLFieldNode.type), + rule: this.ruleASTFactory.createFromDirectiveOrNull(rulesDirective ?? null), + ruleForArray: this.ruleASTFactory.createFromDirectiveOrNull(rulesForArrayDirective ?? null), + }); + + return new Field(metadata, this.typeASTFactory.create(graphQLFieldNode.type)); + } +} + +const supportedDirectiveNames = ['rules', 'rulesForArray'] as const; +type SupportedDirectiveName = (typeof supportedDirectiveNames)[number]; + +const findDirectiveByName = (directives: readonly ConstDirectiveNode[], name: SupportedDirectiveName) => { + return directives.find(directive => directive.name.value === name); +}; diff --git a/src/yup/renderable/field/FieldMetadata.ts b/src/yup/renderable/field/FieldMetadata.ts new file mode 100644 index 00000000..e76b443b --- /dev/null +++ b/src/yup/renderable/field/FieldMetadata.ts @@ -0,0 +1,23 @@ +import { RuleASTNode } from '../ruleAST/RuleASTNode'; + +export class FieldMetadata { + constructor( + private readonly data: { + name: string; + label: string | null; + isOptional: boolean; + rule: RuleASTNode; + ruleForArray: RuleASTNode; + } + ) {} + + public getData() { + return { + ...this.data, + }; + } + + public requiresLazy(): boolean { + return this.data.rule.requiresLazy() || this.data.ruleForArray.requiresLazy(); + } +} diff --git a/src/yup/renderable/field/FieldRenderer.ts b/src/yup/renderable/field/FieldRenderer.ts new file mode 100644 index 00000000..64a2dbd4 --- /dev/null +++ b/src/yup/renderable/field/FieldRenderer.ts @@ -0,0 +1,26 @@ +import { indent } from '@graphql-codegen/visitor-plugin-common'; + +import { TypeASTRenderer } from '../typeAST/TypeASTRenderer'; +import { Field } from './Field'; + +export class FieldRenderer { + constructor(private readonly typeASTRenderer: TypeASTRenderer) {} + + public renderField(field: Field) { + const { metadata, type } = field.getData(); + const renderedNode = type.render(this.typeASTRenderer, metadata); + + const { name } = metadata.getData(); + const maybeDefined = metadata.getData().isOptional ? renderedNode : defined(renderedNode); + const maybeLazy = field.requiresLazy() ? lazy(maybeDefined) : maybeDefined; + return indent(`${name}: ${maybeLazy}`, 2); + } +} + +function defined(content: string): string { + return `${content}.defined()`; +} + +function lazy(content: string): string { + return `yup.lazy(() => ${content})`; +} diff --git a/src/yup/renderable/ruleAST/RuleASTCompositeNode.ts b/src/yup/renderable/ruleAST/RuleASTCompositeNode.ts new file mode 100644 index 00000000..6868b5f0 --- /dev/null +++ b/src/yup/renderable/ruleAST/RuleASTCompositeNode.ts @@ -0,0 +1,20 @@ +import { RuleASTNode } from './RuleASTNode'; +import { RuleASTRenderer } from './RuleASTRenderer'; + +export class RuleASTCompositeNode implements RuleASTNode { + public constructor(private readonly children: readonly RuleASTNode[]) {} + + public getData() { + return { + children: this.children, + }; + } + + public render(ruleRenderer: RuleASTRenderer): string { + return ruleRenderer.renderCompositeRule(this); + } + + public requiresLazy(): boolean { + return this.children.some(child => child.requiresLazy()); + } +} diff --git a/src/yup/renderable/ruleAST/RuleASTFactory.ts b/src/yup/renderable/ruleAST/RuleASTFactory.ts new file mode 100644 index 00000000..a9f4c4ba --- /dev/null +++ b/src/yup/renderable/ruleAST/RuleASTFactory.ts @@ -0,0 +1,107 @@ +import { ConstDirectiveNode, ConstListValueNode, ConstValueNode, Kind, StringValueNode } from 'graphql'; + +import { Rules } from '../../../config'; +import { RuleASTCompositeNode } from './RuleASTCompositeNode'; +import { RuleASTSingleNode } from './RuleASTSingleNode'; +import { RuleASTSometimesNode } from './RuleASTSometimesNode'; + +export class RuleASTFactory { + public constructor( + private readonly rules: Rules = {}, + private readonly ignoreRules: readonly string[] = [], + private readonly lazyRules: readonly string[] = [], + private readonly supportedArgumentName: string = 'apply' + ) {} + + public createFromDirectiveOrNull(directive: ConstDirectiveNode | null) { + return directive ? this.createFromDirective(directive) : this.createNullObject(); + } + + public createNullObject() { + return new RuleASTCompositeNode([]); + } + + public createFromDirective(directive: ConstDirectiveNode) { + const ruleStrings = (directive.arguments ?? []) + .filter(arg => arg.name.value === this.supportedArgumentName) + .flatMap(({ value }) => { + assertValueIsList(value, '`apply` argument must be a list of rules. For Example, ["integer", "max:255"].'); + return value.values.map(value => { + assertValueIsString(value, 'rules must be a list of string. For Example, ["integer", "max:255"].'); + return value.value; + }); + }); + + return this.helper(ruleStrings); + } + + private helper(ruleStrings: readonly string[]): RuleASTCompositeNode | RuleASTSometimesNode { + const parsed = ruleStrings.flatMap(ruleString => { + const validationRule = parse(ruleString); + + if (this.ignoreRules.includes(validationRule.name)) { + return []; + } + + return { + ...validationRule, + name: this.mapMethodName(validationRule.name), + }; + }); + const isSometimes = ({ name }: LaravelValidationRule) => name === 'sometimes'; + const isNotSometimes = ({ name }: LaravelValidationRule) => name !== 'sometimes'; + + const sometimesIfExists = parsed.filter(isSometimes); + const others = parsed.filter(isNotSometimes); + + const compositeRule = new RuleASTCompositeNode( + others.map(({ name, rawArgs }) => new RuleASTSingleNode(name, rawArgs, this.requiresLazy(name))) + ); + + return sometimesIfExists.length === 0 + ? compositeRule + : new RuleASTSometimesNode(compositeRule, this.requiresLazy('sometimes')); + } + + private mapMethodName(ruleName: string): string { + const ruleMapping = this.rules[ruleName]; + if (!ruleMapping) { + return ruleName; + } + if (Array.isArray(ruleMapping)) { + return ruleMapping[0]; + } + return ruleMapping; + } + + private requiresLazy(ruleName: string): boolean { + return this.lazyRules.includes(ruleName); + } +} + +export type LaravelValidationRule = { + name: string; + rawArgs: string[]; +}; + +export const parse = (ruleString: string): LaravelValidationRule => { + const [name, rest] = ruleString.split(':'); + const rawArgs = rest ? rest.split(',') : []; + + return { + name, + rawArgs, + }; +}; + +function assertValueIsList(value: ConstValueNode, message: string): asserts value is ConstListValueNode { + if (value.kind !== Kind.LIST) { + throw new Error(message); + } +} + +function assertValueIsString(value: ConstValueNode, message: string): asserts value is StringValueNode { + if (value.kind !== Kind.STRING) { + throw new Error(message); + } +} diff --git a/src/yup/renderable/ruleAST/RuleASTNode.ts b/src/yup/renderable/ruleAST/RuleASTNode.ts new file mode 100644 index 00000000..8d5282bf --- /dev/null +++ b/src/yup/renderable/ruleAST/RuleASTNode.ts @@ -0,0 +1,6 @@ +import { RuleASTRenderer } from './RuleASTRenderer'; + +export interface RuleASTNode { + render(ruleRenderer: RuleASTRenderer): string; + requiresLazy(): boolean; +} diff --git a/src/yup/renderable/ruleAST/RuleASTRenderer.ts b/src/yup/renderable/ruleAST/RuleASTRenderer.ts new file mode 100644 index 00000000..9e420ae9 --- /dev/null +++ b/src/yup/renderable/ruleAST/RuleASTRenderer.ts @@ -0,0 +1,34 @@ +import { RuleASTCompositeNode } from './RuleASTCompositeNode'; +import { RuleASTSingleNode } from './RuleASTSingleNode'; +import { RuleASTSometimesNode } from './RuleASTSometimesNode'; + +export class RuleASTRenderer { + public renderSingleRule(singleRule: RuleASTSingleNode): string { + const { mappedName, rawArgs } = singleRule.getData(); + return `.${mappedName}(${rawArgs.map(codifyArgument).join(',')})`; + } + + public renderCompositeRule(compositeRule: RuleASTCompositeNode): string { + return compositeRule + .getData() + .children.map(child => child.render(this)) + .join(''); + } + + public renderSometimesRule(sometimesRule: RuleASTSometimesNode): string { + const { continuation } = sometimesRule.getData(); + return `.sometimes(schema => schema${continuation.render(this)})`; + } +} + +const isNumber = (rawArg: string): boolean => parseFloat(rawArg).toString() === rawArg; +const isBoolean = (rawArg: string): boolean => rawArg.toLowerCase() === 'true' || rawArg.toLowerCase() === 'false'; +const isRegex = (rawArg: string): boolean => rawArg.startsWith('/'); + +const codifyArgument = (rawArg: string): string => { + if (isNumber(rawArg) || isBoolean(rawArg) || isRegex(rawArg)) { + return rawArg; + } + // here, rawArg seems to be string + return JSON.stringify(rawArg); +}; diff --git a/src/yup/renderable/ruleAST/RuleASTSingleNode.ts b/src/yup/renderable/ruleAST/RuleASTSingleNode.ts new file mode 100644 index 00000000..ba2d0613 --- /dev/null +++ b/src/yup/renderable/ruleAST/RuleASTSingleNode.ts @@ -0,0 +1,25 @@ +import { RuleASTNode } from './RuleASTNode'; +import { RuleASTRenderer } from './RuleASTRenderer'; + +export class RuleASTSingleNode implements RuleASTNode { + public constructor( + private readonly mappedName: string, + private readonly rawArgs: readonly string[], + private readonly _requiresLazy: boolean + ) {} + + public getData() { + return { + mappedName: this.mappedName, + rawArgs: this.rawArgs, + }; + } + + public render(ruleRenderer: RuleASTRenderer): string { + return ruleRenderer.renderSingleRule(this); + } + + public requiresLazy(): boolean { + return this._requiresLazy; + } +} diff --git a/src/yup/renderable/ruleAST/RuleASTSometimesNode.ts b/src/yup/renderable/ruleAST/RuleASTSometimesNode.ts new file mode 100644 index 00000000..5249a9c5 --- /dev/null +++ b/src/yup/renderable/ruleAST/RuleASTSometimesNode.ts @@ -0,0 +1,25 @@ +import { RuleASTCompositeNode } from './RuleASTCompositeNode'; +import { RuleASTNode } from './RuleASTNode'; +import { RuleASTRenderer } from './RuleASTRenderer'; + +// sometimes は特殊で、他の検証ルールを無視する必要があるため、コールバックで他の検証ルールを渡す形にする。 +export class RuleASTSometimesNode implements RuleASTNode { + public constructor( + private readonly continuation: RuleASTCompositeNode, + private readonly _requiresLazy: boolean + ) {} + + public getData() { + return { + continuation: this.continuation, + }; + } + + public render(ruleRenderer: RuleASTRenderer): string { + return ruleRenderer.renderSometimesRule(this); + } + + public requiresLazy(): boolean { + return this._requiresLazy || this.continuation.requiresLazy(); + } +} diff --git a/src/yup/renderable/shape/Shape.ts b/src/yup/renderable/shape/Shape.ts new file mode 100644 index 00000000..e84c23e8 --- /dev/null +++ b/src/yup/renderable/shape/Shape.ts @@ -0,0 +1,16 @@ +import { Field } from '../field/Field'; +import { ShapeRenderer } from './ShapeRenderer'; + +export class Shape { + constructor(private readonly fields: readonly Field[]) {} + + public getData() { + return { + fields: this.fields, + }; + } + + public render(shapeRenderer: ShapeRenderer): string { + return shapeRenderer.render(this); + } +} diff --git a/src/yup/renderable/shape/ShapeFactory.ts b/src/yup/renderable/shape/ShapeFactory.ts new file mode 100644 index 00000000..9f067019 --- /dev/null +++ b/src/yup/renderable/shape/ShapeFactory.ts @@ -0,0 +1,12 @@ +import { FieldDefinitionNode, InputValueDefinitionNode } from 'graphql'; + +import { FieldFactory } from '../field/FieldFactory'; +import { Shape } from './Shape'; + +export class ShapeFactory { + constructor(private readonly fieldFactory: FieldFactory) {} + + public create(graphQLFields: readonly (InputValueDefinitionNode | FieldDefinitionNode)[]) { + return new Shape(graphQLFields.map(field => this.fieldFactory.create(field))); + } +} diff --git a/src/yup/renderable/shape/ShapeRenderer.ts b/src/yup/renderable/shape/ShapeRenderer.ts new file mode 100644 index 00000000..ee0e8e18 --- /dev/null +++ b/src/yup/renderable/shape/ShapeRenderer.ts @@ -0,0 +1,13 @@ +import { FieldRenderer } from '../field/FieldRenderer'; +import { Shape } from './Shape'; + +export class ShapeRenderer { + constructor(private readonly fieldRenderer: FieldRenderer) {} + + public render(shape: Shape): string { + return shape + .getData() + .fields.map(field => field.render(this.fieldRenderer)) + .join(',\n'); + } +} diff --git a/src/yup/renderable/typeAST/TypeASTFactory.ts b/src/yup/renderable/typeAST/TypeASTFactory.ts new file mode 100644 index 00000000..47d1218b --- /dev/null +++ b/src/yup/renderable/typeAST/TypeASTFactory.ts @@ -0,0 +1,65 @@ +import { NormalizedScalarsMap } from '@graphql-codegen/visitor-plugin-common'; +import { Kind, ListTypeNode, NamedTypeNode, TypeNode } from 'graphql'; + +import { isInput, isListType, isNamedType, isNonNullType } from '../../../graphql'; +import { Visitor } from '../../../visitor'; +import { TypeASTListNode } from './TypeASTListNode'; +import { TypeASTNode } from './TypeASTNode'; +import { TypeASTNonScalarNamedTypeNode } from './TypeASTNonScalarNamedTypeNode'; +import { TypeASTNullability } from './TypeASTNullability'; +import { TypeASTScalarNode } from './TypeASTScalarNode'; + +export class TypeASTFactory { + constructor( + private readonly lazyTypes: readonly string[] = [], + private readonly scalarDirection: keyof NormalizedScalarsMap[string], + private readonly visitor: Visitor + ) {} + + public create(graphQLTypeNode: TypeNode): TypeASTNode { + if (isNonNullType(graphQLTypeNode)) { + return new TypeASTNullability(this.createForListOrNamedType(graphQLTypeNode.type), true); + } + return new TypeASTNullability(this.createForListOrNamedType(graphQLTypeNode), false); + } + + private createForListOrNamedType(graphQLTypeNode: ListTypeNode | NamedTypeNode): TypeASTNode { + if (isListType(graphQLTypeNode)) { + // NOTE: 配列の中身は必ず defined (nullが混ざることはあってもundefinedは混ざらない) + return new TypeASTListNode(this.create(graphQLTypeNode.type)); + } + if (isNamedType(graphQLTypeNode)) { + return this.createFromNamedTypeNode(graphQLTypeNode); + } + return assertNever(graphQLTypeNode); + } + + private createFromNamedTypeNode(graphQLTypeNode: NamedTypeNode): TypeASTNonScalarNamedTypeNode | TypeASTScalarNode { + const graphQLTypeName = graphQLTypeNode.name.value; + const kind = this.visitor.getKind(graphQLTypeName); + + if (kind === null || kind === Kind.SCALAR_TYPE_DEFINITION) { + return new TypeASTScalarNode( + graphQLTypeName, + this.visitor.getTypeScriptScalarType(graphQLTypeName, this.scalarDirection) + ); + } + + return new TypeASTNonScalarNamedTypeNode({ + graphQLTypeName, + convertedName: this.visitor.convertName(graphQLTypeName), + kind, + tsTypeName: this.visitor.getTypeScriptScalarType(graphQLTypeName, this.scalarDirection), + requiresLazy: this.requiresLazy(graphQLTypeName), + }); + } + + private requiresLazy(graphQLTypeName: string): boolean { + return isInput(graphQLTypeName) && this.lazyTypes.includes(graphQLTypeName); + } +} + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +function assertNever(_arg: never): never { + throw new Error('unreachable'); +} diff --git a/src/yup/renderable/typeAST/TypeASTListNode.ts b/src/yup/renderable/typeAST/TypeASTListNode.ts new file mode 100644 index 00000000..a88cf1e3 --- /dev/null +++ b/src/yup/renderable/typeAST/TypeASTListNode.ts @@ -0,0 +1,21 @@ +import { FieldMetadata } from '../field/FieldMetadata'; +import { TypeASTNode } from './TypeASTNode'; +import { TypeASTRenderer } from './TypeASTRenderer'; + +export class TypeASTListNode implements TypeASTNode { + constructor(private readonly child: TypeASTNode) {} + + public getData() { + return { + child: this.child, + }; + } + + public render(schemaASTRenderer: TypeASTRenderer, fieldMetadata: FieldMetadata) { + return schemaASTRenderer.renderList(this, fieldMetadata); + } + + public requiresLazy() { + return this.child.requiresLazy(); + } +} diff --git a/src/yup/renderable/typeAST/TypeASTNamedTypeNode.ts b/src/yup/renderable/typeAST/TypeASTNamedTypeNode.ts new file mode 100644 index 00000000..4bc11b22 --- /dev/null +++ b/src/yup/renderable/typeAST/TypeASTNamedTypeNode.ts @@ -0,0 +1,3 @@ +import { TypeASTNode } from './TypeASTNode'; + +export interface TypeASTNamedTypeNode extends TypeASTNode {} diff --git a/src/yup/renderable/typeAST/TypeASTNode.ts b/src/yup/renderable/typeAST/TypeASTNode.ts new file mode 100644 index 00000000..36f9adc2 --- /dev/null +++ b/src/yup/renderable/typeAST/TypeASTNode.ts @@ -0,0 +1,7 @@ +import { FieldMetadata } from '../field/FieldMetadata'; +import { TypeASTRenderer } from './TypeASTRenderer'; + +export interface TypeASTNode { + render(typeASTRenderer: TypeASTRenderer, fieldMetadata: FieldMetadata): string; + requiresLazy(): boolean; +} diff --git a/src/yup/renderable/typeAST/TypeASTNonScalarNamedTypeNode.ts b/src/yup/renderable/typeAST/TypeASTNonScalarNamedTypeNode.ts new file mode 100644 index 00000000..207ea364 --- /dev/null +++ b/src/yup/renderable/typeAST/TypeASTNonScalarNamedTypeNode.ts @@ -0,0 +1,32 @@ +import { Kind } from 'graphql'; + +import { GetKindResult } from '../../../visitor'; +import { FieldMetadata } from '../field/FieldMetadata'; +import { TypeASTNode } from './TypeASTNode'; +import { TypeASTRenderer } from './TypeASTRenderer'; + +export class TypeASTNonScalarNamedTypeNode implements TypeASTNode { + constructor( + private readonly data: Readonly<{ + graphQLTypeName: string; + tsTypeName: string | null; + convertedName: string; + kind: Exclude; + requiresLazy: boolean; + }> + ) {} + + public getData() { + return { + ...this.data, + }; + } + + public render(schemaASTRenderer: TypeASTRenderer, fieldMetadata: FieldMetadata) { + return schemaASTRenderer.renderNonScalarNamedType(this, fieldMetadata); + } + + public requiresLazy() { + return this.data.requiresLazy; + } +} diff --git a/src/yup/renderable/typeAST/TypeASTNullability.ts b/src/yup/renderable/typeAST/TypeASTNullability.ts new file mode 100644 index 00000000..847fd2b0 --- /dev/null +++ b/src/yup/renderable/typeAST/TypeASTNullability.ts @@ -0,0 +1,25 @@ +import { FieldMetadata } from '../field/FieldMetadata'; +import { TypeASTNode } from './TypeASTNode'; +import { TypeASTRenderer } from './TypeASTRenderer'; + +export class TypeASTNullability implements TypeASTNode { + constructor( + private readonly child: Exclude, + private readonly isNonNull: boolean + ) {} + + public getData() { + return { + child: this.child, + isNonNull: this.isNonNull, + }; + } + + public render(schemaASTRenderer: TypeASTRenderer, fieldMetadata: FieldMetadata) { + return schemaASTRenderer.renderNullability(this, fieldMetadata); + } + + public requiresLazy() { + return this.child.requiresLazy(); + } +} diff --git a/src/yup/renderable/typeAST/TypeASTRenderer.ts b/src/yup/renderable/typeAST/TypeASTRenderer.ts new file mode 100644 index 00000000..b33e3f0e --- /dev/null +++ b/src/yup/renderable/typeAST/TypeASTRenderer.ts @@ -0,0 +1,86 @@ +import { Kind } from 'graphql'; + +import { ValidationSchemaPluginConfig } from '../../../config'; +import { ExportTypeStrategy } from '../../exportTypeStrategies/ExportTypeStrategy'; +import { FieldMetadata } from '../field/FieldMetadata'; +import { RuleASTRenderer } from '../ruleAST/RuleASTRenderer'; +import { TypeASTListNode } from './TypeASTListNode'; +import { TypeASTNonScalarNamedTypeNode } from './TypeASTNonScalarNamedTypeNode'; +import { TypeASTNullability } from './TypeASTNullability'; +import { TypeASTScalarNode } from './TypeASTScalarNode'; + +export class TypeASTRenderer { + constructor( + private readonly config: ValidationSchemaPluginConfig, + private readonly ruleASTRenderer: RuleASTRenderer, + private readonly exportTypeStrategy: ExportTypeStrategy + ) {} + + public renderList(list: TypeASTListNode, fieldMetadata: FieldMetadata): string { + const { child } = list.getData(); + const rendered = child.render(this, fieldMetadata); + const renderedRule = fieldMetadata.getData().ruleForArray.render(this.ruleASTRenderer); + + return `yup.array(${rendered}.defined())${this.renderMeta(fieldMetadata)}${renderedRule}`; + } + + public renderNonScalarNamedType(namedType: TypeASTNonScalarNamedTypeNode, fieldMetadata: FieldMetadata): string { + return `${this.doRenderNonScalarNamedType(namedType)}${this.renderMeta(fieldMetadata)}${fieldMetadata + .getData() + .rule.render(this.ruleASTRenderer)}`; + } + + public renderScalar(scalarType: TypeASTScalarNode, fieldMetadata: FieldMetadata): string { + return `${this.doRenderScalar(scalarType)}${this.renderMeta(fieldMetadata)}${fieldMetadata + .getData() + .rule.render(this.ruleASTRenderer)}`; + } + + private doRenderScalar(scalarType: TypeASTScalarNode): string { + const { graphQLTypeName, tsTypeName } = scalarType.getData(); + const scalarSchemas = this.config.scalarSchemas ?? {}; + + if (scalarSchemas[graphQLTypeName]) { + return `${scalarSchemas[graphQLTypeName]}`; + } + switch (tsTypeName) { + case 'string': + return `yup.string()`; + case 'number': + return `yup.number()`; + case 'boolean': + return `yup.boolean()`; + } + console.warn('unhandled name:', graphQLTypeName); + return `yup.mixed()`; + } + + private doRenderNonScalarNamedType(schemaASTNonScalarNamedTypeNode: TypeASTNonScalarNamedTypeNode): string { + const { kind, convertedName } = schemaASTNonScalarNamedTypeNode.getData(); + switch (kind) { + case Kind.INPUT_OBJECT_TYPE_DEFINITION: + case Kind.OBJECT_TYPE_DEFINITION: + case Kind.UNION_TYPE_DEFINITION: + case Kind.ENUM_TYPE_DEFINITION: + return this.exportTypeStrategy.schemaEvaluation(`${convertedName}Schema`, kind); + default: + return assertsNeverKind(kind); + } + } + + private renderMeta(fieldMetadata: FieldMetadata): string { + const label = fieldMetadata.getData().label; + return label ? `.label(${JSON.stringify(label)})` : ''; + } + + public renderNullability(nullability: TypeASTNullability, fieldMetadata: FieldMetadata): string { + const { child, isNonNull } = nullability.getData(); + const rendered = child.render(this, fieldMetadata); + + return isNonNull ? `${rendered}.nonNullable()` : `${rendered}.nullable()`; + } +} + +function assertsNeverKind(kind: never): never { + throw new Error(`unexpected kind: ${kind}`); +} diff --git a/src/yup/renderable/typeAST/TypeASTScalarNode.ts b/src/yup/renderable/typeAST/TypeASTScalarNode.ts new file mode 100644 index 00000000..c503749a --- /dev/null +++ b/src/yup/renderable/typeAST/TypeASTScalarNode.ts @@ -0,0 +1,25 @@ +import { FieldMetadata } from '../field/FieldMetadata'; +import { TypeASTNamedTypeNode } from './TypeASTNamedTypeNode'; +import { TypeASTRenderer } from './TypeASTRenderer'; + +export class TypeASTScalarNode implements TypeASTNamedTypeNode { + constructor( + private readonly graphQLTypeName: string, + private readonly tsTypeName: string | null + ) {} + + public getData() { + return { + graphQLTypeName: this.graphQLTypeName, + tsTypeName: this.tsTypeName, + }; + } + + public render(schemaASTRenderer: TypeASTRenderer, fieldMetadata: FieldMetadata) { + return schemaASTRenderer.renderScalar(this, fieldMetadata); + } + + public requiresLazy() { + return false; + } +} diff --git a/src/yup/visitFunctionFactories/EnumTypeDefinitionFactory.ts b/src/yup/visitFunctionFactories/EnumTypeDefinitionFactory.ts new file mode 100644 index 00000000..c8bd9430 --- /dev/null +++ b/src/yup/visitFunctionFactories/EnumTypeDefinitionFactory.ts @@ -0,0 +1,71 @@ +import { DeclarationBlock } from '@graphql-codegen/visitor-plugin-common'; +import { EnumTypeDefinitionNode } from 'graphql'; + +import { Visitor } from '../../visitor'; +import { Registry } from '../registry'; +import { VisitFunctionFactory } from './types'; + +type RenderResult = { + enumName: string; + enumDeclaration: string; +}; + +export class EnumTypeDefinitionFactory implements VisitFunctionFactory { + constructor( + private readonly enumsAsType: boolean = false, + private readonly registry: Registry, + private readonly visitor: Visitor + ) {} + + create() { + return (node: EnumTypeDefinitionNode) => { + const { enumName, enumDeclaration } = this.render(node); + this.registry.registerType(enumName); + this.registry.registerEnumDeclaration(enumDeclaration); + }; + } + + private render(node: EnumTypeDefinitionNode): RenderResult { + return this.enumsAsType ? this.renderAsType(node) : this.renderAsConst(node); + } + + private renderAsType(node: EnumTypeDefinitionNode): RenderResult { + const enumName = this.visitor.convertName(node.name.value); + const enums = (node.values ?? []).map(enumOption => `'${enumOption.name.value}'`); + + const enumDeclaration = new DeclarationBlock({}) + .export() + .asKind('const') + .withName(`${enumName}Schema`) + .withContent(`yup.string().oneOf([${enums.join(', ')}])`).string; + + return { + enumName, + enumDeclaration, + }; + } + + private renderAsConst(node: EnumTypeDefinitionNode): RenderResult { + const enumName = this.visitor.convertName(node.name.value); + const values = (node.values ?? []) + .map( + enumOption => + `${enumName}.${this.visitor.convertName(enumOption.name, { + useTypesPrefix: false, + transformUnderscore: true, + })}` + ) + .join(', '); + + const enumDeclaration = new DeclarationBlock({}) + .export() + .asKind('const') + .withName(`${enumName}Schema`) + .withContent(`yup.string<${enumName}>().oneOf([${values}])`).string; + + return { + enumName, + enumDeclaration, + }; + } +} diff --git a/src/yup/visitFunctionFactories/InputObjectTypeDefinitionFactory.ts b/src/yup/visitFunctionFactories/InputObjectTypeDefinitionFactory.ts new file mode 100644 index 00000000..41e77730 --- /dev/null +++ b/src/yup/visitFunctionFactories/InputObjectTypeDefinitionFactory.ts @@ -0,0 +1,27 @@ +import { InputObjectTypeDefinitionNode } from 'graphql'; + +import { Visitor } from '../../visitor'; +import { ExportTypeStrategy } from '../exportTypeStrategies/ExportTypeStrategy'; +import { Registry } from '../registry'; +import { ShapeFactory } from '../renderable/shape/ShapeFactory'; +import { ShapeRenderer } from '../renderable/shape/ShapeRenderer'; +import { VisitFunctionFactory } from './types'; + +export class InputObjectTypeDefinitionFactory implements VisitFunctionFactory { + constructor( + private readonly registry: Registry, + private readonly visitor: Visitor, + private readonly exportTypeStrategy: ExportTypeStrategy, + private readonly shapeFactory: ShapeFactory, + private readonly shapeRenderer: ShapeRenderer + ) {} + + create() { + return (node: InputObjectTypeDefinitionNode) => { + const name = this.visitor.convertName(node.name.value); + this.registry.registerType(name); + const shape = this.shapeFactory.create(node.fields ?? []); + return this.exportTypeStrategy.inputObjectTypeDefinition(name, shape.render(this.shapeRenderer)); + }; + } +} diff --git a/src/yup/visitFunctionFactories/ObjectTypeDefinitionFactory.ts b/src/yup/visitFunctionFactories/ObjectTypeDefinitionFactory.ts new file mode 100644 index 00000000..70ed705e --- /dev/null +++ b/src/yup/visitFunctionFactories/ObjectTypeDefinitionFactory.ts @@ -0,0 +1,71 @@ +import { FieldDefinitionNode, ObjectTypeDefinitionNode } from 'graphql'; + +import { Visitor } from '../../visitor'; +import { ExportTypeStrategy } from '../exportTypeStrategies/ExportTypeStrategy'; +import { Registry } from '../registry'; +import { ShapeFactory } from '../renderable/shape/ShapeFactory'; +import { ShapeRenderer } from '../renderable/shape/ShapeRenderer'; +import { WithObjectTypesSpec } from '../withObjectTypesSpecs/WithObjectTypesSpec'; +import { VisitFunctionFactory } from './types'; + +export class ObjectTypeDefinitionFactory implements VisitFunctionFactory { + constructor( + private readonly registry: Registry, + private readonly visitor: Visitor, + private readonly withObjectTypesSpec: WithObjectTypesSpec, + private readonly exportTypeStrategy: ExportTypeStrategy, + private readonly shapeFactory: ShapeFactory, + private readonly shapeRenderer: ShapeRenderer, + private readonly addUnderscoreToArgsType: boolean = false + ) {} + + create() { + return (node: ObjectTypeDefinitionNode) => { + if (!this.withObjectTypesSpec.shouldUseObjectTypeDefinitionNode(node)) return; + + const name = this.visitor.convertName(node.name.value); + this.registry.registerType(name); + + // Building schema for field arguments. + const argumentBlocks = this.buildArgumentsSchemaBlock(node, (typeName, field) => { + this.registry.registerType(typeName); + const shape = this.shapeFactory.create(field.arguments ?? []); + return this.exportTypeStrategy.inputObjectTypeDefinition(typeName, shape.render(this.shapeRenderer)); + }); + const appendArguments = argumentBlocks ? '\n' + argumentBlocks : ''; + + // Building schema for fields. + const shape = this.shapeFactory.create(node.fields ?? []); + return this.exportTypeStrategy.objectTypeDefinition( + name, + node.name.value, + shape.render(this.shapeRenderer), + appendArguments + ); + }; + } + + private buildArgumentsSchemaBlock( + node: ObjectTypeDefinitionNode, + callback: (typeName: string, field: FieldDefinitionNode) => string + ) { + const fieldsWithArguments = node.fields?.filter(field => field.arguments && field.arguments.length > 0) ?? []; + if (fieldsWithArguments.length === 0) { + return undefined; + } + return fieldsWithArguments + .map(field => { + const name = + node.name.value + + (this.addUnderscoreToArgsType ? '_' : '') + + this.visitor.convertName(field, { + useTypesPrefix: false, + useTypesSuffix: false, + }) + + 'Args'; + + return callback(name, field); + }) + .join('\n'); + } +} diff --git a/src/yup/visitFunctionFactories/UnionTypesDefinitionFactory.ts b/src/yup/visitFunctionFactories/UnionTypesDefinitionFactory.ts new file mode 100644 index 00000000..42625490 --- /dev/null +++ b/src/yup/visitFunctionFactories/UnionTypesDefinitionFactory.ts @@ -0,0 +1,38 @@ +import { UnionTypeDefinitionNode } from 'graphql'; + +import { Visitor } from '../../visitor'; +import { ExportTypeStrategy } from '../exportTypeStrategies/ExportTypeStrategy'; +import { Registry } from '../registry'; +import { WithObjectTypesSpec } from '../withObjectTypesSpecs/WithObjectTypesSpec'; +import { VisitFunctionFactory } from './types'; + +export class UnionTypesDefinitionFactory implements VisitFunctionFactory { + constructor( + private readonly registry: Registry, + private readonly visitor: Visitor, + private readonly withObjectTypesSpec: WithObjectTypesSpec, + private readonly exportTypeStrategy: ExportTypeStrategy + ) {} + + create() { + if (!this.withObjectTypesSpec.shouldIncludeUnion()) return; + + return (node: UnionTypeDefinitionNode) => { + if (!node.types) return; + + const unionName = this.visitor.convertName(node.name.value); + this.registry.registerType(unionName); + + const unionElements = node.types + ?.map(t => { + const element = this.visitor.convertName(t.name.value); + const kind = this.visitor.getKind(t.name.value); + + return `${element}: ${this.exportTypeStrategy.schemaEvaluation(`${element}Schema`, kind)},`; + }) + .join('\n'); + + return this.exportTypeStrategy.unionTypeDefinition(unionName, ['{', unionElements, '}'].join('\n')); + }; + } +} diff --git a/src/yup/visitFunctionFactories/types.ts b/src/yup/visitFunctionFactories/types.ts new file mode 100644 index 00000000..5529deec --- /dev/null +++ b/src/yup/visitFunctionFactories/types.ts @@ -0,0 +1,5 @@ +import { ASTNode, ASTVisitFn } from 'graphql'; + +export interface VisitFunctionFactory { + create(): ASTVisitFn | undefined; +} diff --git a/src/yup/withObjectTypesSpecs/AllWithObjectTypesSpec.ts b/src/yup/withObjectTypesSpecs/AllWithObjectTypesSpec.ts new file mode 100644 index 00000000..f37fce40 --- /dev/null +++ b/src/yup/withObjectTypesSpecs/AllWithObjectTypesSpec.ts @@ -0,0 +1,14 @@ +import { ObjectTypeDefinitionNode } from 'graphql'; + +import { WithObjectTypesSpec } from './WithObjectTypesSpec'; + +export class AllWithObjectTypesSpec implements WithObjectTypesSpec { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + shouldUseObjectTypeDefinitionNode(node: ObjectTypeDefinitionNode): boolean { + return true; + } + + shouldIncludeUnion() { + return true; + } +} diff --git a/src/yup/withObjectTypesSpecs/NoReservedWithObjectTypesSpec.ts b/src/yup/withObjectTypesSpecs/NoReservedWithObjectTypesSpec.ts new file mode 100644 index 00000000..2d9701c5 --- /dev/null +++ b/src/yup/withObjectTypesSpecs/NoReservedWithObjectTypesSpec.ts @@ -0,0 +1,13 @@ +import { ObjectTypeDefinitionNode } from 'graphql'; + +import { WithObjectTypesSpec } from './WithObjectTypesSpec'; + +export class NoReservedWithObjectTypesSpec implements WithObjectTypesSpec { + shouldUseObjectTypeDefinitionNode(node: ObjectTypeDefinitionNode): boolean { + return !/^(Query|Mutation|Subscription)$/.test(node.name.value); + } + + shouldIncludeUnion() { + return true; + } +} diff --git a/src/yup/withObjectTypesSpecs/NullWithObjectTypesSpec.ts b/src/yup/withObjectTypesSpecs/NullWithObjectTypesSpec.ts new file mode 100644 index 00000000..379d217e --- /dev/null +++ b/src/yup/withObjectTypesSpecs/NullWithObjectTypesSpec.ts @@ -0,0 +1,14 @@ +import { ObjectTypeDefinitionNode } from 'graphql'; + +import { WithObjectTypesSpec } from './WithObjectTypesSpec'; + +export class NullWithObjectTypesSpec implements WithObjectTypesSpec { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + shouldUseObjectTypeDefinitionNode(node: ObjectTypeDefinitionNode): boolean { + return false; + } + + shouldIncludeUnion() { + return false; + } +} diff --git a/src/yup/withObjectTypesSpecs/WithObjectTypesSpec.ts b/src/yup/withObjectTypesSpecs/WithObjectTypesSpec.ts new file mode 100644 index 00000000..5e7b5e83 --- /dev/null +++ b/src/yup/withObjectTypesSpecs/WithObjectTypesSpec.ts @@ -0,0 +1,6 @@ +import { ObjectTypeDefinitionNode } from 'graphql'; + +export interface WithObjectTypesSpec { + shouldUseObjectTypeDefinitionNode(node: ObjectTypeDefinitionNode): boolean; + shouldIncludeUnion(): boolean; +} diff --git a/src/zod/index.ts b/src/zod/index.ts deleted file mode 100644 index ef83ad1d..00000000 --- a/src/zod/index.ts +++ /dev/null @@ -1,322 +0,0 @@ -import { DeclarationBlock, indent } from '@graphql-codegen/visitor-plugin-common'; -import { - EnumTypeDefinitionNode, - FieldDefinitionNode, - GraphQLSchema, - InputObjectTypeDefinitionNode, - InputValueDefinitionNode, - NameNode, - ObjectTypeDefinitionNode, - TypeNode, - UnionTypeDefinitionNode, -} from 'graphql'; - -import { ValidationSchemaPluginConfig } from '../config'; -import { buildApi, formatDirectiveConfig } from '../directive'; -import { BaseSchemaVisitor } from '../schema_visitor'; -import { Visitor } from '../visitor'; -import { isInput, isListType, isNamedType, isNonNullType, ObjectTypeDefinitionBuilder } from './../graphql'; - -const anySchema = `definedNonNullAnySchema`; - -export class ZodSchemaVisitor extends BaseSchemaVisitor { - constructor(schema: GraphQLSchema, config: ValidationSchemaPluginConfig) { - super(schema, config); - } - - importValidationSchema(): string { - return `import { z } from 'zod'`; - } - - initialEmit(): string { - return ( - '\n' + - [ - new DeclarationBlock({}) - .asKind('type') - .withName('Properties') - .withContent(['Required<{', ' [K in keyof T]: z.ZodType;', '}>'].join('\n')).string, - // Unfortunately, zod doesn’t provide non-null defined any schema. - // This is a temporary hack until it is fixed. - // see: https://github.com/colinhacks/zod/issues/884 - new DeclarationBlock({}).asKind('type').withName('definedNonNullAny').withContent('{}').string, - new DeclarationBlock({}) - .export() - .asKind('const') - .withName(`isDefinedNonNullAny`) - .withContent(`(v: any): v is definedNonNullAny => v !== undefined && v !== null`).string, - new DeclarationBlock({}) - .export() - .asKind('const') - .withName(`${anySchema}`) - .withContent(`z.any().refine((v) => isDefinedNonNullAny(v))`).string, - ...this.enumDeclarations, - ].join('\n') - ); - } - - get InputObjectTypeDefinition() { - return { - leave: (node: InputObjectTypeDefinitionNode) => { - const visitor = this.createVisitor('input'); - const name = visitor.convertName(node.name.value); - this.importTypes.push(name); - return this.buildInputFields(node.fields ?? [], visitor, name); - }, - }; - } - - get ObjectTypeDefinition() { - return { - leave: ObjectTypeDefinitionBuilder(this.config.withObjectType, (node: ObjectTypeDefinitionNode) => { - const visitor = this.createVisitor('output'); - const name = visitor.convertName(node.name.value); - this.importTypes.push(name); - - // Building schema for field arguments. - const argumentBlocks = this.buildObjectTypeDefinitionArguments(node, visitor); - const appendArguments = argumentBlocks ? '\n' + argumentBlocks : ''; - - // Building schema for fields. - const shape = node.fields?.map(field => generateFieldZodSchema(this.config, visitor, field, 2)).join(',\n'); - - switch (this.config.validationSchemaExportType) { - case 'const': - return ( - new DeclarationBlock({}) - .export() - .asKind('const') - .withName(`${name}Schema: z.ZodObject>`) - .withContent( - [ - `z.object({`, - indent(`__typename: z.literal('${node.name.value}').optional(),`, 2), - shape, - '})', - ].join('\n') - ).string + appendArguments - ); - - case 'function': - default: - return ( - new DeclarationBlock({}) - .export() - .asKind('function') - .withName(`${name}Schema(): z.ZodObject>`) - .withBlock( - [ - indent(`return z.object({`), - indent(`__typename: z.literal('${node.name.value}').optional(),`, 2), - shape, - indent('})'), - ].join('\n') - ).string + appendArguments - ); - } - }), - }; - } - - get EnumTypeDefinition() { - return { - leave: (node: EnumTypeDefinitionNode) => { - const visitor = this.createVisitor('both'); - const enumname = visitor.convertName(node.name.value); - this.importTypes.push(enumname); - - // hoist enum declarations - this.enumDeclarations.push( - this.config.enumsAsTypes - ? new DeclarationBlock({}) - .export() - .asKind('const') - .withName(`${enumname}Schema`) - .withContent(`z.enum([${node.values?.map(enumOption => `'${enumOption.name.value}'`).join(', ')}])`) - .string - : new DeclarationBlock({}) - .export() - .asKind('const') - .withName(`${enumname}Schema`) - .withContent(`z.nativeEnum(${enumname})`).string - ); - }, - }; - } - - get UnionTypeDefinition() { - return { - leave: (node: UnionTypeDefinitionNode) => { - if (!node.types || !this.config.withObjectType) return; - const visitor = this.createVisitor('output'); - const unionName = visitor.convertName(node.name.value); - const unionElements = node.types - .map(t => { - const element = visitor.convertName(t.name.value); - const typ = visitor.getType(t.name.value); - if (typ?.astNode?.kind === 'EnumTypeDefinition') { - return `${element}Schema`; - } - switch (this.config.validationSchemaExportType) { - case 'const': - return `${element}Schema`; - case 'function': - default: - return `${element}Schema()`; - } - }) - .join(', '); - const unionElementsCount = node.types.length ?? 0; - - const union = unionElementsCount > 1 ? `z.union([${unionElements}])` : unionElements; - - switch (this.config.validationSchemaExportType) { - case 'const': - return new DeclarationBlock({}).export().asKind('const').withName(`${unionName}Schema`).withContent(union) - .string; - case 'function': - default: - return new DeclarationBlock({}) - .export() - .asKind('function') - .withName(`${unionName}Schema()`) - .withBlock(indent(`return ${union}`)).string; - } - }, - }; - } - - protected buildInputFields( - fields: readonly (FieldDefinitionNode | InputValueDefinitionNode)[], - visitor: Visitor, - name: string - ) { - const shape = fields.map(field => generateFieldZodSchema(this.config, visitor, field, 2)).join(',\n'); - - switch (this.config.validationSchemaExportType) { - case 'const': - return new DeclarationBlock({}) - .export() - .asKind('const') - .withName(`${name}Schema: z.ZodObject>`) - .withContent(['z.object({', shape, '})'].join('\n')).string; - - case 'function': - default: - return new DeclarationBlock({}) - .export() - .asKind('function') - .withName(`${name}Schema(): z.ZodObject>`) - .withBlock([indent(`return z.object({`), shape, indent('})')].join('\n')).string; - } - } -} - -const generateFieldZodSchema = ( - config: ValidationSchemaPluginConfig, - visitor: Visitor, - field: InputValueDefinitionNode | FieldDefinitionNode, - indentCount: number -): string => { - const gen = generateFieldTypeZodSchema(config, visitor, field, field.type); - return indent(`${field.name.value}: ${maybeLazy(field.type, gen)}`, indentCount); -}; - -const generateFieldTypeZodSchema = ( - config: ValidationSchemaPluginConfig, - visitor: Visitor, - field: InputValueDefinitionNode | FieldDefinitionNode, - type: TypeNode, - parentType?: TypeNode -): string => { - if (isListType(type)) { - const gen = generateFieldTypeZodSchema(config, visitor, field, type.type, type); - if (!isNonNullType(parentType)) { - const arrayGen = `z.array(${maybeLazy(type.type, gen)})`; - const maybeLazyGen = applyDirectives(config, field, arrayGen); - return `${maybeLazyGen}.nullish()`; - } - return `z.array(${maybeLazy(type.type, gen)})`; - } - if (isNonNullType(type)) { - const gen = generateFieldTypeZodSchema(config, visitor, field, type.type, type); - return maybeLazy(type.type, gen); - } - if (isNamedType(type)) { - const gen = generateNameNodeZodSchema(config, visitor, type.name); - if (isListType(parentType)) { - return `${gen}.nullable()`; - } - const appliedDirectivesGen = applyDirectives(config, field, gen); - if (isNonNullType(parentType)) { - if (visitor.shouldEmitAsNotAllowEmptyString(type.name.value)) { - return `${appliedDirectivesGen}.min(1)`; - } - return appliedDirectivesGen; - } - if (isListType(parentType)) { - return `${appliedDirectivesGen}.nullable()`; - } - return `${appliedDirectivesGen}.nullish()`; - } - console.warn('unhandled type:', type); - return ''; -}; - -const applyDirectives = ( - config: ValidationSchemaPluginConfig, - field: InputValueDefinitionNode | FieldDefinitionNode, - gen: string -): string => { - if (config.directives && field.directives) { - const formatted = formatDirectiveConfig(config.directives); - return gen + buildApi(formatted, field.directives); - } - return gen; -}; - -const generateNameNodeZodSchema = (config: ValidationSchemaPluginConfig, visitor: Visitor, node: NameNode): string => { - const converter = visitor.getNameNodeConverter(node); - - switch (converter?.targetKind) { - case 'InputObjectTypeDefinition': - case 'ObjectTypeDefinition': - case 'UnionTypeDefinition': - // using switch-case rather than if-else to allow for future expansion - switch (config.validationSchemaExportType) { - case 'const': - return `${converter.convertName()}Schema`; - case 'function': - default: - return `${converter.convertName()}Schema()`; - } - case 'EnumTypeDefinition': - return `${converter.convertName()}Schema`; - default: - return zod4Scalar(config, visitor, node.value); - } -}; - -const maybeLazy = (type: TypeNode, schema: string): string => { - if (isNamedType(type) && isInput(type.name.value)) { - return `z.lazy(() => ${schema})`; - } - return schema; -}; - -const zod4Scalar = (config: ValidationSchemaPluginConfig, visitor: Visitor, scalarName: string): string => { - if (config.scalarSchemas?.[scalarName]) { - return config.scalarSchemas[scalarName]; - } - const tsType = visitor.getScalarType(scalarName); - switch (tsType) { - case 'string': - return `z.string()`; - case 'number': - return `z.number()`; - case 'boolean': - return `z.boolean()`; - } - console.warn('unhandled scalar name:', scalarName); - return anySchema; -}; diff --git a/tests/directive.spec.ts b/tests/directive.spec.ts deleted file mode 100644 index 7ccea4fa..00000000 --- a/tests/directive.spec.ts +++ /dev/null @@ -1,531 +0,0 @@ -import { ConstArgumentNode, ConstDirectiveNode, ConstValueNode, Kind, NameNode, parseConstValue } from 'graphql'; - -import { DirectiveConfig, DirectiveObjectArguments } from '../src/config'; -import { - buildApi, - exportedForTesting, - formatDirectiveConfig, - formatDirectiveObjectArguments, - FormattedDirectiveArguments, - FormattedDirectiveConfig, - FormattedDirectiveObjectArguments, -} from '../src/directive'; - -const { applyArgToApiSchemaTemplate, buildApiFromDirectiveObjectArguments, buildApiFromDirectiveArguments } = - exportedForTesting; - -const buildNameNode = (name: string): NameNode => ({ - kind: Kind.NAME, - value: name, -}); - -const buildConstArgumentNodes = (args: Record): ConstArgumentNode[] => - Object.entries(args).map( - ([argName, argValue]): ConstArgumentNode => ({ - kind: Kind.ARGUMENT, - name: buildNameNode(argName), - value: parseConstValue(argValue), - }) - ); - -const buildConstDirectiveNodes = (name: string, args: Record): ConstDirectiveNode => ({ - kind: Kind.DIRECTIVE, - name: buildNameNode(name), - arguments: buildConstArgumentNodes(args), -}); - -describe('format directive config', () => { - describe('formatDirectiveObjectArguments', () => { - const cases: { - name: string; - arg: DirectiveObjectArguments; - want: FormattedDirectiveObjectArguments; - }[] = [ - { - name: 'normal', - arg: { - uri: 'url', - email: 'email', - }, - want: { - uri: ['url', '$2'], - email: ['email', '$2'], - }, - }, - { - name: 'contains array', - arg: { - startWith: ['matches', '/^$2/'], - email: 'email', - }, - want: { - startWith: ['matches', '/^$2/'], - email: ['email', '$2'], - }, - }, - ]; - for (const tc of cases) { - test(tc.name, () => { - const got = formatDirectiveObjectArguments(tc.arg); - expect(got).toStrictEqual(tc.want); - }); - } - }); - - describe('formatDirectiveConfig', () => { - const cases: { - name: string; - arg: DirectiveConfig; - want: FormattedDirectiveConfig; - }[] = [ - { - name: 'normal', - arg: { - required: { - msg: 'required', - }, - constraint: { - minLength: 'min', - format: { - uri: 'url', - email: 'email', - }, - }, - }, - want: { - required: { - msg: ['required', '$1'], - }, - constraint: { - minLength: ['min', '$1'], - format: { - uri: ['url', '$2'], - email: ['email', '$2'], - }, - }, - }, - }, - { - name: 'complex', - arg: { - required: { - msg: 'required', - }, - constraint: { - startWith: ['matches', '/^$1/g'], - format: { - uri: ['url', '$2'], - email: 'email', - }, - }, - }, - want: { - required: { - msg: ['required', '$1'], - }, - constraint: { - startWith: ['matches', '/^$1/g'], - format: { - uri: ['url', '$2'], - email: ['email', '$2'], - }, - }, - }, - }, - ]; - for (const tc of cases) { - test(tc.name, () => { - const got = formatDirectiveConfig(tc.arg); - expect(got).toStrictEqual(tc.want); - }); - } - }); - - describe('applyArgToApiSchemaTemplate', () => { - const cases: { - name: string; - args: { - template: string; - apiArgs: any[]; - }; - want: string; - }[] = [ - { - name: 'string', - args: { - template: '$1', - apiArgs: ['hello'], - }, - want: `"hello"`, - }, - { - name: 'regexp string', - args: { - template: '$1', - apiArgs: ['/hello/g'], - }, - want: `/hello/g`, - }, - { - name: 'number', - args: { - template: '$1', - apiArgs: [10], - }, - want: '10', - }, - { - name: 'boolean', - args: { - template: '$1', - apiArgs: [true], - }, - want: 'true', - }, - { - name: 'array', - args: { - template: '$1', - apiArgs: [['hello', 'world']], - }, - want: `"hello","world"`, - }, - { - name: 'object', - args: { - template: '$1', - apiArgs: [{ hello: 'world' }], - }, - want: `{"hello":"world"}`, - }, - { - name: 'multiple', - args: { - template: '^$1|$2', - apiArgs: ['hello', 'world'], - }, - want: `"^hello|world"`, - }, - { - name: 'use only $2', - args: { - template: '$2$', - apiArgs: ['hello', 'world'], - }, - want: `"world$"`, - }, - { - name: 'does not match all', - args: { - template: '^$1', - apiArgs: [], - }, - want: `"^"`, - }, - { - name: 'if does not exists index', - args: { - template: '$1 $2 $3', - apiArgs: ['hello', 'world'], - }, - want: `"hello world "`, - }, - ]; - for (const tc of cases) { - test(tc.name, () => { - const { template, apiArgs } = tc.args; - const got = applyArgToApiSchemaTemplate(template, apiArgs); - expect(got).toBe(tc.want); - }); - } - }); - - describe('buildApiFromDirectiveObjectArguments', () => { - const cases: { - name: string; - args: { - config: FormattedDirectiveObjectArguments; - argValue: ConstValueNode; - }; - want: string; - }[] = [ - { - name: 'contains in config', - args: { - config: { - uri: ['url', '$2'], - }, - argValue: parseConstValue(`"uri"`), - }, - want: `.url()`, - }, - { - name: 'does not contains in config', - args: { - config: { - email: ['email', '$2'], - }, - argValue: parseConstValue(`"uri"`), - }, - want: ``, - }, - { - name: 'const value does not string type', - args: { - config: { - email: ['email', '$2'], - }, - argValue: parseConstValue(`123`), - }, - want: ``, - }, - ]; - for (const tc of cases) { - test(tc.name, () => { - const { config, argValue } = tc.args; - const got = buildApiFromDirectiveObjectArguments(config, argValue); - expect(got).toBe(tc.want); - }); - } - }); - - describe('buildApiFromDirectiveArguments', () => { - const cases: { - name: string; - args: { - config: FormattedDirectiveArguments; - args: ReadonlyArray; - }; - want: string; - }[] = [ - { - name: 'string', - args: { - config: { - msg: ['required', '$1'], - }, - args: buildConstArgumentNodes({ - msg: `"hello"`, - }), - }, - want: `.required("hello")`, - }, - { - name: 'string with additional stuff', - args: { - config: { - startWith: ['matched', '^$1'], - }, - args: buildConstArgumentNodes({ - startWith: `"hello"`, - }), - }, - want: `.matched("^hello")`, - }, - { - name: 'number', - args: { - config: { - minLength: ['min', '$1'], - }, - args: buildConstArgumentNodes({ - minLength: `1`, - }), - }, - want: `.min(1)`, - }, - { - name: 'boolean', - args: { - config: { - // @strict(enabled: true) - enabled: ['strict', '$1'], - }, - args: buildConstArgumentNodes({ - enabled: `true`, - }), - }, - want: `.strict(true)`, - }, - { - name: 'list', - args: { - config: { - minLength: ['min', '$1', '$2'], - }, - args: buildConstArgumentNodes({ - minLength: `[1, "message"]`, - }), - }, - want: `.min(1, "message")`, - }, - { - name: 'object in list', - args: { - config: { - matches: ['matches', '$1', '$2'], - }, - args: buildConstArgumentNodes({ - matches: `["hello", {message:"message", excludeEmptyString:true}]`, - }), - }, - want: `.matches("hello", {"message":"message","excludeEmptyString":true})`, - }, - { - name: 'two arguments but matched to first argument', - args: { - config: { - msg: ['required', '$1'], - }, - args: buildConstArgumentNodes({ - msg: `"hello"`, - msg2: `"world"`, - }), - }, - want: `.required("hello")`, - }, - { - name: 'two arguments but matched to second argument', - args: { - config: { - msg2: ['required', '$1'], - }, - args: buildConstArgumentNodes({ - msg: `"hello"`, - msg2: `"world"`, - }), - }, - want: `.required("world")`, - }, - { - name: 'two arguments matched all', - args: { - config: { - required: ['required', '$1'], - minLength: ['min', '$1'], - }, - args: buildConstArgumentNodes({ - required: `"message"`, - minLength: `1`, - }), - }, - want: `.required("message").min(1)`, - }, - { - name: 'argument matches validation schema api', - args: { - config: { - format: { - uri: ['url'], - }, - }, - args: buildConstArgumentNodes({ - format: `"uri"`, - }), - }, - want: `.url()`, - }, - { - name: "argument matched argument but doesn't match api", - args: { - config: { - format: { - uri: ['url'], - }, - }, - args: buildConstArgumentNodes({ - format: `"uuid"`, - }), - }, - want: ``, - }, - { - name: 'complex', - args: { - config: { - required: ['required', '$1'], - format: { - uri: ['url'], - }, - }, - args: buildConstArgumentNodes({ - required: `"message"`, - format: `"uri"`, - }), - }, - want: `.required("message").url()`, - }, - { - name: 'complex 2', - args: { - config: { - required: ['required', '$1'], - format: { - uri: ['url'], - }, - }, - args: buildConstArgumentNodes({ - required: `"message"`, - format: `"uuid"`, - }), - }, - want: `.required("message")`, - }, - ]; - for (const tc of cases) { - test(tc.name, () => { - const { config, args } = tc.args; - const got = buildApiFromDirectiveArguments(config, args); - expect(got).toStrictEqual(tc.want); - }); - } - }); - - describe('buildApi', () => { - const cases: { - name: string; - args: { - config: FormattedDirectiveConfig; - args: ReadonlyArray; - }; - want: string; - }[] = [ - { - name: 'valid', - args: { - config: { - required: { - msg: ['required', '$1'], - }, - constraint: { - minLength: ['min', '$1'], - format: { - uri: ['url'], - email: ['email'], - }, - }, - }, - args: [ - // @required(msg: "message") - buildConstDirectiveNodes('required', { - msg: `"message"`, - }), - // @constraint(minLength: 100, format: "email") - buildConstDirectiveNodes('constraint', { - minLength: `100`, - format: `"email"`, - }), - ], - }, - want: `.required("message").min(100).email()`, - }, - ]; - for (const tc of cases) { - test(tc.name, () => { - const { config, args } = tc.args; - const got = buildApi(config, args); - expect(got).toStrictEqual(tc.want); - }); - } - }); -}); diff --git a/tests/graphql.spec.ts b/tests/graphql.spec.ts index 4e34ebcb..a7b767bb 100644 --- a/tests/graphql.spec.ts +++ b/tests/graphql.spec.ts @@ -9,12 +9,45 @@ import { print, } from 'graphql'; import dedent from 'ts-dedent'; +import { describe, expect, it, test } from 'vitest'; import { isGeneratedByIntrospection, ObjectTypeDefinitionBuilder, topologicalSortAST, topsort } from '../src/graphql'; describe('graphql', () => { describe('ObjectTypeDefinitionBuilder', () => { - describe('useObjectTypes === true', () => { + describe('useObjectTypes === all', () => { + test.each([ + ['Query', true], + ['Mutation', true], + ['Subscription', true], + ['QueryFoo', true], + ['MutationFoo', true], + ['SubscriptionFoo', true], + ['FooQuery', true], + ['FooMutation', true], + ['FooSubscription', true], + ['Foo', true], + ])(`A node with a name of "%s" should be matched? %s`, (nodeName, nodeIsMatched) => { + const node: ObjectTypeDefinitionNode = { + name: { + kind: Kind.NAME, + value: nodeName, + }, + kind: Kind.OBJECT_TYPE_DEFINITION, + }; + + const objectTypeDefFn = ObjectTypeDefinitionBuilder('all', (n: ObjectTypeDefinitionNode) => n); + + expect(objectTypeDefFn).toBeDefined(); + + if (nodeIsMatched) { + expect(objectTypeDefFn?.(node)).toBe(node); + } else { + expect(objectTypeDefFn?.(node)).toBeUndefined(); + } + }); + }); + describe('useObjectTypes === no-reserved', () => { test.each([ ['Query', false], ['Mutation', false], @@ -35,7 +68,7 @@ describe('graphql', () => { kind: Kind.OBJECT_TYPE_DEFINITION, }; - const objectTypeDefFn = ObjectTypeDefinitionBuilder(true, (n: ObjectTypeDefinitionNode) => n); + const objectTypeDefFn = ObjectTypeDefinitionBuilder('no-reserved', (n: ObjectTypeDefinitionNode) => n); expect(objectTypeDefFn).toBeDefined(); diff --git a/tests/myzod.spec.ts b/tests/myzod.spec.ts deleted file mode 100644 index c0b91ecb..00000000 --- a/tests/myzod.spec.ts +++ /dev/null @@ -1,994 +0,0 @@ -import { buildClientSchema, buildSchema, introspectionFromSchema } from 'graphql'; -import dedent from 'ts-dedent'; - -import { plugin } from '../src/index'; - -describe('myzod', () => { - test.each([ - [ - 'non-null and defined', - { - textSchema: /* GraphQL */ ` - input PrimitiveInput { - a: ID! - b: String! - c: Boolean! - d: Int! - e: Float! - } - `, - wantContains: [ - 'export function PrimitiveInputSchema(): myzod.Type {', - 'a: myzod.string()', - 'b: myzod.string()', - 'c: myzod.boolean()', - 'd: myzod.number()', - 'e: myzod.number()', - ], - scalars: { - ID: 'string', - }, - }, - ], - [ - 'nullish', - { - textSchema: /* GraphQL */ ` - input PrimitiveInput { - a: ID - b: String - c: Boolean - d: Int - e: Float - z: String! # no defined check - } - `, - wantContains: [ - 'export function PrimitiveInputSchema(): myzod.Type {', - // alphabet order - 'a: myzod.string().optional().nullable(),', - 'b: myzod.string().optional().nullable(),', - 'c: myzod.boolean().optional().nullable(),', - 'd: myzod.number().optional().nullable(),', - 'e: myzod.number().optional().nullable(),', - ], - scalars: { - ID: 'string', - }, - }, - ], - [ - 'array', - { - textSchema: /* GraphQL */ ` - input ArrayInput { - a: [String] - b: [String!] - c: [String!]! - d: [[String]] - e: [[String]!] - f: [[String]!]! - } - `, - wantContains: [ - 'export function ArrayInputSchema(): myzod.Type {', - 'a: myzod.array(myzod.string().nullable()).optional().nullable(),', - 'b: myzod.array(myzod.string()).optional().nullable(),', - 'c: myzod.array(myzod.string()),', - 'd: myzod.array(myzod.array(myzod.string().nullable()).optional().nullable()).optional().nullable(),', - 'e: myzod.array(myzod.array(myzod.string().nullable())).optional().nullable(),', - 'f: myzod.array(myzod.array(myzod.string().nullable()))', - ], - scalars: undefined, - }, - ], - [ - 'ref input object', - { - textSchema: /* GraphQL */ ` - input AInput { - b: BInput! - } - input BInput { - c: CInput! - } - input CInput { - a: AInput! - } - `, - wantContains: [ - 'export function AInputSchema(): myzod.Type {', - 'b: myzod.lazy(() => BInputSchema())', - 'export function BInputSchema(): myzod.Type {', - 'c: myzod.lazy(() => CInputSchema())', - 'export function CInputSchema(): myzod.Type {', - 'a: myzod.lazy(() => AInputSchema())', - ], - scalars: undefined, - }, - ], - [ - 'nested input object', - { - textSchema: /* GraphQL */ ` - input NestedInput { - child: NestedInput - childrens: [NestedInput] - } - `, - wantContains: [ - 'export function NestedInputSchema(): myzod.Type {', - 'child: myzod.lazy(() => NestedInputSchema().optional().nullable()),', - 'childrens: myzod.array(myzod.lazy(() => NestedInputSchema().nullable())).optional().nullable()', - ], - scalars: undefined, - }, - ], - [ - 'enum', - { - textSchema: /* GraphQL */ ` - enum PageType { - PUBLIC - BASIC_AUTH - } - input PageInput { - pageType: PageType! - } - `, - wantContains: [ - 'export const PageTypeSchema = myzod.enum(PageType)', - 'export function PageInputSchema(): myzod.Type {', - 'pageType: PageTypeSchema', - ], - scalars: undefined, - }, - ], - [ - 'camelcase', - { - textSchema: /* GraphQL */ ` - input HTTPInput { - method: HTTPMethod - url: URL! - } - - enum HTTPMethod { - GET - POST - } - - scalar URL # unknown scalar, should be any (definedNonNullAnySchema) - `, - wantContains: [ - 'export function HttpInputSchema(): myzod.Type {', - 'export const HttpMethodSchema = myzod.enum(HttpMethod)', - 'method: HttpMethodSchema', - 'url: definedNonNullAnySchema', - ], - scalars: undefined, - }, - ], - ])('%s', async (_, { textSchema, wantContains, scalars }) => { - const schema = buildSchema(textSchema); - const result = await plugin(schema, [], { schema: 'myzod', scalars }, {}); - expect(result.prepend).toContain("import * as myzod from 'myzod'"); - - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('with scalars', async () => { - const schema = buildSchema(/* GraphQL */ ` - input Say { - phrase: Text! - times: Count! - } - - scalar Count - scalar Text - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - scalars: { - Text: 'string', - Count: 'number', - }, - }, - {} - ); - expect(result.content).toContain('phrase: myzod.string()'); - expect(result.content).toContain('times: myzod.number()'); - }); - - it('with importFrom', async () => { - const schema = buildSchema(/* GraphQL */ ` - input Say { - phrase: String! - } - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - importFrom: './types', - }, - {} - ); - expect(result.prepend).toContain("import { Say } from './types'"); - expect(result.content).toContain('phrase: myzod.string()'); - }); - - it('with importFrom & useTypeImports', async () => { - const schema = buildSchema(/* GraphQL */ ` - input Say { - phrase: String! - } - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - importFrom: './types', - useTypeImports: true, - }, - {} - ); - expect(result.prepend).toContain("import type { Say } from './types'"); - expect(result.content).toContain('phrase: myzod.string()'); - }); - - it('with enumsAsTypes', async () => { - const schema = buildSchema(/* GraphQL */ ` - enum PageType { - PUBLIC - BASIC_AUTH - } - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - enumsAsTypes: true, - }, - {} - ); - expect(result.content).toContain("export type PageTypeSchema = myzod.literals('PUBLIC', 'BASIC_AUTH')"); - }); - - it('with notAllowEmptyString', async () => { - const schema = buildSchema(/* GraphQL */ ` - input PrimitiveInput { - a: ID! - b: String! - c: Boolean! - d: Int! - e: Float! - } - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - notAllowEmptyString: true, - scalars: { - ID: 'string', - }, - }, - {} - ); - const wantContains = [ - 'export function PrimitiveInputSchema(): myzod.Type {', - 'a: myzod.string().min(1),', - 'b: myzod.string().min(1),', - 'c: myzod.boolean(),', - 'd: myzod.number(),', - 'e: myzod.number()', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('with notAllowEmptyString issue #386', async () => { - const schema = buildSchema(/* GraphQL */ ` - input InputOne { - field: InputNested! - } - - input InputNested { - field: String! - } - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - notAllowEmptyString: true, - scalars: { - ID: 'string', - }, - }, - {} - ); - const wantContain = dedent` - export function InputNestedSchema(): myzod.Type { - return myzod.object({ - field: myzod.string().min(1) - }) - }`; - expect(result.content).toContain(wantContain); - }); - - it('with scalarSchemas', async () => { - const schema = buildSchema(/* GraphQL */ ` - input ScalarsInput { - date: Date! - email: Email - str: String! - } - scalar Date - scalar Email - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - scalarSchemas: { - Date: 'myzod.date()', - Email: 'myzod.string()', // generate the basic type. User can later extend it using `withPredicate(fn: (val: string) => boolean), errMsg?: string }` - }, - }, - {} - ); - const wantContains = [ - 'export function ScalarsInputSchema(): myzod.Type {', - 'date: myzod.date(),', - 'email: myzod.string()', // TODO: Test implementation - 'str: myzod.string()', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - it('with typesPrefix', async () => { - const schema = buildSchema(/* GraphQL */ ` - input Say { - phrase: String! - } - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - typesPrefix: 'I', - importFrom: './types', - }, - {} - ); - expect(result.prepend).toContain("import { ISay } from './types'"); - expect(result.content).toContain('export function ISaySchema(): myzod.Type {'); - }); - it('with typesSuffix', async () => { - const schema = buildSchema(/* GraphQL */ ` - input Say { - phrase: String! - } - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - typesSuffix: 'I', - importFrom: './types', - }, - {} - ); - expect(result.prepend).toContain("import { SayI } from './types'"); - expect(result.content).toContain('export function SayISchema(): myzod.Type {'); - }); - describe('issues #19', () => { - it('string field', async () => { - const schema = buildSchema(/* GraphQL */ ` - input UserCreateInput { - profile: String @constraint(minLength: 1, maxLength: 5000) - } - - directive @constraint(minLength: Int!, maxLength: Int!) on INPUT_FIELD_DEFINITION - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - directives: { - constraint: { - minLength: ['min', '$1', 'Please input more than $1'], - maxLength: ['max', '$1', 'Please input less than $1'], - }, - }, - }, - {} - ); - const wantContains = [ - 'export function UserCreateInputSchema(): myzod.Type {', - 'profile: myzod.string().min(1, "Please input more than 1").max(5000, "Please input less than 5000").optional().nullable()', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - it('not null field', async () => { - const schema = buildSchema(/* GraphQL */ ` - input UserCreateInput { - profile: String! @constraint(minLength: 1, maxLength: 5000) - } - - directive @constraint(minLength: Int!, maxLength: Int!) on INPUT_FIELD_DEFINITION - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - directives: { - constraint: { - minLength: ['min', '$1', 'Please input more than $1'], - maxLength: ['max', '$1', 'Please input less than $1'], - }, - }, - }, - {} - ); - const wantContains = [ - 'export function UserCreateInputSchema(): myzod.Type {', - 'profile: myzod.string().min(1, "Please input more than 1").max(5000, "Please input less than 5000")', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - it('list field', async () => { - const schema = buildSchema(/* GraphQL */ ` - input UserCreateInput { - profile: [String] @constraint(minLength: 1, maxLength: 5000) - } - - directive @constraint(minLength: Int!, maxLength: Int!) on INPUT_FIELD_DEFINITION - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - directives: { - constraint: { - minLength: ['min', '$1', 'Please input more than $1'], - maxLength: ['max', '$1', 'Please input less than $1'], - }, - }, - }, - {} - ); - const wantContains = [ - 'export function UserCreateInputSchema(): myzod.Type {', - 'profile: myzod.array(myzod.string().nullable()).min(1, "Please input more than 1").max(5000, "Please input less than 5000").optional().nullable()', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - }); - - describe('with withObjectType', () => { - it('not generate if withObjectType false', async () => { - const schema = buildSchema(/* GraphQL */ ` - type User { - id: ID! - name: String - } - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - }, - {} - ); - expect(result.content).not.toContain('export function UserSchema(): myzod.Type {'); - }); - - it('generate object type contains object type', async () => { - const schema = buildSchema(/* GraphQL */ ` - type Book { - author: Author - title: String - } - - type Author { - books: [Book] - name: String - } - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - withObjectType: true, - }, - {} - ); - const wantContains = [ - 'export function AuthorSchema(): myzod.Type {', - "__typename: myzod.literal('Author').optional(),", - 'books: myzod.array(BookSchema().nullable()).optional().nullable(),', - 'name: myzod.string().optional().nullable()', - - 'export function BookSchema(): myzod.Type {', - "__typename: myzod.literal('Book').optional(),", - 'author: AuthorSchema().optional().nullable(),', - 'title: myzod.string().optional().nullable()', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - - for (const wantNotContain of ['Query', 'Mutation', 'Subscription']) { - expect(result.content).not.toContain(wantNotContain); - } - }); - - it('generate both input & type', async () => { - const schema = buildSchema(/* GraphQL */ ` - scalar Date - scalar Email - input UserCreateInput { - name: String! - date: Date! - email: Email! - } - input UsernameUpdateInput { - updateInputId: ID! - updateName: String! - } - type User { - id: ID! - name: String - age: Int - email: Email - isMember: Boolean - createdAt: Date! - } - - type Mutation { - _empty: String - } - - type Query { - _empty: String - } - - type Subscription { - _empty: String - } - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - withObjectType: true, - scalarSchemas: { - Date: 'myzod.date()', - Email: 'myzod.string().email()', - }, - scalars: { - ID: { - input: 'number', - output: 'string', - }, - }, - }, - {} - ); - const wantContains = [ - // User Create Input - 'export function UserCreateInputSchema(): myzod.Type {', - 'name: myzod.string(),', - 'date: myzod.date(),', - 'email: myzod.string().email()', - // Username Update Input - 'export function UsernameUpdateInputSchema(): myzod.Type {', - 'updateInputId: myzod.number(),', - 'updateName: myzod.string()', - // User - 'export function UserSchema(): myzod.Type {', - "__typename: myzod.literal('User').optional(),", - 'id: myzod.string(),', - 'name: myzod.string().optional().nullable(),', - 'age: myzod.number().optional().nullable(),', - 'email: myzod.string().email().optional().nullable(),', - 'isMember: myzod.boolean().optional().nullable(),', - 'createdAt: myzod.date()', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - - for (const wantNotContain of ['Query', 'Mutation', 'Subscription']) { - expect(result.content).not.toContain(wantNotContain); - } - }); - - it('generate union types', async () => { - const schema = buildSchema(/* GraphQL */ ` - type Square { - size: Int - } - type Circle { - radius: Int - } - union Shape = Circle | Square - `); - - const result = await plugin( - schema, - [], - { - schema: 'myzod', - withObjectType: true, - }, - {} - ); - - const wantContains = [ - // Shape Schema - 'export function ShapeSchema() {', - 'return myzod.union([CircleSchema(), SquareSchema()])', - '}', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('generate union types with single element', async () => { - const schema = buildSchema(/* GraphQL */ ` - type Square { - size: Int - } - type Circle { - radius: Int - } - union Shape = Circle | Square - - type Geometry { - shape: Shape - } - `); - - const result = await plugin( - schema, - [], - { - schema: 'myzod', - withObjectType: true, - }, - {} - ); - - const wantContains = [ - 'export function GeometrySchema(): myzod.Type {', - 'return myzod.object({', - "__typename: myzod.literal('Geometry').optional(),", - 'shape: ShapeSchema().optional().nullable()', - '}', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('correctly reference generated union types', async () => { - const schema = buildSchema(/* GraphQL */ ` - type Circle { - radius: Int - } - union Shape = Circle - `); - - const result = await plugin( - schema, - [], - { - schema: 'myzod', - withObjectType: true, - }, - {} - ); - - const wantContains = [ - // Shape Schema - 'export function ShapeSchema() {', - 'return CircleSchema()', - '}', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('generate enum union types', async () => { - const schema = buildSchema(/* GraphQL */ ` - enum PageType { - PUBLIC - BASIC_AUTH - } - - enum MethodType { - GET - POST - } - - union AnyType = PageType | MethodType - `); - - const result = await plugin( - schema, - [], - { - schema: 'myzod', - withObjectType: true, - }, - {} - ); - - const wantContains = [ - 'export function AnyTypeSchema() {', - 'return myzod.union([PageTypeSchema, MethodTypeSchema])', - '}', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('generate union types with single element, export as const', async () => { - const schema = buildSchema(/* GraphQL */ ` - type Square { - size: Int - } - type Circle { - radius: Int - } - union Shape = Circle | Square - - type Geometry { - shape: Shape - } - `); - - const result = await plugin( - schema, - [], - { - schema: 'myzod', - withObjectType: true, - validationSchemaExportType: 'const', - }, - {} - ); - - const wantContains = [ - 'export const GeometrySchema: myzod.Type = myzod.object({', - "__typename: myzod.literal('Geometry').optional(),", - 'shape: ShapeSchema.optional().nullable()', - '}', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('with object arguments', async () => { - const schema = buildSchema(/* GraphQL */ ` - type MyType { - foo(a: String, b: Int!, c: Boolean, d: Float!, e: Text): String - } - scalar Text - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - withObjectType: true, - scalars: { - Text: 'string', - }, - }, - {} - ); - const wantContain = dedent` - export function MyTypeFooArgsSchema(): myzod.Type { - return myzod.object({ - a: myzod.string().optional().nullable(), - b: myzod.number(), - c: myzod.boolean().optional().nullable(), - d: myzod.number(), - e: myzod.string().optional().nullable() - }) - }`; - expect(result.content).toContain(wantContain); - }); - }); - - it('properly generates custom directive values', async () => { - const schema = buildSchema(/* GraphQL */ ` - input UserCreateInput { - name: String! @constraint(startsWith: "Sir") - age: Int! @constraint(min: 0, max: 100) - } - directive @constraint(startsWith: String, min: Int, max: Int) on INPUT_FIELD_DEFINITION - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - directives: { - constraint: { - min: 'min', - max: 'max', - startsWith: ['pattern', '/^$1/'], - }, - }, - }, - {} - ); - const wantContains = [ - // User Create Input - 'export function UserCreateInputSchema(): myzod.Type {', - 'name: myzod.string().pattern(/^Sir/),', - 'age: myzod.number().min(0).max(100)', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('exports as const instead of func', async () => { - const schema = buildSchema(/* GraphQL */ ` - input Say { - phrase: String! - } - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - validationSchemaExportType: 'const', - }, - {} - ); - expect(result.content).toContain('export const SaySchema: myzod.Type = myzod.object({'); - }); - - it('generate both input & type, export as const', async () => { - const schema = buildSchema(/* GraphQL */ ` - scalar Date - scalar Email - input UserCreateInput { - name: String! - date: Date! - email: Email! - } - type User { - id: ID! - name: String - age: Int - email: Email - isMember: Boolean - createdAt: Date! - } - type Mutation { - _empty: String - } - type Query { - _empty: String - } - type Subscription { - _empty: String - } - `); - const result = await plugin( - schema, - [], - { - schema: 'myzod', - withObjectType: true, - scalarSchemas: { - Date: 'myzod.date()', - Email: 'myzod.string().email()', - }, - validationSchemaExportType: 'const', - }, - {} - ); - const wantContains = [ - // User Create Input - 'export const UserCreateInputSchema: myzod.Type = myzod.object({', - 'name: myzod.string(),', - 'date: myzod.date(),', - 'email: myzod.string().email()', - // User - 'export const UserSchema: myzod.Type = myzod.object({', - "__typename: myzod.literal('User').optional(),", - 'id: myzod.string(),', - 'name: myzod.string().optional().nullable(),', - 'age: myzod.number().optional().nullable(),', - 'email: myzod.string().email().optional().nullable(),', - 'isMember: myzod.boolean().optional().nullable(),', - 'createdAt: myzod.date()', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - - for (const wantNotContain of ['Query', 'Mutation', 'Subscription']) { - expect(result.content).not.toContain(wantNotContain); - } - }); - - it('issue #394', async () => { - const schema = buildSchema(/* GraphQL */ ` - enum Test { - A - B - } - - type Query { - _dummy: Test - } - - input QueryInput { - _dummy: Test - } - `); - const query = introspectionFromSchema(schema); - const clientSchema = buildClientSchema(query); - const result = await plugin( - clientSchema, - [], - { - schema: 'myzod', - scalars: { - ID: 'string', - }, - }, - {} - ); - const wantContain = dedent` - export function QueryInputSchema(): myzod.Type { - return myzod.object({ - _dummy: TestSchema.optional().nullable() - }) - }`; - expect(result.content).toContain(wantContain); - }); -}); diff --git a/tests/regexp.spec.ts b/tests/regexp.spec.ts index e3ed075d..7a4b3531 100644 --- a/tests/regexp.spec.ts +++ b/tests/regexp.spec.ts @@ -1,3 +1,5 @@ +import { describe, expect, test } from 'vitest'; + import { isConvertableRegexp } from '../src/regexp'; describe('isConvertableRegexp', () => { diff --git a/tests/yup.spec.ts b/tests/yup.spec.ts index 50316ad7..eeab9c4b 100644 --- a/tests/yup.spec.ts +++ b/tests/yup.spec.ts @@ -1,7 +1,8 @@ import { buildClientSchema, buildSchema, introspectionFromSchema } from 'graphql'; import dedent from 'ts-dedent'; +import { describe, expect, it, test } from 'vitest'; -import { plugin } from '../src/index'; +import { plugin } from '../src'; describe('yup', () => { test.each([ @@ -10,7 +11,12 @@ describe('yup', () => { { textSchema: /* GraphQL */ ` input PrimitiveInput { + """ + A和名 + Aコメント + """ a: ID! + "B和名" b: String! c: Boolean! d: Int! @@ -19,15 +25,16 @@ describe('yup', () => { `, wantContains: [ 'export function PrimitiveInputSchema(): yup.ObjectSchema', - 'a: yup.string().defined()', - 'b: yup.string().defined()', - 'c: yup.boolean().defined()', - 'd: yup.number().defined()', - 'e: yup.number().defined()', + 'a: yup.string().label("A和名").nonNullable().defined(),', + 'b: yup.string().label("B和名").nonNullable().defined(),', + 'c: yup.boolean().nonNullable().defined()', + 'd: yup.number().nonNullable().defined()', + 'e: yup.number().nonNullable().defined()', ], scalars: { ID: 'string', }, + lazyTypes: undefined, }, ], [ @@ -35,7 +42,12 @@ describe('yup', () => { { textSchema: /* GraphQL */ ` input PrimitiveInput { + """ + A和名 + Aコメント + """ a: ID + "B和名" b: String c: Boolean d: Int @@ -46,15 +58,16 @@ describe('yup', () => { wantContains: [ 'export function PrimitiveInputSchema(): yup.ObjectSchema', // alphabet order - 'a: yup.string().defined().nullable().optional(),', - 'b: yup.string().defined().nullable().optional(),', - 'c: yup.boolean().defined().nullable().optional(),', - 'd: yup.number().defined().nullable().optional(),', - 'e: yup.number().defined().nullable().optional(),', + 'a: yup.string().label("A和名").nullable(),', + 'b: yup.string().label("B和名").nullable(),', + 'c: yup.boolean().nullable(),', + 'd: yup.number().nullable(),', + 'e: yup.number().nullable(),', ], scalars: { ID: 'string', }, + lazyTypes: undefined, }, ], [ @@ -62,6 +75,10 @@ describe('yup', () => { { textSchema: /* GraphQL */ ` input ArrayInput { + """ + A和名 + Aコメント + """ a: [String] b: [String!] c: [String!]! @@ -72,14 +89,15 @@ describe('yup', () => { `, wantContains: [ 'export function ArrayInputSchema(): yup.ObjectSchema', - 'a: yup.array(yup.string().defined().nullable()).defined().nullable().optional(),', - 'b: yup.array(yup.string().defined().nonNullable()).defined().nullable().optional(),', - 'c: yup.array(yup.string().defined().nonNullable()).defined(),', - 'd: yup.array(yup.array(yup.string().defined().nullable()).defined().nullable()).defined().nullable().optional(),', - 'e: yup.array(yup.array(yup.string().defined().nullable()).defined()).defined().nullable().optional(),', - 'f: yup.array(yup.array(yup.string().defined().nullable()).defined()).defined()', + 'a: yup.array(yup.string().label("A和名").nullable().defined()).label("A和名").nullable(),', + 'b: yup.array(yup.string().nonNullable().defined()).nullable(),', + 'c: yup.array(yup.string().nonNullable().defined()).nonNullable().defined(),', + 'd: yup.array(yup.array(yup.string().nullable().defined()).nullable().defined()).nullable(),', + 'e: yup.array(yup.array(yup.string().nullable().defined()).nonNullable().defined()).nullable(),', + 'f: yup.array(yup.array(yup.string().nullable().defined()).nonNullable().defined()).nonNullable().defined()', ], scalars: undefined, + lazyTypes: undefined, }, ], [ @@ -93,18 +111,23 @@ describe('yup', () => { c: CInput! } input CInput { + """ + A和名 + Aコメント + """ a: AInput! } `, wantContains: [ 'export function AInputSchema(): yup.ObjectSchema', - 'b: yup.lazy(() => BInputSchema().nonNullable())', + 'b: yup.lazy(() => BInputSchema().nonNullable().defined())', 'export function BInputSchema(): yup.ObjectSchema', - 'c: yup.lazy(() => CInputSchema().nonNullable())', + 'c: CInputSchema().nonNullable().defined()', 'export function CInputSchema(): yup.ObjectSchema', - 'a: yup.lazy(() => AInputSchema().nonNullable())', + 'a: AInputSchema().label("A和名").nonNullable().defined()', ], scalars: undefined, + lazyTypes: ['BInput'], }, ], [ @@ -112,16 +135,23 @@ describe('yup', () => { { textSchema: /* GraphQL */ ` input NestedInput { + """ + child和名 + """ child: NestedInput + """ + children和名 + """ childrens: [NestedInput] } `, wantContains: [ 'export function NestedInputSchema(): yup.ObjectSchema', - 'child: yup.lazy(() => NestedInputSchema()).optional(),', - 'childrens: yup.array(yup.lazy(() => NestedInputSchema())).defined().nullable().optional()', + 'child: yup.lazy(() => NestedInputSchema().label("child和名").nullable()),', + 'childrens: yup.lazy(() => yup.array(NestedInputSchema().label("children和名").nullable().defined()).label("children和名").nullable())', ], scalars: undefined, + lazyTypes: ['NestedInput'], }, ], [ @@ -133,15 +163,19 @@ describe('yup', () => { BASIC_AUTH } input PageInput { + """ + pageType和名 + """ pageType: PageType! } `, wantContains: [ - 'export const PageTypeSchema = yup.string().oneOf([PageType.Public, PageType.BasicAuth]).defined();', + 'export const PageTypeSchema = yup.string().oneOf([PageType.Public, PageType.BasicAuth]);', 'export function PageInputSchema(): yup.ObjectSchema', - 'pageType: PageTypeSchema.nonNullable()', + 'pageType: PageTypeSchema.label("pageType和名").nonNullable()', ], scalars: undefined, + lazyTypes: undefined, }, ], [ @@ -162,16 +196,17 @@ describe('yup', () => { `, wantContains: [ 'export function HttpInputSchema(): yup.ObjectSchema', - 'export const HttpMethodSchema = yup.string().oneOf([HttpMethod.Get, HttpMethod.Post]).defined();', - 'method: HttpMethodSchema.nullable().optional(),', - 'url: yup.mixed().nonNullable()', + 'export const HttpMethodSchema = yup.string().oneOf([HttpMethod.Get, HttpMethod.Post]);', + 'method: HttpMethodSchema.nullable(),', + 'url: yup.mixed().nonNullable().defined()', ], scalars: undefined, + lazyTypes: undefined, }, ], - ])('%s', async (_, { textSchema, wantContains, scalars }) => { + ])('%s', async (_, { textSchema, wantContains, scalars, lazyTypes }) => { const schema = buildSchema(textSchema); - const result = await plugin(schema, [], { scalars }, {}); + const result = await plugin(schema, [], { scalars, lazyTypes }, {}); expect(result.prepend).toContain("import * as yup from 'yup'"); for (const wantContain of wantContains) { @@ -200,8 +235,8 @@ describe('yup', () => { }, {} ); - expect(result.content).toContain('phrase: yup.string().defined()'); - expect(result.content).toContain('times: yup.number().defined()'); + expect(result.content).toContain('phrase: yup.string()'); + expect(result.content).toContain('times: yup.number()'); }); it('with importFrom', async () => { @@ -219,7 +254,7 @@ describe('yup', () => { {} ); expect(result.prepend).toContain("import { Say } from './types'"); - expect(result.content).toContain('phrase: yup.string().defined()'); + expect(result.content).toContain('phrase: yup.string()'); }); it('with importFrom & useTypeImports', async () => { @@ -238,7 +273,7 @@ describe('yup', () => { {} ); expect(result.prepend).toContain("import type { Say } from './types'"); - expect(result.content).toContain('phrase: yup.string().defined()'); + expect(result.content).toContain('phrase: yup.string()'); }); it('with enumsAsTypes', async () => { @@ -256,9 +291,7 @@ describe('yup', () => { }, {} ); - expect(result.content).toContain( - "export const PageTypeSchema = yup.string().oneOf(['PUBLIC', 'BASIC_AUTH']).defined();" - ); + expect(result.content).toContain("export const PageTypeSchema = yup.string().oneOf(['PUBLIC', 'BASIC_AUTH']);"); }); it('with notAllowEmptyString', async () => { @@ -275,20 +308,20 @@ describe('yup', () => { schema, [], { - notAllowEmptyString: true, - scalars: { - ID: 'string', + scalarSchemas: { + String: 'yup.string().required()', + ID: 'yup.string().required()', }, }, {} ); const wantContains = [ 'export function PrimitiveInputSchema(): yup.ObjectSchema', - 'a: yup.string().defined().required(),', - 'b: yup.string().defined().required(),', - 'c: yup.boolean().defined().nonNullable(),', - 'd: yup.number().defined().nonNullable(),', - 'e: yup.number().defined().nonNullable()', + 'a: yup.string().required().nonNullable().defined(),', + 'b: yup.string().required().nonNullable().defined(),', + 'c: yup.boolean().nonNullable().defined(),', + 'd: yup.number().nonNullable().defined(),', + 'e: yup.number().nonNullable().defined()', ]; for (const wantContain of wantContains) { expect(result.content).toContain(wantContain); @@ -309,10 +342,9 @@ describe('yup', () => { schema, [], { - schema: 'yup', - notAllowEmptyString: true, - scalars: { - ID: 'string', + scalarSchemas: { + String: 'yup.string().required()', + ID: 'yup.string().required()', }, }, {} @@ -320,8 +352,8 @@ describe('yup', () => { const wantContain = dedent` export function InputNestedSchema(): yup.ObjectSchema { return yup.object({ - field: yup.string().defined().required() - }) + field: yup.string().required().nonNullable().defined() + }).strict() }`; expect(result.content).toContain(wantContain); }); @@ -349,9 +381,9 @@ describe('yup', () => { ); const wantContains = [ 'export function ScalarsInputSchema(): yup.ObjectSchema', - 'date: yup.date().defined().nonNullable(),', - 'email: yup.string().email().defined().nullable().optional(),', - 'str: yup.string().defined().nonNullable()', + 'date: yup.date().nonNullable().defined(),', + 'email: yup.string().email().nullable()', + 'str: yup.string().nonNullable().defined()', ]; for (const wantContain of wantContains) { expect(result.content).toContain(wantContain); @@ -403,14 +435,7 @@ describe('yup', () => { name: String } `); - const result = await plugin( - schema, - [], - { - schema: 'yup', - }, - {} - ); + const result = await plugin(schema, [], {}, {}); expect(result.content).not.toContain('export function UserSchema(): yup.ObjectSchema {'); }); @@ -435,26 +460,25 @@ describe('yup', () => { schema, [], { - schema: 'yup', - withObjectType: true, + withObjectType: 'all', }, {} ); const wantContains = [ 'export function AuthorSchema(): yup.ObjectSchema {', - "__typename: yup.string<'Author'>().optional(),", - 'books: yup.array(BookSchema().nullable()).defined().nullable().optional(),', - 'name: yup.string().defined().nullable().optional()', + "__typename: yup.string<'Author'>(),", + 'books: yup.array(BookSchema().nullable().defined()).nullable(),', + 'name: yup.string().nullable()', 'export function BookSchema(): yup.ObjectSchema {', - "__typename: yup.string<'Book'>().optional(),", - 'author: AuthorSchema().nullable().optional(),', - 'title: yup.string().defined().nonNullable()', + "__typename: yup.string<'Book'>(),", + 'author: AuthorSchema().nullable(),', + 'title: yup.string().nonNullable().defined()', 'export function Book2Schema(): yup.ObjectSchema {', - "__typename: yup.string<'Book2'>().optional(),", - 'author: AuthorSchema().nonNullable(),', - 'title: yup.string().defined().nullable().optional()', + "__typename: yup.string<'Book2'>(),", + 'author: AuthorSchema().nonNullable().defined(),', + 'title: yup.string().nullable()', ]; for (const wantContain of wantContains) { expect(result.content).toContain(wantContain); @@ -465,7 +489,7 @@ describe('yup', () => { } }); - it('generate both input & type if withObjectType true', async () => { + it('generate both input & type if withObjectType all', async () => { const schema = buildSchema(/* GraphQL */ ` scalar Date scalar Email @@ -504,8 +528,7 @@ describe('yup', () => { schema, [], { - schema: 'yup', - withObjectType: true, + withObjectType: 'all', scalarSchemas: { Date: 'yup.date()', Email: 'yup.string().email()', @@ -522,22 +545,104 @@ describe('yup', () => { const wantContains = [ // User Create Input 'export function UserCreateInputSchema(): yup.ObjectSchema {', - 'name: yup.string().defined().nonNullable(),', - 'date: yup.date().defined().nonNullable(),', - 'email: yup.string().email().defined().nonNullable()', + 'name: yup.string().nonNullable().defined(),', + 'date: yup.date().nonNullable().defined(),', + 'email: yup.string().email().nonNullable().defined()', // Username Update Input 'export function UsernameUpdateInputSchema(): yup.ObjectSchema {', - 'updateInputId: yup.number().defined().nonNullable(),', - 'updateName: yup.string().defined().nonNullable()', + 'updateInputId: yup.number().nonNullable().defined(),', + 'updateName: yup.string().nonNullable().defined()', // User 'export function UserSchema(): yup.ObjectSchema {', - "__typename: yup.string<'User'>().optional(),", - 'id: yup.string().defined().nonNullable(),', - 'name: yup.string().defined().nullable().optional(),', - 'age: yup.number().defined().nullable().optional(),', - 'isMember: yup.boolean().defined().nullable().optional(),', - 'email: yup.string().email().defined().nullable().optional(),', - 'createdAt: yup.date().defined().nonNullable()', + "__typename: yup.string<'User'>(),", + 'id: yup.string().nonNullable().defined(),', + 'name: yup.string().nullable(),', + 'age: yup.number().nullable(),', + 'isMember: yup.boolean().nullable(),', + 'email: yup.string().email().nullable(),', + 'createdAt: yup.date().nonNullable().defined()', + ]; + for (const wantContain of wantContains) { + expect(result.content).toContain(wantContain); + } + + for (const wantContain of ['Query', 'Mutation', 'Subscription']) { + expect(result.content).toContain(wantContain); + } + }); + + it('generate both input & type if withObjectType no-reserved', async () => { + const schema = buildSchema(/* GraphQL */ ` + scalar Date + scalar Email + input UserCreateInput { + name: String! + date: Date! + email: Email! + } + input UsernameUpdateInput { + updateInputId: ID! + updateName: String! + } + type User { + id: ID! + name: String + age: Int + email: Email + isMember: Boolean + createdAt: Date! + } + + type Mutation { + _empty: String + } + + type Query { + _empty: String + } + + type Subscription { + _empty: String + } + `); + + const result = await plugin( + schema, + [], + { + withObjectType: 'no-reserved', + scalarSchemas: { + Date: 'yup.date()', + Email: 'yup.string().email()', + }, + scalars: { + ID: { + input: 'number', + output: 'string', + }, + }, + }, + {} + ); + const wantContains = [ + // User Create Input + 'export function UserCreateInputSchema(): yup.ObjectSchema {', + 'name: yup.string().nonNullable().defined(),', + 'date: yup.date().nonNullable().defined(),', + 'email: yup.string().email().nonNullable().defined()', + // Username Update Input + 'export function UsernameUpdateInputSchema(): yup.ObjectSchema {', + 'updateInputId: yup.number().nonNullable().defined(),', + 'updateName: yup.string().nonNullable().defined()', + // User + 'export function UserSchema(): yup.ObjectSchema {', + "__typename: yup.string<'User'>(),", + 'id: yup.string().nonNullable().defined(),', + 'name: yup.string().nullable(),', + 'age: yup.number().nullable(),', + 'isMember: yup.boolean().nullable(),', + 'email: yup.string().email().nullable(),', + 'createdAt: yup.date().nonNullable().defined()', ]; for (const wantContain of wantContains) { expect(result.content).toContain(wantContain); @@ -563,16 +668,18 @@ describe('yup', () => { schema, [], { - schema: 'yup', - withObjectType: true, + withObjectType: 'all', }, {} ); const wantContains = [ // Shape Schema - 'export function ShapeSchema(): yup.MixedSchema {', - 'union(CircleSchema(), SquareSchema())', + 'export function ShapeSchema(): yup.ObjectSchema {', + 'union({', + 'Circle: CircleSchema(),', + 'Square: SquareSchema(),', + '})', '}', ]; for (const wantContain of wantContains) { @@ -599,8 +706,7 @@ describe('yup', () => { schema, [], { - schema: 'yup', - withObjectType: true, + withObjectType: 'all', }, {} ); @@ -608,8 +714,8 @@ describe('yup', () => { const wantContains = [ 'export function GeometrySchema(): yup.ObjectSchema {', 'return yup.object({', - "__typename: yup.string<'Geometry'>().optional(),", - 'shape: ShapeSchema().nullable().optional()', + "__typename: yup.string<'Geometry'>(),", + 'shape: ShapeSchema().nullable()', '})', ]; for (const wantContain of wantContains) { @@ -629,16 +735,17 @@ describe('yup', () => { schema, [], { - schema: 'yup', - withObjectType: true, + withObjectType: 'all', }, {} ); const wantContains = [ // Shape Schema - 'export function ShapeSchema(): yup.MixedSchema {', - 'return union(CircleSchema())', + 'export function ShapeSchema(): yup.ObjectSchema {', + 'return union({', + 'Circle: CircleSchema(),', + '})', '}', ]; for (const wantContain of wantContains) { @@ -646,6 +753,7 @@ describe('yup', () => { } }); + // FIXME: TODO: broken it('generate enum union types', async () => { const schema = buildSchema(/* GraphQL */ ` enum PageType { @@ -665,15 +773,17 @@ describe('yup', () => { schema, [], { - schema: 'yup', - withObjectType: true, + withObjectType: 'all', }, {} ); const wantContains = [ - 'export function AnyTypeSchema(): yup.MixedSchema {', - 'union(PageTypeSchema, MethodTypeSchema)', + 'export function AnyTypeSchema(): yup.ObjectSchema {', + 'union({', + 'PageType: PageTypeSchema,', + 'MethodType: MethodTypeSchema,', + '})', '}', ]; for (const wantContain of wantContains) { @@ -700,8 +810,7 @@ describe('yup', () => { schema, [], { - schema: 'yup', - withObjectType: true, + withObjectType: 'all', validationSchemaExportType: 'const', }, {} @@ -709,8 +818,8 @@ describe('yup', () => { const wantContains = [ 'export const GeometrySchema: yup.ObjectSchema = yup.object({', - "__typename: yup.string<'Geometry'>().optional(),", - 'shape: ShapeSchema.nullable().optional()', + "__typename: yup.string<'Geometry'>(),", + 'shape: ShapeSchema.nullable()', '})', ]; for (const wantContain of wantContains) { @@ -729,8 +838,7 @@ describe('yup', () => { schema, [], { - schema: 'yup', - withObjectType: true, + withObjectType: 'all', scalars: { Text: 'string', }, @@ -740,12 +848,12 @@ describe('yup', () => { const wantContain = dedent` export function MyTypeFooArgsSchema(): yup.ObjectSchema { return yup.object({ - a: yup.string().defined().nullable().optional(), - b: yup.number().defined().nonNullable(), - c: yup.boolean().defined().nullable().optional(), - d: yup.number().defined().nonNullable(), - e: yup.string().defined().nullable().optional() - }) + a: yup.string().nullable(), + b: yup.number().nonNullable().defined(), + c: yup.boolean().nullable(), + d: yup.number().nonNullable().defined(), + e: yup.string().nullable() + }).strict() }`; expect(result.content).toContain(wantContain); }); @@ -754,35 +862,41 @@ describe('yup', () => { it('properly generates custom directive values', async () => { const schema = buildSchema(/* GraphQL */ ` input UserCreateInput { - name: String! @constraint(startsWith: "Sir") - age: Int! @constraint(min: 0, max: 100) + id: ID! @rules(apply: ["exists"]) + name: String! @rules(apply: ["startsWith:Sir", "required_without:nickname"]) + age: Int! @rules(apply: ["min:0", "max:100"]) + keyword: String! @rules(apply: ["regex:/^[a-zA-Z0-9]+$/"]) + nickname: String @rules(apply: ["max:10", "sometimes", "required_without:name"]) } - directive @constraint(startsWith: String, min: Int, max: Int) on INPUT_FIELD_DEFINITION + directive @rules(apply: [String!]!) on INPUT_FIELD_DEFINITION `); const result = await plugin( schema, [], { - schema: 'yup', - directives: { - constraint: { - min: 'min', - max: 'max', - startsWith: ['matches', '/^$1/'], - }, + rules: { + regex: 'matches', }, + ignoreRules: ['exists'], + lazyRules: ['required_without'], }, {} ); const wantContains = [ // User Create Input 'export function UserCreateInputSchema(): yup.ObjectSchema {', - 'name: yup.string().defined().nonNullable().matches(/^Sir/),', - 'age: yup.number().defined().nonNullable().min(0).max(100)', + 'name: yup.lazy(() => yup.string().startsWith("Sir").required_without("nickname").nonNullable().defined()),', + 'age: yup.number().min(0).max(100).nonNullable().defined()', + 'keyword: yup.string().matches(/^[a-zA-Z0-9]+$/).nonNullable().defined()', + 'nickname: yup.lazy(() => yup.string().sometimes(schema => schema.max(10).required_without("name")).nullable())', ]; for (const wantContain of wantContains) { expect(result.content).toContain(wantContain); } + const wantNotContains = ['id: yup.string().nonNullable().exists(),']; + for (const wantNotContain of wantNotContains) { + expect(result.content).not.toContain(wantNotContain); + } }); it('exports as const instead of func', async () => { @@ -795,7 +909,6 @@ describe('yup', () => { schema, [], { - schema: 'yup', validationSchemaExportType: 'const', }, {} @@ -834,8 +947,7 @@ describe('yup', () => { schema, [], { - schema: 'yup', - withObjectType: true, + withObjectType: 'all', scalarSchemas: { Date: 'yup.date()', Email: 'yup.string().email()', @@ -847,25 +959,25 @@ describe('yup', () => { const wantContains = [ // User Create Input 'export const UserCreateInputSchema: yup.ObjectSchema = yup.object({', - 'name: yup.string().defined().nonNullable(),', - 'date: yup.date().defined().nonNullable(),', - 'email: yup.string().email().defined().nonNullable()', + 'name: yup.string().nonNullable().defined(),', + 'date: yup.date().nonNullable().defined(),', + 'email: yup.string().email().nonNullable().defined()', // User 'export const UserSchema: yup.ObjectSchema = yup.object({', - "__typename: yup.string<'User'>().optional(),", - 'id: yup.string().defined().nonNullable(),', - 'name: yup.string().defined().nullable().optional(),', - 'age: yup.number().defined().nullable().optional(),', - 'email: yup.string().email().defined().nullable().optional(),', - 'isMember: yup.boolean().defined().nullable().optional(),', - 'createdAt: yup.date().defined().nonNullable()', + "__typename: yup.string<'User'>(),", + 'id: yup.string().nonNullable().defined(),', + 'name: yup.string().nullable(),', + 'age: yup.number().nullable()', + 'email: yup.string().email().nullable()', + 'isMember: yup.boolean().nullable()', + 'createdAt: yup.date().nonNullable().defined()', ]; for (const wantContain of wantContains) { expect(result.content).toContain(wantContain); } - for (const wantNotContain of ['Query', 'Mutation', 'Subscription']) { - expect(result.content).not.toContain(wantNotContain); + for (const wantContain of ['Query', 'Mutation', 'Subscription']) { + expect(result.content).toContain(wantContain); } }); @@ -890,7 +1002,6 @@ describe('yup', () => { clientSchema, [], { - schema: 'yup', scalars: { ID: 'string', }, @@ -900,8 +1011,8 @@ describe('yup', () => { const wantContain = dedent` export function QueryInputSchema(): yup.ObjectSchema { return yup.object({ - _dummy: TestSchema.nullable().optional() - }) + _dummy: TestSchema.nullable() + }).strict() }`; expect(result.content).toContain(wantContain); }); diff --git a/tests/zod.spec.ts b/tests/zod.spec.ts deleted file mode 100644 index 76f3ecde..00000000 --- a/tests/zod.spec.ts +++ /dev/null @@ -1,1062 +0,0 @@ -import { getCachedDocumentNodeFromSchema } from '@graphql-codegen/plugin-helpers'; -import { buildClientSchema, buildSchema, introspectionFromSchema, isSpecifiedScalarType } from 'graphql'; -import { dedent } from 'ts-dedent'; - -import { plugin } from '../src/index'; - -describe('zod', () => { - test.each([ - [ - 'non-null and defined', - { - textSchema: /* GraphQL */ ` - input PrimitiveInput { - a: ID! - b: String! - c: Boolean! - d: Int! - e: Float! - } - `, - wantContains: [ - 'export function PrimitiveInputSchema(): z.ZodObject>', - 'a: z.string()', - 'b: z.string()', - 'c: z.boolean()', - 'd: z.number()', - 'e: z.number()', - ], - scalars: { - ID: 'string', - }, - }, - ], - [ - 'nullish', - { - textSchema: /* GraphQL */ ` - input PrimitiveInput { - a: ID - b: String - c: Boolean - d: Int - e: Float - z: String! # no defined check - } - `, - wantContains: [ - 'export function PrimitiveInputSchema(): z.ZodObject>', - // alphabet order - 'a: z.string().nullish(),', - 'b: z.string().nullish(),', - 'c: z.boolean().nullish(),', - 'd: z.number().nullish(),', - 'e: z.number().nullish(),', - ], - scalars: { - ID: 'string', - }, - }, - ], - [ - 'array', - { - textSchema: /* GraphQL */ ` - input ArrayInput { - a: [String] - b: [String!] - c: [String!]! - d: [[String]] - e: [[String]!] - f: [[String]!]! - } - `, - wantContains: [ - 'export function ArrayInputSchema(): z.ZodObject>', - 'a: z.array(z.string().nullable()).nullish(),', - 'b: z.array(z.string()).nullish(),', - 'c: z.array(z.string()),', - 'd: z.array(z.array(z.string().nullable()).nullish()).nullish(),', - 'e: z.array(z.array(z.string().nullable())).nullish(),', - 'f: z.array(z.array(z.string().nullable()))', - ], - scalars: undefined, - }, - ], - [ - 'ref input object', - { - textSchema: /* GraphQL */ ` - input AInput { - b: BInput! - } - input BInput { - c: CInput! - } - input CInput { - a: AInput! - } - `, - wantContains: [ - 'export function AInputSchema(): z.ZodObject>', - 'b: z.lazy(() => BInputSchema())', - 'export function BInputSchema(): z.ZodObject>', - 'c: z.lazy(() => CInputSchema())', - 'export function CInputSchema(): z.ZodObject>', - 'a: z.lazy(() => AInputSchema())', - ], - scalars: undefined, - }, - ], - [ - 'nested input object', - { - textSchema: /* GraphQL */ ` - input NestedInput { - child: NestedInput - childrens: [NestedInput] - } - `, - wantContains: [ - 'export function NestedInputSchema(): z.ZodObject>', - 'child: z.lazy(() => NestedInputSchema().nullish()),', - 'childrens: z.array(z.lazy(() => NestedInputSchema().nullable())).nullish()', - ], - scalars: undefined, - }, - ], - [ - 'enum', - { - textSchema: /* GraphQL */ ` - enum PageType { - PUBLIC - BASIC_AUTH - } - input PageInput { - pageType: PageType! - } - `, - wantContains: [ - 'export const PageTypeSchema = z.nativeEnum(PageType)', - 'export function PageInputSchema(): z.ZodObject>', - 'pageType: PageTypeSchema', - ], - scalars: undefined, - }, - ], - [ - 'camelcase', - { - textSchema: /* GraphQL */ ` - input HTTPInput { - method: HTTPMethod - url: URL! - } - - enum HTTPMethod { - GET - POST - } - - scalar URL # unknown scalar, should be any (definedNonNullAnySchema) - `, - wantContains: [ - 'export function HttpInputSchema(): z.ZodObject>', - 'export const HttpMethodSchema = z.nativeEnum(HttpMethod)', - 'method: HttpMethodSchema', - 'url: definedNonNullAnySchema', - ], - scalars: undefined, - }, - ], - ])('%s', async (_, { textSchema, wantContains, scalars }) => { - const schema = buildSchema(textSchema); - const result = await plugin(schema, [], { schema: 'zod', scalars }, {}); - expect(result.prepend).toContain("import { z } from 'zod'"); - - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('with scalars', async () => { - const schema = buildSchema(/* GraphQL */ ` - input Say { - phrase: Text! - times: Count! - } - - scalar Count - scalar Text - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - scalars: { - Text: 'string', - Count: 'number', - }, - }, - {} - ); - expect(result.content).toContain('phrase: z.string()'); - expect(result.content).toContain('times: z.number()'); - }); - - it('with importFrom', async () => { - const schema = buildSchema(/* GraphQL */ ` - input Say { - phrase: String! - } - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - importFrom: './types', - }, - {} - ); - expect(result.prepend).toContain("import { Say } from './types'"); - expect(result.content).toContain('phrase: z.string()'); - }); - - it('with importFrom & useTypeImports', async () => { - const schema = buildSchema(/* GraphQL */ ` - input Say { - phrase: String! - } - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - importFrom: './types', - useTypeImports: true, - }, - {} - ); - expect(result.prepend).toContain("import type { Say } from './types'"); - expect(result.content).toContain('phrase: z.string()'); - }); - - it('with enumsAsTypes', async () => { - const schema = buildSchema(/* GraphQL */ ` - enum PageType { - PUBLIC - BASIC_AUTH - } - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - enumsAsTypes: true, - }, - {} - ); - expect(result.content).toContain("export const PageTypeSchema = z.enum(['PUBLIC', 'BASIC_AUTH'])"); - }); - - it('with notAllowEmptyString', async () => { - const schema = buildSchema(/* GraphQL */ ` - input PrimitiveInput { - a: ID! - b: String! - c: Boolean! - d: Int! - e: Float! - } - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - notAllowEmptyString: true, - scalars: { - ID: 'string', - }, - }, - {} - ); - const wantContains = [ - 'export function PrimitiveInputSchema(): z.ZodObject>', - 'a: z.string().min(1),', - 'b: z.string().min(1),', - 'c: z.boolean(),', - 'd: z.number(),', - 'e: z.number()', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('with notAllowEmptyString issue #386', async () => { - const schema = buildSchema(/* GraphQL */ ` - input InputOne { - field: InputNested! - } - - input InputNested { - field: String! - } - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - notAllowEmptyString: true, - scalars: { - ID: 'string', - }, - }, - {} - ); - const wantContain = dedent` - export function InputNestedSchema(): z.ZodObject> { - return z.object({ - field: z.string().min(1) - }) - }`; - expect(result.content).toContain(wantContain); - }); - - it('with scalarSchemas', async () => { - const schema = buildSchema(/* GraphQL */ ` - input ScalarsInput { - date: Date! - email: Email - str: String! - } - scalar Date - scalar Email - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - scalarSchemas: { - Date: 'z.date()', - Email: 'z.string().email()', - }, - }, - {} - ); - const wantContains = [ - 'export function ScalarsInputSchema(): z.ZodObject>', - 'date: z.date(),', - 'email: z.string().email().nullish(),', - 'str: z.string()', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('with typesPrefix', async () => { - const schema = buildSchema(/* GraphQL */ ` - input Say { - phrase: String! - } - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - typesPrefix: 'I', - importFrom: './types', - }, - {} - ); - expect(result.prepend).toContain("import { ISay } from './types'"); - expect(result.content).toContain('export function ISaySchema(): z.ZodObject> {'); - }); - - it('with typesSuffix', async () => { - const schema = buildSchema(/* GraphQL */ ` - input Say { - phrase: String! - } - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - typesSuffix: 'I', - importFrom: './types', - }, - {} - ); - expect(result.prepend).toContain("import { SayI } from './types'"); - expect(result.content).toContain('export function SayISchema(): z.ZodObject> {'); - }); - - describe('issues #19', () => { - it('string field', async () => { - const schema = buildSchema(/* GraphQL */ ` - input UserCreateInput { - profile: String @constraint(minLength: 1, maxLength: 5000) - } - - directive @constraint(minLength: Int!, maxLength: Int!) on INPUT_FIELD_DEFINITION - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - directives: { - constraint: { - minLength: ['min', '$1', 'Please input more than $1'], - maxLength: ['max', '$1', 'Please input less than $1'], - }, - }, - }, - {} - ); - const wantContains = [ - 'export function UserCreateInputSchema(): z.ZodObject>', - 'profile: z.string().min(1, "Please input more than 1").max(5000, "Please input less than 5000").nullish()', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('not null field', async () => { - const schema = buildSchema(/* GraphQL */ ` - input UserCreateInput { - profile: String! @constraint(minLength: 1, maxLength: 5000) - } - - directive @constraint(minLength: Int!, maxLength: Int!) on INPUT_FIELD_DEFINITION - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - directives: { - constraint: { - minLength: ['min', '$1', 'Please input more than $1'], - maxLength: ['max', '$1', 'Please input less than $1'], - }, - }, - }, - {} - ); - const wantContains = [ - 'export function UserCreateInputSchema(): z.ZodObject>', - 'profile: z.string().min(1, "Please input more than 1").max(5000, "Please input less than 5000")', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('list field', async () => { - const schema = buildSchema(/* GraphQL */ ` - input UserCreateInput { - profile: [String] @constraint(minLength: 1, maxLength: 5000) - } - - directive @constraint(minLength: Int!, maxLength: Int!) on INPUT_FIELD_DEFINITION - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - directives: { - constraint: { - minLength: ['min', '$1', 'Please input more than $1'], - maxLength: ['max', '$1', 'Please input less than $1'], - }, - }, - }, - {} - ); - const wantContains = [ - 'export function UserCreateInputSchema(): z.ZodObject>', - 'profile: z.array(z.string().nullable()).min(1, "Please input more than 1").max(5000, "Please input less than 5000").nullish()', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - }); - - describe('PR #112', () => { - it('with notAllowEmptyString', async () => { - const schema = buildSchema(/* GraphQL */ ` - input UserCreateInput { - profile: String! @constraint(maxLength: 5000) - age: Int! - } - - directive @constraint(maxLength: Int!) on INPUT_FIELD_DEFINITION - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - notAllowEmptyString: true, - directives: { - constraint: { - maxLength: ['max', '$1', 'Please input less than $1'], - }, - }, - }, - {} - ); - const wantContains = [ - 'export function UserCreateInputSchema(): z.ZodObject>', - 'profile: z.string().max(5000, "Please input less than 5000").min(1),', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('without notAllowEmptyString', async () => { - const schema = buildSchema(/* GraphQL */ ` - input UserCreateInput { - profile: String! @constraint(maxLength: 5000) - age: Int! - } - - directive @constraint(maxLength: Int!) on INPUT_FIELD_DEFINITION - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - directives: { - constraint: { - maxLength: ['max', '$1', 'Please input less than $1'], - }, - }, - }, - {} - ); - const wantContains = [ - 'export function UserCreateInputSchema(): z.ZodObject>', - 'profile: z.string().max(5000, "Please input less than 5000"),', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - }); - - describe('with withObjectType', () => { - it('not generate if withObjectType false', async () => { - const schema = buildSchema(/* GraphQL */ ` - type User { - id: ID! - name: String - } - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - }, - {} - ); - expect(result.content).not.toContain('export function UserSchema(): z.ZodObject>'); - }); - - it('generate object type contains object type', async () => { - const schema = buildSchema(/* GraphQL */ ` - type Book { - author: Author - title: String - } - - type Author { - books: [Book] - name: String - } - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - withObjectType: true, - }, - {} - ); - const wantContains = [ - 'export function AuthorSchema(): z.ZodObject> {', - "__typename: z.literal('Author').optional(),", - 'books: z.array(BookSchema().nullable()).nullish(),', - 'name: z.string().nullish()', - - 'export function BookSchema(): z.ZodObject> {', - "__typename: z.literal('Book').optional(),", - 'author: AuthorSchema().nullish(),', - 'title: z.string().nullish()', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - - for (const wantNotContain of ['Query', 'Mutation', 'Subscription']) { - expect(result.content).not.toContain(wantNotContain); - } - }); - - it('generate both input & type', async () => { - const schema = buildSchema(/* GraphQL */ ` - scalar Date - scalar Email - input UserCreateInput { - name: String! - date: Date! - email: Email! - } - input UsernameUpdateInput { - updateInputId: ID! - updateName: String! - } - type User { - id: ID! - name: String - age: Int - email: Email - isMember: Boolean - createdAt: Date! - } - - type Mutation { - _empty: String - } - - type Query { - _empty: String - } - - type Subscription { - _empty: String - } - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - withObjectType: true, - scalarSchemas: { - Date: 'z.date()', - Email: 'z.string().email()', - }, - scalars: { - ID: { - input: 'number', - output: 'string', - }, - }, - }, - {} - ); - const wantContains = [ - // User Create Input - 'export function UserCreateInputSchema(): z.ZodObject> {', - 'name: z.string(),', - 'date: z.date(),', - 'email: z.string().email()', - // Username Update Input - 'export function UsernameUpdateInputSchema(): z.ZodObject> {', - 'updateInputId: z.number(),', - 'updateName: z.string()', - // User - 'export function UserSchema(): z.ZodObject> {', - "__typename: z.literal('User').optional()", - 'id: z.string(),', - 'name: z.string().nullish(),', - 'age: z.number().nullish(),', - 'isMember: z.boolean().nullish(),', - 'email: z.string().email().nullish(),', - 'createdAt: z.date()', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - - for (const wantNotContain of ['Query', 'Mutation', 'Subscription']) { - expect(result.content).not.toContain(wantNotContain); - } - }); - - it('generate union types', async () => { - const schema = buildSchema(/* GraphQL */ ` - type Square { - size: Int - } - type Circle { - radius: Int - } - union Shape = Circle | Square - `); - - const result = await plugin( - schema, - [], - { - schema: 'zod', - withObjectType: true, - }, - {} - ); - - const wantContains = [ - // Shape Schema - 'export function ShapeSchema() {', - 'return z.union([CircleSchema(), SquareSchema()])', - '}', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('generate union types with single element', async () => { - const schema = buildSchema(/* GraphQL */ ` - type Square { - size: Int - } - type Circle { - radius: Int - } - union Shape = Circle | Square - - type Geometry { - shape: Shape - } - `); - - const result = await plugin( - schema, - [], - { - schema: 'zod', - withObjectType: true, - }, - {} - ); - - const wantContains = [ - 'export function GeometrySchema(): z.ZodObject> {', - "__typename: z.literal('Geometry').optional(),", - 'shape: ShapeSchema().nullish()', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('correctly reference generated union types', async () => { - const schema = buildSchema(/* GraphQL */ ` - type Circle { - radius: Int - } - union Shape = Circle - `); - - const result = await plugin( - schema, - [], - { - schema: 'zod', - withObjectType: true, - }, - {} - ); - - const wantContains = [ - // Shape Schema - 'export function ShapeSchema() {', - 'return CircleSchema()', - '}', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('generate enum union types', async () => { - const schema = buildSchema(/* GraphQL */ ` - enum PageType { - PUBLIC - BASIC_AUTH - } - - enum MethodType { - GET - POST - } - - union AnyType = PageType | MethodType - `); - - const result = await plugin( - schema, - [], - { - schema: 'zod', - withObjectType: true, - }, - {} - ); - - const wantContains = [ - 'export function AnyTypeSchema() {', - 'return z.union([PageTypeSchema, MethodTypeSchema])', - '}', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('generate union types with single element, export as const', async () => { - const schema = buildSchema(/* GraphQL */ ` - type Square { - size: Int - } - type Circle { - radius: Int - } - union Shape = Circle | Square - - type Geometry { - shape: Shape - } - `); - - const result = await plugin( - schema, - [], - { - schema: 'zod', - withObjectType: true, - validationSchemaExportType: 'const', - }, - {} - ); - - const wantContains = [ - 'export const GeometrySchema: z.ZodObject> = z.object({', - "__typename: z.literal('Geometry').optional(),", - 'shape: ShapeSchema.nullish()', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('with object arguments', async () => { - const schema = buildSchema(/* GraphQL */ ` - type MyType { - foo(a: String, b: Int!, c: Boolean, d: Float!, e: Text): String - } - scalar Text - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - withObjectType: true, - scalars: { - Text: 'string', - }, - }, - {} - ); - const wantContain = dedent` - export function MyTypeFooArgsSchema(): z.ZodObject> { - return z.object({ - a: z.string().nullish(), - b: z.number(), - c: z.boolean().nullish(), - d: z.number(), - e: z.string().nullish() - }) - }`; - expect(result.content).toContain(wantContain); - }); - }); - - it('properly generates custom directive values', async () => { - const schema = buildSchema(/* GraphQL */ ` - input UserCreateInput { - name: String! @constraint(startsWith: "Sir") - age: Int! @constraint(min: 0, max: 100) - } - directive @constraint(startsWith: String, min: Int, max: Int) on INPUT_FIELD_DEFINITION - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - directives: { - constraint: { - min: 'min', - max: 'max', - startsWith: ['regex', '/^$1/'], - }, - }, - }, - {} - ); - const wantContains = [ - // User Create Input - 'export function UserCreateInputSchema(): z.ZodObject> {', - 'name: z.string().regex(/^Sir/),', - 'age: z.number().min(0).max(100)', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - }); - - it('exports as const instead of func', async () => { - const schema = buildSchema(/* GraphQL */ ` - input Say { - phrase: String! - } - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - validationSchemaExportType: 'const', - }, - {} - ); - expect(result.content).toContain('export const SaySchema: z.ZodObject> = z.object({'); - }); - - it('generate both input & type, export as const', async () => { - const schema = buildSchema(/* GraphQL */ ` - scalar Date - scalar Email - input UserCreateInput { - name: String! - date: Date! - email: Email! - } - type User { - id: ID! - name: String - age: Int - email: Email - isMember: Boolean - createdAt: Date! - } - type Mutation { - _empty: String - } - type Query { - _empty: String - } - type Subscription { - _empty: String - } - `); - const result = await plugin( - schema, - [], - { - schema: 'zod', - withObjectType: true, - scalarSchemas: { - Date: 'z.date()', - Email: 'z.string().email()', - }, - validationSchemaExportType: 'const', - }, - {} - ); - const wantContains = [ - // User Create Input - 'export const UserCreateInputSchema: z.ZodObject> = z.object({', - 'name: z.string(),', - 'date: z.date(),', - 'email: z.string().email()', - // User - 'export const UserSchema: z.ZodObject> = z.object({', - "__typename: z.literal('User').optional()", - 'id: z.string(),', - 'name: z.string().nullish(),', - 'age: z.number().nullish(),', - 'isMember: z.boolean().nullish(),', - 'email: z.string().email().nullish(),', - 'createdAt: z.date()', - ]; - for (const wantContain of wantContains) { - expect(result.content).toContain(wantContain); - } - - for (const wantNotContain of ['Query', 'Mutation', 'Subscription']) { - expect(result.content).not.toContain(wantNotContain); - } - }); - - it('issue #394', async () => { - const schema = buildSchema(/* GraphQL */ ` - enum Test { - A - B - } - - type Query { - _dummy: Test - } - - input QueryInput { - _dummy: Test - } - `); - const query = introspectionFromSchema(schema); - const clientSchema = buildClientSchema(query); - const result = await plugin( - clientSchema, - [], - { - schema: 'zod', - scalars: { - ID: 'string', - }, - }, - {} - ); - const wantContain = dedent` - export function QueryInputSchema(): z.ZodObject> { - return z.object({ - _dummy: TestSchema.nullish() - }) - }`; - expect(result.content).toContain(wantContain); - }); -}); diff --git a/tsconfig.json b/tsconfig.json index 85db1042..a571cb8f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,4 +15,4 @@ "exclude": [ "dist" ] -} \ No newline at end of file +} diff --git a/vitest.config.ts b/vitest.config.ts index e318f5d7..e22f0acb 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -7,7 +7,7 @@ export default defineConfig({ environment: 'node', reporters: ['default'], cache: { dir: 'node_modules/.vitest' }, // default - include: ['tests/*.spec.ts'], + include: ['**/*.spec.ts'], exclude: ['node_modules', 'dist', 'example', '.idea', '.git', '.cache', '.github'], server: { deps: {