From 22116930401c4649d6f72e3356a696ff5e31c20c Mon Sep 17 00:00:00 2001 From: arjunyel Date: Fri, 6 Oct 2023 20:47:48 -0500 Subject: [PATCH] feat(adapters): add Hasura adapter (#5707) * feat(adapters): add Hasura adapter * chore: formatting * chore: formatting * chore: formatting * chore: formatting * Merge branch 'main' into hasura-adapter * feat(adapter): add Hasura adapter * chore: update Hasura adapter readme * chore(docs): add Hasura * feat(adapter): move Hasura codegen to script * feat(adapter): remove docker from Hasura build * chore: resolve conflict * fix test * fix test --------- Co-authored-by: Thang Vu --- .github/ISSUE_TEMPLATE/3_bug_adapter.yml | 1 + .github/pr-labeler.yml | 1 + .github/workflows/release.yml | 2 + docs/docs/reference/adapters/index.md | 4 + docs/docusaurus.config.js | 1 + docs/sidebars.js | 1 + docs/static/img/adapters/hasura.svg | 1 + packages/adapter-hasura/README.md | 32 + packages/adapter-hasura/codegen.ts | 28 + packages/adapter-hasura/docker-compose.yml | 38 + packages/adapter-hasura/hasura.svg | 17 + packages/adapter-hasura/hasura/config.yaml | 6 + .../hasura/metadata/actions.graphql | 0 .../hasura/metadata/actions.yaml | 6 + .../hasura/metadata/allow_list.yaml | 1 + .../hasura/metadata/api_limits.yaml | 1 + .../hasura/metadata/cron_triggers.yaml | 1 + .../hasura/metadata/databases/databases.yaml | 11 + .../default/tables/public_accounts.yaml | 7 + .../default/tables/public_provider_type.yaml | 4 + .../default/tables/public_sessions.yaml | 7 + .../default/tables/public_users.yaml | 18 + .../tables/public_verification_tokens.yaml | 3 + .../databases/default/tables/tables.yaml | 5 + .../graphql_schema_introspection.yaml | 1 + .../hasura/metadata/inherited_roles.yaml | 1 + .../hasura/metadata/network.yaml | 1 + .../hasura/metadata/query_collections.yaml | 1 + .../hasura/metadata/remote_schemas.yaml | 1 + .../hasura/metadata/rest_endpoints.yaml | 1 + .../hasura/metadata/version.yaml | 1 + .../1666885939998_init_nextauth_models/up.sql | 68 + packages/adapter-hasura/package.json | 68 + packages/adapter-hasura/schema.graphql | 2291 ++++++++++++++++ packages/adapter-hasura/src/index.ts | 493 ++++ packages/adapter-hasura/src/lib/.gitignore | 2 + .../src/queries/account.graphql | 29 + .../adapter-hasura/src/queries/delete.graphql | 14 + .../src/queries/fragments.graphql | 35 + .../src/queries/session.graphql | 39 + .../adapter-hasura/src/queries/user.graphql | 29 + .../src/queries/verification-token.graphql | 23 + packages/adapter-hasura/src/utils.ts | 47 + packages/adapter-hasura/tests/index.test.ts | 110 + packages/adapter-hasura/tests/test.sh | 14 + packages/adapter-hasura/tsconfig.json | 21 + pnpm-lock.yaml | 2318 ++++++++++++++++- turbo.json | 2 + 48 files changed, 5789 insertions(+), 17 deletions(-) create mode 100644 docs/static/img/adapters/hasura.svg create mode 100644 packages/adapter-hasura/README.md create mode 100644 packages/adapter-hasura/codegen.ts create mode 100644 packages/adapter-hasura/docker-compose.yml create mode 100644 packages/adapter-hasura/hasura.svg create mode 100644 packages/adapter-hasura/hasura/config.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/actions.graphql create mode 100644 packages/adapter-hasura/hasura/metadata/actions.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/allow_list.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/api_limits.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/cron_triggers.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/databases/databases.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/databases/default/tables/public_accounts.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/databases/default/tables/public_provider_type.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/databases/default/tables/public_sessions.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/databases/default/tables/public_users.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/databases/default/tables/public_verification_tokens.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/databases/default/tables/tables.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/graphql_schema_introspection.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/inherited_roles.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/network.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/query_collections.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/remote_schemas.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/rest_endpoints.yaml create mode 100644 packages/adapter-hasura/hasura/metadata/version.yaml create mode 100644 packages/adapter-hasura/hasura/migrations/default/1666885939998_init_nextauth_models/up.sql create mode 100644 packages/adapter-hasura/package.json create mode 100644 packages/adapter-hasura/schema.graphql create mode 100644 packages/adapter-hasura/src/index.ts create mode 100644 packages/adapter-hasura/src/lib/.gitignore create mode 100644 packages/adapter-hasura/src/queries/account.graphql create mode 100644 packages/adapter-hasura/src/queries/delete.graphql create mode 100644 packages/adapter-hasura/src/queries/fragments.graphql create mode 100644 packages/adapter-hasura/src/queries/session.graphql create mode 100644 packages/adapter-hasura/src/queries/user.graphql create mode 100644 packages/adapter-hasura/src/queries/verification-token.graphql create mode 100644 packages/adapter-hasura/src/utils.ts create mode 100644 packages/adapter-hasura/tests/index.test.ts create mode 100755 packages/adapter-hasura/tests/test.sh create mode 100644 packages/adapter-hasura/tsconfig.json diff --git a/.github/ISSUE_TEMPLATE/3_bug_adapter.yml b/.github/ISSUE_TEMPLATE/3_bug_adapter.yml index 5d4d9f3e..9d9bdb79 100644 --- a/.github/ISSUE_TEMPLATE/3_bug_adapter.yml +++ b/.github/ISSUE_TEMPLATE/3_bug_adapter.yml @@ -29,6 +29,7 @@ body: - "@auth/dynamodb-adapter" - "@auth/fauna-adapter" - "@auth/firebase-adapter" + - "@auth/hasura-adapter" - "@auth/kysely-adapter" - "@auth/mikro-orm-adapter" - "@auth/mongodb-adapter" diff --git a/.github/pr-labeler.yml b/.github/pr-labeler.yml index b10ed118..a25f7b87 100644 --- a/.github/pr-labeler.yml +++ b/.github/pr-labeler.yml @@ -11,6 +11,7 @@ dynamodb: ["packages/adapter-dynamodb/**/*"] examples: ["apps/examples/**/*"] fauna: ["packages/adapter-fauna/**/*"] firebase: ["packages/adapter-firebase/**/*"] +hasura: ["packages/adapter-hasura/**/*"] frameworks: ["packages/frameworks-*/**/*"] legacy: ["packages/next-auth/**/*"] mikro-orm: ["packages/adapter-mikro-orm/**/*"] diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e0e09f70..901209d1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,6 +21,7 @@ on: - "@auth/dynamodb-adapter" - "@auth/fauna-adapter" - "@auth/firebase-adapter" + - "@auth/hasura-adapter" - "@auth/mikro-orm-adapter" - "@auth/mongodb-adapter" - "@auth/neo4j-adapter" @@ -45,6 +46,7 @@ on: - "adapter-dynamodb" - "adapter-fauna" - "adapter-firebase" + - "adapter-hasura" - "adapter-mikro-orm" - "adapter-mongodb" - "adapter-neo4j" diff --git a/docs/docs/reference/adapters/index.md b/docs/docs/reference/adapters/index.md index bf21dee9..f7d1a1eb 100644 --- a/docs/docs/reference/adapters/index.md +++ b/docs/docs/reference/adapters/index.md @@ -37,6 +37,10 @@ Using an Auth.js / NextAuth.js adapter you can connect to any database service o

Firebase Adapter

+ + +

Hasura Adapter

+

Kysely Adapter

diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index ca09d8ea..82b30121 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -284,6 +284,7 @@ const docusaurusConfig = { typedocAdapter("DynamoDB"), typedocAdapter("Fauna"), typedocAdapter("Firebase"), + typedocAdapter("Hasura"), typedocAdapter("Kysely"), typedocAdapter("Mikro ORM"), typedocAdapter("MongoDB"), diff --git a/docs/sidebars.js b/docs/sidebars.js index c486a3d6..65d6daf0 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -55,6 +55,7 @@ module.exports = { { type: "doc", id: "reference/adapter/dynamodb/index" }, { type: "doc", id: "reference/adapter/fauna/index" }, { type: "doc", id: "reference/adapter/firebase/index" }, + { type: "doc", id: "reference/adapter/hasura/index" }, { type: "doc", id: "reference/adapter/kysely/index" }, { type: "doc", id: "reference/adapter/mikro-orm/index" }, { type: "doc", id: "reference/adapter/mongodb/index" }, diff --git a/docs/static/img/adapters/hasura.svg b/docs/static/img/adapters/hasura.svg new file mode 100644 index 00000000..feb480c0 --- /dev/null +++ b/docs/static/img/adapters/hasura.svg @@ -0,0 +1 @@ +Hasura \ No newline at end of file diff --git a/packages/adapter-hasura/README.md b/packages/adapter-hasura/README.md new file mode 100644 index 00000000..7dd93dae --- /dev/null +++ b/packages/adapter-hasura/README.md @@ -0,0 +1,32 @@ +

+
+
+ + + + + +

Hasura Adapter - NextAuth.js / Auth.js

+

+ + TypeScript + + + npm + + + Downloads + + + Github Stars + +

+

+ +--- + +Check out the documentation at [authjs.dev](https://authjs.dev/reference/adapter/hasura). + +## Credit + +Based on code from [Amruth Pillai](https://github.com/AmruthPillai) diff --git a/packages/adapter-hasura/codegen.ts b/packages/adapter-hasura/codegen.ts new file mode 100644 index 00000000..8423a39b --- /dev/null +++ b/packages/adapter-hasura/codegen.ts @@ -0,0 +1,28 @@ +import type { CodegenConfig } from "@graphql-codegen/cli" + +const config: CodegenConfig = { + overwrite: true, + schema: "schema.graphql", + emitLegacyCommonJSImports: false, + documents: "src/**/*.graphql", + generates: { + "src/lib/": { + preset: "client", + config: { + documentMode: "string", + skipTypename: true, + enumsAsTypes: true, + strictScalars: true, + useTypeImports: true, + scalars: { + timestamptz: "string", + uuid: "string", + }, + }, + plugins: [], + }, + }, + hooks: { afterAllFileWrite: ["prettier --write"] }, +} + +export default config diff --git a/packages/adapter-hasura/docker-compose.yml b/packages/adapter-hasura/docker-compose.yml new file mode 100644 index 00000000..b8c585a8 --- /dev/null +++ b/packages/adapter-hasura/docker-compose.yml @@ -0,0 +1,38 @@ +services: + postgres: + image: postgres:16 + volumes: + - db_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 5s + timeout: 5s + retries: 5 + environment: + POSTGRES_PASSWORD: postgrespassword + graphql-engine: + image: hasura/graphql-engine:v2.33.4.cli-migrations-v3 + ports: + - "8080:8080" + depends_on: + postgres: + condition: service_healthy + environment: + ## postgres database to store Hasura metadata + HASURA_GRAPHQL_METADATA_DATABASE_URL: postgres://postgres:postgrespassword@postgres:5432/postgres + ## this env var can be used to add the above postgres database to Hasura as a data source. this can be removed/updated based on your needs + PG_DATABASE_URL: postgres://postgres:postgrespassword@postgres:5432/postgres + ## enable the console served by server + HASURA_GRAPHQL_ENABLE_CONSOLE: "true" # set to "false" to disable console + ## enable debugging mode. It is recommended to disable this in production + HASURA_GRAPHQL_DEV_MODE: "true" + HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log + ## uncomment next line to run console offline (i.e load console assets from server instead of CDN) + # HASURA_GRAPHQL_CONSOLE_ASSETS_DIR: /srv/console-assets + ## uncomment next line to set an admin secret + HASURA_GRAPHQL_ADMIN_SECRET: myadminsecretkey + volumes: + - ./hasura/migrations:/hasura-migrations + - ./hasura/metadata:/hasura-metadata +volumes: + db_data: diff --git a/packages/adapter-hasura/hasura.svg b/packages/adapter-hasura/hasura.svg new file mode 100644 index 00000000..f466ca98 --- /dev/null +++ b/packages/adapter-hasura/hasura.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/packages/adapter-hasura/hasura/config.yaml b/packages/adapter-hasura/hasura/config.yaml new file mode 100644 index 00000000..725c8005 --- /dev/null +++ b/packages/adapter-hasura/hasura/config.yaml @@ -0,0 +1,6 @@ +version: 3 +endpoint: http://localhost:8080 +metadata_directory: metadata +actions: + kind: synchronous + handler_webhook_baseurl: http://localhost:3000 diff --git a/packages/adapter-hasura/hasura/metadata/actions.graphql b/packages/adapter-hasura/hasura/metadata/actions.graphql new file mode 100644 index 00000000..e69de29b diff --git a/packages/adapter-hasura/hasura/metadata/actions.yaml b/packages/adapter-hasura/hasura/metadata/actions.yaml new file mode 100644 index 00000000..1edb4c2f --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/actions.yaml @@ -0,0 +1,6 @@ +actions: [] +custom_types: + enums: [] + input_objects: [] + objects: [] + scalars: [] diff --git a/packages/adapter-hasura/hasura/metadata/allow_list.yaml b/packages/adapter-hasura/hasura/metadata/allow_list.yaml new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/allow_list.yaml @@ -0,0 +1 @@ +[] diff --git a/packages/adapter-hasura/hasura/metadata/api_limits.yaml b/packages/adapter-hasura/hasura/metadata/api_limits.yaml new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/api_limits.yaml @@ -0,0 +1 @@ +{} diff --git a/packages/adapter-hasura/hasura/metadata/cron_triggers.yaml b/packages/adapter-hasura/hasura/metadata/cron_triggers.yaml new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/cron_triggers.yaml @@ -0,0 +1 @@ +[] diff --git a/packages/adapter-hasura/hasura/metadata/databases/databases.yaml b/packages/adapter-hasura/hasura/metadata/databases/databases.yaml new file mode 100644 index 00000000..c24cbbf0 --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/databases/databases.yaml @@ -0,0 +1,11 @@ +- name: default + kind: postgres + configuration: + connection_info: + database_url: + from_env: PG_DATABASE_URL + isolation_level: read-committed + use_prepared_statements: false + customization: + naming_convention: hasura-default + tables: "!include default/tables/tables.yaml" diff --git a/packages/adapter-hasura/hasura/metadata/databases/default/tables/public_accounts.yaml b/packages/adapter-hasura/hasura/metadata/databases/default/tables/public_accounts.yaml new file mode 100644 index 00000000..fb3261e7 --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/databases/default/tables/public_accounts.yaml @@ -0,0 +1,7 @@ +table: + name: accounts + schema: public +object_relationships: + - name: user + using: + foreign_key_constraint_on: userId diff --git a/packages/adapter-hasura/hasura/metadata/databases/default/tables/public_provider_type.yaml b/packages/adapter-hasura/hasura/metadata/databases/default/tables/public_provider_type.yaml new file mode 100644 index 00000000..f2175b41 --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/databases/default/tables/public_provider_type.yaml @@ -0,0 +1,4 @@ +table: + name: provider_type + schema: public +is_enum: true diff --git a/packages/adapter-hasura/hasura/metadata/databases/default/tables/public_sessions.yaml b/packages/adapter-hasura/hasura/metadata/databases/default/tables/public_sessions.yaml new file mode 100644 index 00000000..4b46fe35 --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/databases/default/tables/public_sessions.yaml @@ -0,0 +1,7 @@ +table: + name: sessions + schema: public +object_relationships: + - name: user + using: + foreign_key_constraint_on: userId diff --git a/packages/adapter-hasura/hasura/metadata/databases/default/tables/public_users.yaml b/packages/adapter-hasura/hasura/metadata/databases/default/tables/public_users.yaml new file mode 100644 index 00000000..8a1cbeee --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/databases/default/tables/public_users.yaml @@ -0,0 +1,18 @@ +table: + name: users + schema: public +array_relationships: + - name: accounts + using: + foreign_key_constraint_on: + column: userId + table: + name: accounts + schema: public + - name: sessions + using: + foreign_key_constraint_on: + column: userId + table: + name: sessions + schema: public diff --git a/packages/adapter-hasura/hasura/metadata/databases/default/tables/public_verification_tokens.yaml b/packages/adapter-hasura/hasura/metadata/databases/default/tables/public_verification_tokens.yaml new file mode 100644 index 00000000..68c18ed6 --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/databases/default/tables/public_verification_tokens.yaml @@ -0,0 +1,3 @@ +table: + name: verification_tokens + schema: public diff --git a/packages/adapter-hasura/hasura/metadata/databases/default/tables/tables.yaml b/packages/adapter-hasura/hasura/metadata/databases/default/tables/tables.yaml new file mode 100644 index 00000000..c9c239fe --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/databases/default/tables/tables.yaml @@ -0,0 +1,5 @@ +- "!include public_accounts.yaml" +- "!include public_provider_type.yaml" +- "!include public_sessions.yaml" +- "!include public_users.yaml" +- "!include public_verification_tokens.yaml" diff --git a/packages/adapter-hasura/hasura/metadata/graphql_schema_introspection.yaml b/packages/adapter-hasura/hasura/metadata/graphql_schema_introspection.yaml new file mode 100644 index 00000000..61a4dcac --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/graphql_schema_introspection.yaml @@ -0,0 +1 @@ +disabled_for_roles: [] diff --git a/packages/adapter-hasura/hasura/metadata/inherited_roles.yaml b/packages/adapter-hasura/hasura/metadata/inherited_roles.yaml new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/inherited_roles.yaml @@ -0,0 +1 @@ +[] diff --git a/packages/adapter-hasura/hasura/metadata/network.yaml b/packages/adapter-hasura/hasura/metadata/network.yaml new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/network.yaml @@ -0,0 +1 @@ +{} diff --git a/packages/adapter-hasura/hasura/metadata/query_collections.yaml b/packages/adapter-hasura/hasura/metadata/query_collections.yaml new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/query_collections.yaml @@ -0,0 +1 @@ +[] diff --git a/packages/adapter-hasura/hasura/metadata/remote_schemas.yaml b/packages/adapter-hasura/hasura/metadata/remote_schemas.yaml new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/remote_schemas.yaml @@ -0,0 +1 @@ +[] diff --git a/packages/adapter-hasura/hasura/metadata/rest_endpoints.yaml b/packages/adapter-hasura/hasura/metadata/rest_endpoints.yaml new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/rest_endpoints.yaml @@ -0,0 +1 @@ +[] diff --git a/packages/adapter-hasura/hasura/metadata/version.yaml b/packages/adapter-hasura/hasura/metadata/version.yaml new file mode 100644 index 00000000..0a70affa --- /dev/null +++ b/packages/adapter-hasura/hasura/metadata/version.yaml @@ -0,0 +1 @@ +version: 3 diff --git a/packages/adapter-hasura/hasura/migrations/default/1666885939998_init_nextauth_models/up.sql b/packages/adapter-hasura/hasura/migrations/default/1666885939998_init_nextauth_models/up.sql new file mode 100644 index 00000000..c8a3c482 --- /dev/null +++ b/packages/adapter-hasura/hasura/migrations/default/1666885939998_init_nextauth_models/up.sql @@ -0,0 +1,68 @@ +CREATE TABLE accounts ( + id uuid DEFAULT gen_random_uuid() NOT NULL, + type text NOT NULL, + provider text NOT NULL, + "providerAccountId" text NOT NULL, + refresh_token text, + access_token text, + expires_at integer, + token_type text, + scope text, + id_token text, + session_state text, + "userId" uuid NOT NULL +); + +CREATE TABLE sessions ( + id uuid DEFAULT gen_random_uuid() NOT NULL, + "sessionToken" text NOT NULL, + "userId" uuid NOT NULL, + expires timestamptz NOT NULL +); + +CREATE TABLE users ( + id uuid DEFAULT gen_random_uuid() NOT NULL, + name text, + email text NOT NULL, + "emailVerified" timestamptz, + image text +); + +CREATE TABLE verification_tokens ( + token text NOT NULL, + identifier text NOT NULL, + expires timestamptz NOT NULL +); + +CREATE TABLE provider_type ( + value text NOT NULL +); + +ALTER TABLE ONLY accounts + ADD CONSTRAINT accounts_pkey PRIMARY KEY (id); + +ALTER TABLE ONLY sessions + ADD CONSTRAINT sessions_pkey PRIMARY KEY ("sessionToken"); + +ALTER TABLE ONLY users + ADD CONSTRAINT users_email_key UNIQUE (email); + +ALTER TABLE ONLY users + ADD CONSTRAINT users_pkey PRIMARY KEY (id); + +ALTER TABLE ONLY verification_tokens + ADD CONSTRAINT verification_tokens_pkey PRIMARY KEY (token); + +ALTER TABLE ONLY provider_type + ADD CONSTRAINT provider_type_pkey PRIMARY KEY (value); + +ALTER TABLE ONLY accounts + ADD CONSTRAINT "accounts_userId_fkey" FOREIGN KEY ("userId") REFERENCES public.users(id) ON UPDATE RESTRICT ON DELETE CASCADE; + +ALTER TABLE ONLY sessions + ADD CONSTRAINT "sessions_userId_fkey" FOREIGN KEY ("userId") REFERENCES public.users(id) ON UPDATE RESTRICT ON DELETE CASCADE; + +INSERT INTO provider_type (value) VALUES ('credentials'), ('email'), ('oauth'), ('oidc'); + +ALTER TABLE ONLY accounts + ADD CONSTRAINT "accounts_type_fkey" FOREIGN KEY ("type") REFERENCES public.provider_type(value) ON UPDATE RESTRICT ON DELETE RESTRICT; diff --git a/packages/adapter-hasura/package.json b/packages/adapter-hasura/package.json new file mode 100644 index 00000000..a5a750ae --- /dev/null +++ b/packages/adapter-hasura/package.json @@ -0,0 +1,68 @@ +{ + "name": "@auth/hasura-adapter", + "version": "0.1.0", + "description": "Hasura adapter for Auth.js.", + "homepage": "https://authjs.dev", + "repository": "https://github.com/nextauthjs/next-auth", + "bugs": { + "url": "https://github.com/nextauthjs/next-auth/issues" + }, + "contributors": [ + "Hasura Team", + "Amruth Pillai ", + "Arjun Yelamanchili" + ], + "license": "ISC", + "keywords": [ + "@auth", + "authjs", + "Auth.js", + "next-auth", + "next.js", + "oauth", + "hasura" + ], + "type": "module", + "types": "./index.d.ts", + "files": [ + "*.js", + "*.d.ts*", + "lib", + "src" + ], + "exports": { + ".": { + "types": "./index.d.ts", + "import": "./index.js" + } + }, + "private": false, + "publishConfig": { + "access": "public" + }, + "scripts": { + "test": "./tests/test.sh", + "build": "graphql-codegen-esm --config codegen.ts && tsc" + }, + "peerDependencies": { + "graphql": "^16", + "graphql-request": "^6" + }, + "dependencies": { + "@auth/core": "workspace:*" + }, + "devDependencies": { + "@auth/adapter-test": "workspace:*", + "@auth/tsconfig": "workspace:*", + "@graphql-codegen/cli": "^5.0.0", + "@graphql-codegen/client-preset": "^4.1.0", + "@graphql-typed-document-node/core": "^3.2.0", + "graphql": "^16.8.1", + "graphql-request": "^6.1.0", + "jest": "^29.7.0", + "typescript": "^5.2.2" + }, + "jest": { + "preset": "@auth/adapter-test/jest" + } +} diff --git a/packages/adapter-hasura/schema.graphql b/packages/adapter-hasura/schema.graphql new file mode 100644 index 00000000..849974b7 --- /dev/null +++ b/packages/adapter-hasura/schema.graphql @@ -0,0 +1,2291 @@ +schema { + query: query_root + mutation: mutation_root + subscription: subscription_root +} + +"""whether this query should be cached (Hasura Cloud only)""" +directive @cached( + """measured in seconds""" + ttl: Int! = 60 + + """refresh the cache entry""" + refresh: Boolean! = false +) on QUERY + +""" +Boolean expression to compare columns of type "Int". All fields are combined with logical 'AND'. +""" +input Int_comparison_exp { + _eq: Int + _gt: Int + _gte: Int + _in: [Int!] + _is_null: Boolean + _lt: Int + _lte: Int + _neq: Int + _nin: [Int!] +} + +""" +Boolean expression to compare columns of type "String". All fields are combined with logical 'AND'. +""" +input String_comparison_exp { + _eq: String + _gt: String + _gte: String + + """does the column match the given case-insensitive pattern""" + _ilike: String + _in: [String!] + + """ + does the column match the given POSIX regular expression, case insensitive + """ + _iregex: String + _is_null: Boolean + + """does the column match the given pattern""" + _like: String + _lt: String + _lte: String + _neq: String + + """does the column NOT match the given case-insensitive pattern""" + _nilike: String + _nin: [String!] + + """ + does the column NOT match the given POSIX regular expression, case insensitive + """ + _niregex: String + + """does the column NOT match the given pattern""" + _nlike: String + + """ + does the column NOT match the given POSIX regular expression, case sensitive + """ + _nregex: String + + """does the column NOT match the given SQL regular expression""" + _nsimilar: String + + """ + does the column match the given POSIX regular expression, case sensitive + """ + _regex: String + + """does the column match the given SQL regular expression""" + _similar: String +} + +""" +columns and relationships of "accounts" +""" +type accounts { + access_token: String + expires_at: Int + id: uuid! + id_token: String + provider: String! + providerAccountId: String! + refresh_token: String + scope: String + session_state: String + token_type: String + type: provider_type_enum! + + """An object relationship""" + user: users! + userId: uuid! +} + +""" +aggregated selection of "accounts" +""" +type accounts_aggregate { + aggregate: accounts_aggregate_fields + nodes: [accounts!]! +} + +input accounts_aggregate_bool_exp { + count: accounts_aggregate_bool_exp_count +} + +input accounts_aggregate_bool_exp_count { + arguments: [accounts_select_column!] + distinct: Boolean + filter: accounts_bool_exp + predicate: Int_comparison_exp! +} + +""" +aggregate fields of "accounts" +""" +type accounts_aggregate_fields { + avg: accounts_avg_fields + count(columns: [accounts_select_column!], distinct: Boolean): Int! + max: accounts_max_fields + min: accounts_min_fields + stddev: accounts_stddev_fields + stddev_pop: accounts_stddev_pop_fields + stddev_samp: accounts_stddev_samp_fields + sum: accounts_sum_fields + var_pop: accounts_var_pop_fields + var_samp: accounts_var_samp_fields + variance: accounts_variance_fields +} + +""" +order by aggregate values of table "accounts" +""" +input accounts_aggregate_order_by { + avg: accounts_avg_order_by + count: order_by + max: accounts_max_order_by + min: accounts_min_order_by + stddev: accounts_stddev_order_by + stddev_pop: accounts_stddev_pop_order_by + stddev_samp: accounts_stddev_samp_order_by + sum: accounts_sum_order_by + var_pop: accounts_var_pop_order_by + var_samp: accounts_var_samp_order_by + variance: accounts_variance_order_by +} + +""" +input type for inserting array relation for remote table "accounts" +""" +input accounts_arr_rel_insert_input { + data: [accounts_insert_input!]! + + """upsert condition""" + on_conflict: accounts_on_conflict +} + +"""aggregate avg on columns""" +type accounts_avg_fields { + expires_at: Float +} + +""" +order by avg() on columns of table "accounts" +""" +input accounts_avg_order_by { + expires_at: order_by +} + +""" +Boolean expression to filter rows from the table "accounts". All fields are combined with a logical 'AND'. +""" +input accounts_bool_exp { + _and: [accounts_bool_exp!] + _not: accounts_bool_exp + _or: [accounts_bool_exp!] + access_token: String_comparison_exp + expires_at: Int_comparison_exp + id: uuid_comparison_exp + id_token: String_comparison_exp + provider: String_comparison_exp + providerAccountId: String_comparison_exp + refresh_token: String_comparison_exp + scope: String_comparison_exp + session_state: String_comparison_exp + token_type: String_comparison_exp + type: provider_type_enum_comparison_exp + user: users_bool_exp + userId: uuid_comparison_exp +} + +""" +unique or primary key constraints on table "accounts" +""" +enum accounts_constraint { + """ + unique or primary key constraint on columns "id" + """ + accounts_pkey +} + +""" +input type for incrementing numeric columns in table "accounts" +""" +input accounts_inc_input { + expires_at: Int +} + +""" +input type for inserting data into table "accounts" +""" +input accounts_insert_input { + access_token: String + expires_at: Int + id: uuid + id_token: String + provider: String + providerAccountId: String + refresh_token: String + scope: String + session_state: String + token_type: String + type: provider_type_enum + user: users_obj_rel_insert_input + userId: uuid +} + +"""aggregate max on columns""" +type accounts_max_fields { + access_token: String + expires_at: Int + id: uuid + id_token: String + provider: String + providerAccountId: String + refresh_token: String + scope: String + session_state: String + token_type: String + userId: uuid +} + +""" +order by max() on columns of table "accounts" +""" +input accounts_max_order_by { + access_token: order_by + expires_at: order_by + id: order_by + id_token: order_by + provider: order_by + providerAccountId: order_by + refresh_token: order_by + scope: order_by + session_state: order_by + token_type: order_by + userId: order_by +} + +"""aggregate min on columns""" +type accounts_min_fields { + access_token: String + expires_at: Int + id: uuid + id_token: String + provider: String + providerAccountId: String + refresh_token: String + scope: String + session_state: String + token_type: String + userId: uuid +} + +""" +order by min() on columns of table "accounts" +""" +input accounts_min_order_by { + access_token: order_by + expires_at: order_by + id: order_by + id_token: order_by + provider: order_by + providerAccountId: order_by + refresh_token: order_by + scope: order_by + session_state: order_by + token_type: order_by + userId: order_by +} + +""" +response of any mutation on the table "accounts" +""" +type accounts_mutation_response { + """number of rows affected by the mutation""" + affected_rows: Int! + + """data from the rows affected by the mutation""" + returning: [accounts!]! +} + +""" +on_conflict condition type for table "accounts" +""" +input accounts_on_conflict { + constraint: accounts_constraint! + update_columns: [accounts_update_column!]! = [] + where: accounts_bool_exp +} + +"""Ordering options when selecting data from "accounts".""" +input accounts_order_by { + access_token: order_by + expires_at: order_by + id: order_by + id_token: order_by + provider: order_by + providerAccountId: order_by + refresh_token: order_by + scope: order_by + session_state: order_by + token_type: order_by + type: order_by + user: users_order_by + userId: order_by +} + +"""primary key columns input for table: accounts""" +input accounts_pk_columns_input { + id: uuid! +} + +""" +select columns of table "accounts" +""" +enum accounts_select_column { + """column name""" + access_token + + """column name""" + expires_at + + """column name""" + id + + """column name""" + id_token + + """column name""" + provider + + """column name""" + providerAccountId + + """column name""" + refresh_token + + """column name""" + scope + + """column name""" + session_state + + """column name""" + token_type + + """column name""" + type + + """column name""" + userId +} + +""" +input type for updating data in table "accounts" +""" +input accounts_set_input { + access_token: String + expires_at: Int + id: uuid + id_token: String + provider: String + providerAccountId: String + refresh_token: String + scope: String + session_state: String + token_type: String + type: provider_type_enum + userId: uuid +} + +"""aggregate stddev on columns""" +type accounts_stddev_fields { + expires_at: Float +} + +""" +order by stddev() on columns of table "accounts" +""" +input accounts_stddev_order_by { + expires_at: order_by +} + +"""aggregate stddev_pop on columns""" +type accounts_stddev_pop_fields { + expires_at: Float +} + +""" +order by stddev_pop() on columns of table "accounts" +""" +input accounts_stddev_pop_order_by { + expires_at: order_by +} + +"""aggregate stddev_samp on columns""" +type accounts_stddev_samp_fields { + expires_at: Float +} + +""" +order by stddev_samp() on columns of table "accounts" +""" +input accounts_stddev_samp_order_by { + expires_at: order_by +} + +""" +Streaming cursor of the table "accounts" +""" +input accounts_stream_cursor_input { + """Stream column input with initial value""" + initial_value: accounts_stream_cursor_value_input! + + """cursor ordering""" + ordering: cursor_ordering +} + +"""Initial value of the column from where the streaming should start""" +input accounts_stream_cursor_value_input { + access_token: String + expires_at: Int + id: uuid + id_token: String + provider: String + providerAccountId: String + refresh_token: String + scope: String + session_state: String + token_type: String + type: provider_type_enum + userId: uuid +} + +"""aggregate sum on columns""" +type accounts_sum_fields { + expires_at: Int +} + +""" +order by sum() on columns of table "accounts" +""" +input accounts_sum_order_by { + expires_at: order_by +} + +""" +update columns of table "accounts" +""" +enum accounts_update_column { + """column name""" + access_token + + """column name""" + expires_at + + """column name""" + id + + """column name""" + id_token + + """column name""" + provider + + """column name""" + providerAccountId + + """column name""" + refresh_token + + """column name""" + scope + + """column name""" + session_state + + """column name""" + token_type + + """column name""" + type + + """column name""" + userId +} + +input accounts_updates { + """increments the numeric columns with given value of the filtered values""" + _inc: accounts_inc_input + + """sets the columns of the filtered rows to the given values""" + _set: accounts_set_input + + """filter the rows which have to be updated""" + where: accounts_bool_exp! +} + +"""aggregate var_pop on columns""" +type accounts_var_pop_fields { + expires_at: Float +} + +""" +order by var_pop() on columns of table "accounts" +""" +input accounts_var_pop_order_by { + expires_at: order_by +} + +"""aggregate var_samp on columns""" +type accounts_var_samp_fields { + expires_at: Float +} + +""" +order by var_samp() on columns of table "accounts" +""" +input accounts_var_samp_order_by { + expires_at: order_by +} + +"""aggregate variance on columns""" +type accounts_variance_fields { + expires_at: Float +} + +""" +order by variance() on columns of table "accounts" +""" +input accounts_variance_order_by { + expires_at: order_by +} + +"""ordering argument of a cursor""" +enum cursor_ordering { + """ascending ordering of the cursor""" + ASC + + """descending ordering of the cursor""" + DESC +} + +"""mutation root""" +type mutation_root { + """ + delete data from the table: "accounts" + """ + delete_accounts( + """filter the rows which have to be deleted""" + where: accounts_bool_exp! + ): accounts_mutation_response + + """ + delete single row from the table: "accounts" + """ + delete_accounts_by_pk(id: uuid!): accounts + + """ + delete data from the table: "provider_type" + """ + delete_provider_type( + """filter the rows which have to be deleted""" + where: provider_type_bool_exp! + ): provider_type_mutation_response + + """ + delete single row from the table: "provider_type" + """ + delete_provider_type_by_pk(value: String!): provider_type + + """ + delete data from the table: "sessions" + """ + delete_sessions( + """filter the rows which have to be deleted""" + where: sessions_bool_exp! + ): sessions_mutation_response + + """ + delete single row from the table: "sessions" + """ + delete_sessions_by_pk(sessionToken: String!): sessions + + """ + delete data from the table: "users" + """ + delete_users( + """filter the rows which have to be deleted""" + where: users_bool_exp! + ): users_mutation_response + + """ + delete single row from the table: "users" + """ + delete_users_by_pk(id: uuid!): users + + """ + delete data from the table: "verification_tokens" + """ + delete_verification_tokens( + """filter the rows which have to be deleted""" + where: verification_tokens_bool_exp! + ): verification_tokens_mutation_response + + """ + delete single row from the table: "verification_tokens" + """ + delete_verification_tokens_by_pk(token: String!): verification_tokens + + """ + insert data into the table: "accounts" + """ + insert_accounts( + """the rows to be inserted""" + objects: [accounts_insert_input!]! + + """upsert condition""" + on_conflict: accounts_on_conflict + ): accounts_mutation_response + + """ + insert a single row into the table: "accounts" + """ + insert_accounts_one( + """the row to be inserted""" + object: accounts_insert_input! + + """upsert condition""" + on_conflict: accounts_on_conflict + ): accounts + + """ + insert data into the table: "provider_type" + """ + insert_provider_type( + """the rows to be inserted""" + objects: [provider_type_insert_input!]! + + """upsert condition""" + on_conflict: provider_type_on_conflict + ): provider_type_mutation_response + + """ + insert a single row into the table: "provider_type" + """ + insert_provider_type_one( + """the row to be inserted""" + object: provider_type_insert_input! + + """upsert condition""" + on_conflict: provider_type_on_conflict + ): provider_type + + """ + insert data into the table: "sessions" + """ + insert_sessions( + """the rows to be inserted""" + objects: [sessions_insert_input!]! + + """upsert condition""" + on_conflict: sessions_on_conflict + ): sessions_mutation_response + + """ + insert a single row into the table: "sessions" + """ + insert_sessions_one( + """the row to be inserted""" + object: sessions_insert_input! + + """upsert condition""" + on_conflict: sessions_on_conflict + ): sessions + + """ + insert data into the table: "users" + """ + insert_users( + """the rows to be inserted""" + objects: [users_insert_input!]! + + """upsert condition""" + on_conflict: users_on_conflict + ): users_mutation_response + + """ + insert a single row into the table: "users" + """ + insert_users_one( + """the row to be inserted""" + object: users_insert_input! + + """upsert condition""" + on_conflict: users_on_conflict + ): users + + """ + insert data into the table: "verification_tokens" + """ + insert_verification_tokens( + """the rows to be inserted""" + objects: [verification_tokens_insert_input!]! + + """upsert condition""" + on_conflict: verification_tokens_on_conflict + ): verification_tokens_mutation_response + + """ + insert a single row into the table: "verification_tokens" + """ + insert_verification_tokens_one( + """the row to be inserted""" + object: verification_tokens_insert_input! + + """upsert condition""" + on_conflict: verification_tokens_on_conflict + ): verification_tokens + + """ + update data of the table: "accounts" + """ + update_accounts( + """increments the numeric columns with given value of the filtered values""" + _inc: accounts_inc_input + + """sets the columns of the filtered rows to the given values""" + _set: accounts_set_input + + """filter the rows which have to be updated""" + where: accounts_bool_exp! + ): accounts_mutation_response + + """ + update single row of the table: "accounts" + """ + update_accounts_by_pk( + """increments the numeric columns with given value of the filtered values""" + _inc: accounts_inc_input + + """sets the columns of the filtered rows to the given values""" + _set: accounts_set_input + pk_columns: accounts_pk_columns_input! + ): accounts + + """ + update multiples rows of table: "accounts" + """ + update_accounts_many( + """updates to execute, in order""" + updates: [accounts_updates!]! + ): [accounts_mutation_response] + + """ + update data of the table: "provider_type" + """ + update_provider_type( + """sets the columns of the filtered rows to the given values""" + _set: provider_type_set_input + + """filter the rows which have to be updated""" + where: provider_type_bool_exp! + ): provider_type_mutation_response + + """ + update single row of the table: "provider_type" + """ + update_provider_type_by_pk( + """sets the columns of the filtered rows to the given values""" + _set: provider_type_set_input + pk_columns: provider_type_pk_columns_input! + ): provider_type + + """ + update multiples rows of table: "provider_type" + """ + update_provider_type_many( + """updates to execute, in order""" + updates: [provider_type_updates!]! + ): [provider_type_mutation_response] + + """ + update data of the table: "sessions" + """ + update_sessions( + """sets the columns of the filtered rows to the given values""" + _set: sessions_set_input + + """filter the rows which have to be updated""" + where: sessions_bool_exp! + ): sessions_mutation_response + + """ + update single row of the table: "sessions" + """ + update_sessions_by_pk( + """sets the columns of the filtered rows to the given values""" + _set: sessions_set_input + pk_columns: sessions_pk_columns_input! + ): sessions + + """ + update multiples rows of table: "sessions" + """ + update_sessions_many( + """updates to execute, in order""" + updates: [sessions_updates!]! + ): [sessions_mutation_response] + + """ + update data of the table: "users" + """ + update_users( + """sets the columns of the filtered rows to the given values""" + _set: users_set_input + + """filter the rows which have to be updated""" + where: users_bool_exp! + ): users_mutation_response + + """ + update single row of the table: "users" + """ + update_users_by_pk( + """sets the columns of the filtered rows to the given values""" + _set: users_set_input + pk_columns: users_pk_columns_input! + ): users + + """ + update multiples rows of table: "users" + """ + update_users_many( + """updates to execute, in order""" + updates: [users_updates!]! + ): [users_mutation_response] + + """ + update data of the table: "verification_tokens" + """ + update_verification_tokens( + """sets the columns of the filtered rows to the given values""" + _set: verification_tokens_set_input + + """filter the rows which have to be updated""" + where: verification_tokens_bool_exp! + ): verification_tokens_mutation_response + + """ + update single row of the table: "verification_tokens" + """ + update_verification_tokens_by_pk( + """sets the columns of the filtered rows to the given values""" + _set: verification_tokens_set_input + pk_columns: verification_tokens_pk_columns_input! + ): verification_tokens + + """ + update multiples rows of table: "verification_tokens" + """ + update_verification_tokens_many( + """updates to execute, in order""" + updates: [verification_tokens_updates!]! + ): [verification_tokens_mutation_response] +} + +"""column ordering options""" +enum order_by { + """in ascending order, nulls last""" + asc + + """in ascending order, nulls first""" + asc_nulls_first + + """in ascending order, nulls last""" + asc_nulls_last + + """in descending order, nulls first""" + desc + + """in descending order, nulls first""" + desc_nulls_first + + """in descending order, nulls last""" + desc_nulls_last +} + +""" +columns and relationships of "provider_type" +""" +type provider_type { + value: String! +} + +""" +aggregated selection of "provider_type" +""" +type provider_type_aggregate { + aggregate: provider_type_aggregate_fields + nodes: [provider_type!]! +} + +""" +aggregate fields of "provider_type" +""" +type provider_type_aggregate_fields { + count(columns: [provider_type_select_column!], distinct: Boolean): Int! + max: provider_type_max_fields + min: provider_type_min_fields +} + +""" +Boolean expression to filter rows from the table "provider_type". All fields are combined with a logical 'AND'. +""" +input provider_type_bool_exp { + _and: [provider_type_bool_exp!] + _not: provider_type_bool_exp + _or: [provider_type_bool_exp!] + value: String_comparison_exp +} + +""" +unique or primary key constraints on table "provider_type" +""" +enum provider_type_constraint { + """ + unique or primary key constraint on columns "value" + """ + provider_type_pkey +} + +enum provider_type_enum { + credentials + email + oauth + oidc +} + +""" +Boolean expression to compare columns of type "provider_type_enum". All fields are combined with logical 'AND'. +""" +input provider_type_enum_comparison_exp { + _eq: provider_type_enum + _in: [provider_type_enum!] + _is_null: Boolean + _neq: provider_type_enum + _nin: [provider_type_enum!] +} + +""" +input type for inserting data into table "provider_type" +""" +input provider_type_insert_input { + value: String +} + +"""aggregate max on columns""" +type provider_type_max_fields { + value: String +} + +"""aggregate min on columns""" +type provider_type_min_fields { + value: String +} + +""" +response of any mutation on the table "provider_type" +""" +type provider_type_mutation_response { + """number of rows affected by the mutation""" + affected_rows: Int! + + """data from the rows affected by the mutation""" + returning: [provider_type!]! +} + +""" +on_conflict condition type for table "provider_type" +""" +input provider_type_on_conflict { + constraint: provider_type_constraint! + update_columns: [provider_type_update_column!]! = [] + where: provider_type_bool_exp +} + +"""Ordering options when selecting data from "provider_type".""" +input provider_type_order_by { + value: order_by +} + +"""primary key columns input for table: provider_type""" +input provider_type_pk_columns_input { + value: String! +} + +""" +select columns of table "provider_type" +""" +enum provider_type_select_column { + """column name""" + value +} + +""" +input type for updating data in table "provider_type" +""" +input provider_type_set_input { + value: String +} + +""" +Streaming cursor of the table "provider_type" +""" +input provider_type_stream_cursor_input { + """Stream column input with initial value""" + initial_value: provider_type_stream_cursor_value_input! + + """cursor ordering""" + ordering: cursor_ordering +} + +"""Initial value of the column from where the streaming should start""" +input provider_type_stream_cursor_value_input { + value: String +} + +""" +update columns of table "provider_type" +""" +enum provider_type_update_column { + """column name""" + value +} + +input provider_type_updates { + """sets the columns of the filtered rows to the given values""" + _set: provider_type_set_input + + """filter the rows which have to be updated""" + where: provider_type_bool_exp! +} + +type query_root { + """An array relationship""" + accounts( + """distinct select on columns""" + distinct_on: [accounts_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [accounts_order_by!] + + """filter the rows returned""" + where: accounts_bool_exp + ): [accounts!]! + + """An aggregate relationship""" + accounts_aggregate( + """distinct select on columns""" + distinct_on: [accounts_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [accounts_order_by!] + + """filter the rows returned""" + where: accounts_bool_exp + ): accounts_aggregate! + + """fetch data from the table: "accounts" using primary key columns""" + accounts_by_pk(id: uuid!): accounts + + """ + fetch data from the table: "provider_type" + """ + provider_type( + """distinct select on columns""" + distinct_on: [provider_type_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [provider_type_order_by!] + + """filter the rows returned""" + where: provider_type_bool_exp + ): [provider_type!]! + + """ + fetch aggregated fields from the table: "provider_type" + """ + provider_type_aggregate( + """distinct select on columns""" + distinct_on: [provider_type_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [provider_type_order_by!] + + """filter the rows returned""" + where: provider_type_bool_exp + ): provider_type_aggregate! + + """fetch data from the table: "provider_type" using primary key columns""" + provider_type_by_pk(value: String!): provider_type + + """An array relationship""" + sessions( + """distinct select on columns""" + distinct_on: [sessions_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [sessions_order_by!] + + """filter the rows returned""" + where: sessions_bool_exp + ): [sessions!]! + + """An aggregate relationship""" + sessions_aggregate( + """distinct select on columns""" + distinct_on: [sessions_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [sessions_order_by!] + + """filter the rows returned""" + where: sessions_bool_exp + ): sessions_aggregate! + + """fetch data from the table: "sessions" using primary key columns""" + sessions_by_pk(sessionToken: String!): sessions + + """ + fetch data from the table: "users" + """ + users( + """distinct select on columns""" + distinct_on: [users_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [users_order_by!] + + """filter the rows returned""" + where: users_bool_exp + ): [users!]! + + """ + fetch aggregated fields from the table: "users" + """ + users_aggregate( + """distinct select on columns""" + distinct_on: [users_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [users_order_by!] + + """filter the rows returned""" + where: users_bool_exp + ): users_aggregate! + + """fetch data from the table: "users" using primary key columns""" + users_by_pk(id: uuid!): users + + """ + fetch data from the table: "verification_tokens" + """ + verification_tokens( + """distinct select on columns""" + distinct_on: [verification_tokens_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [verification_tokens_order_by!] + + """filter the rows returned""" + where: verification_tokens_bool_exp + ): [verification_tokens!]! + + """ + fetch aggregated fields from the table: "verification_tokens" + """ + verification_tokens_aggregate( + """distinct select on columns""" + distinct_on: [verification_tokens_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [verification_tokens_order_by!] + + """filter the rows returned""" + where: verification_tokens_bool_exp + ): verification_tokens_aggregate! + + """ + fetch data from the table: "verification_tokens" using primary key columns + """ + verification_tokens_by_pk(token: String!): verification_tokens +} + +""" +columns and relationships of "sessions" +""" +type sessions { + expires: timestamptz! + id: uuid! + sessionToken: String! + + """An object relationship""" + user: users! + userId: uuid! +} + +""" +aggregated selection of "sessions" +""" +type sessions_aggregate { + aggregate: sessions_aggregate_fields + nodes: [sessions!]! +} + +input sessions_aggregate_bool_exp { + count: sessions_aggregate_bool_exp_count +} + +input sessions_aggregate_bool_exp_count { + arguments: [sessions_select_column!] + distinct: Boolean + filter: sessions_bool_exp + predicate: Int_comparison_exp! +} + +""" +aggregate fields of "sessions" +""" +type sessions_aggregate_fields { + count(columns: [sessions_select_column!], distinct: Boolean): Int! + max: sessions_max_fields + min: sessions_min_fields +} + +""" +order by aggregate values of table "sessions" +""" +input sessions_aggregate_order_by { + count: order_by + max: sessions_max_order_by + min: sessions_min_order_by +} + +""" +input type for inserting array relation for remote table "sessions" +""" +input sessions_arr_rel_insert_input { + data: [sessions_insert_input!]! + + """upsert condition""" + on_conflict: sessions_on_conflict +} + +""" +Boolean expression to filter rows from the table "sessions". All fields are combined with a logical 'AND'. +""" +input sessions_bool_exp { + _and: [sessions_bool_exp!] + _not: sessions_bool_exp + _or: [sessions_bool_exp!] + expires: timestamptz_comparison_exp + id: uuid_comparison_exp + sessionToken: String_comparison_exp + user: users_bool_exp + userId: uuid_comparison_exp +} + +""" +unique or primary key constraints on table "sessions" +""" +enum sessions_constraint { + """ + unique or primary key constraint on columns "sessionToken" + """ + sessions_pkey +} + +""" +input type for inserting data into table "sessions" +""" +input sessions_insert_input { + expires: timestamptz + id: uuid + sessionToken: String + user: users_obj_rel_insert_input + userId: uuid +} + +"""aggregate max on columns""" +type sessions_max_fields { + expires: timestamptz + id: uuid + sessionToken: String + userId: uuid +} + +""" +order by max() on columns of table "sessions" +""" +input sessions_max_order_by { + expires: order_by + id: order_by + sessionToken: order_by + userId: order_by +} + +"""aggregate min on columns""" +type sessions_min_fields { + expires: timestamptz + id: uuid + sessionToken: String + userId: uuid +} + +""" +order by min() on columns of table "sessions" +""" +input sessions_min_order_by { + expires: order_by + id: order_by + sessionToken: order_by + userId: order_by +} + +""" +response of any mutation on the table "sessions" +""" +type sessions_mutation_response { + """number of rows affected by the mutation""" + affected_rows: Int! + + """data from the rows affected by the mutation""" + returning: [sessions!]! +} + +""" +on_conflict condition type for table "sessions" +""" +input sessions_on_conflict { + constraint: sessions_constraint! + update_columns: [sessions_update_column!]! = [] + where: sessions_bool_exp +} + +"""Ordering options when selecting data from "sessions".""" +input sessions_order_by { + expires: order_by + id: order_by + sessionToken: order_by + user: users_order_by + userId: order_by +} + +"""primary key columns input for table: sessions""" +input sessions_pk_columns_input { + sessionToken: String! +} + +""" +select columns of table "sessions" +""" +enum sessions_select_column { + """column name""" + expires + + """column name""" + id + + """column name""" + sessionToken + + """column name""" + userId +} + +""" +input type for updating data in table "sessions" +""" +input sessions_set_input { + expires: timestamptz + id: uuid + sessionToken: String + userId: uuid +} + +""" +Streaming cursor of the table "sessions" +""" +input sessions_stream_cursor_input { + """Stream column input with initial value""" + initial_value: sessions_stream_cursor_value_input! + + """cursor ordering""" + ordering: cursor_ordering +} + +"""Initial value of the column from where the streaming should start""" +input sessions_stream_cursor_value_input { + expires: timestamptz + id: uuid + sessionToken: String + userId: uuid +} + +""" +update columns of table "sessions" +""" +enum sessions_update_column { + """column name""" + expires + + """column name""" + id + + """column name""" + sessionToken + + """column name""" + userId +} + +input sessions_updates { + """sets the columns of the filtered rows to the given values""" + _set: sessions_set_input + + """filter the rows which have to be updated""" + where: sessions_bool_exp! +} + +type subscription_root { + """An array relationship""" + accounts( + """distinct select on columns""" + distinct_on: [accounts_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [accounts_order_by!] + + """filter the rows returned""" + where: accounts_bool_exp + ): [accounts!]! + + """An aggregate relationship""" + accounts_aggregate( + """distinct select on columns""" + distinct_on: [accounts_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [accounts_order_by!] + + """filter the rows returned""" + where: accounts_bool_exp + ): accounts_aggregate! + + """fetch data from the table: "accounts" using primary key columns""" + accounts_by_pk(id: uuid!): accounts + + """ + fetch data from the table in a streaming manner: "accounts" + """ + accounts_stream( + """maximum number of rows returned in a single batch""" + batch_size: Int! + + """cursor to stream the results returned by the query""" + cursor: [accounts_stream_cursor_input]! + + """filter the rows returned""" + where: accounts_bool_exp + ): [accounts!]! + + """ + fetch data from the table: "provider_type" + """ + provider_type( + """distinct select on columns""" + distinct_on: [provider_type_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [provider_type_order_by!] + + """filter the rows returned""" + where: provider_type_bool_exp + ): [provider_type!]! + + """ + fetch aggregated fields from the table: "provider_type" + """ + provider_type_aggregate( + """distinct select on columns""" + distinct_on: [provider_type_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [provider_type_order_by!] + + """filter the rows returned""" + where: provider_type_bool_exp + ): provider_type_aggregate! + + """fetch data from the table: "provider_type" using primary key columns""" + provider_type_by_pk(value: String!): provider_type + + """ + fetch data from the table in a streaming manner: "provider_type" + """ + provider_type_stream( + """maximum number of rows returned in a single batch""" + batch_size: Int! + + """cursor to stream the results returned by the query""" + cursor: [provider_type_stream_cursor_input]! + + """filter the rows returned""" + where: provider_type_bool_exp + ): [provider_type!]! + + """An array relationship""" + sessions( + """distinct select on columns""" + distinct_on: [sessions_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [sessions_order_by!] + + """filter the rows returned""" + where: sessions_bool_exp + ): [sessions!]! + + """An aggregate relationship""" + sessions_aggregate( + """distinct select on columns""" + distinct_on: [sessions_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [sessions_order_by!] + + """filter the rows returned""" + where: sessions_bool_exp + ): sessions_aggregate! + + """fetch data from the table: "sessions" using primary key columns""" + sessions_by_pk(sessionToken: String!): sessions + + """ + fetch data from the table in a streaming manner: "sessions" + """ + sessions_stream( + """maximum number of rows returned in a single batch""" + batch_size: Int! + + """cursor to stream the results returned by the query""" + cursor: [sessions_stream_cursor_input]! + + """filter the rows returned""" + where: sessions_bool_exp + ): [sessions!]! + + """ + fetch data from the table: "users" + """ + users( + """distinct select on columns""" + distinct_on: [users_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [users_order_by!] + + """filter the rows returned""" + where: users_bool_exp + ): [users!]! + + """ + fetch aggregated fields from the table: "users" + """ + users_aggregate( + """distinct select on columns""" + distinct_on: [users_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [users_order_by!] + + """filter the rows returned""" + where: users_bool_exp + ): users_aggregate! + + """fetch data from the table: "users" using primary key columns""" + users_by_pk(id: uuid!): users + + """ + fetch data from the table in a streaming manner: "users" + """ + users_stream( + """maximum number of rows returned in a single batch""" + batch_size: Int! + + """cursor to stream the results returned by the query""" + cursor: [users_stream_cursor_input]! + + """filter the rows returned""" + where: users_bool_exp + ): [users!]! + + """ + fetch data from the table: "verification_tokens" + """ + verification_tokens( + """distinct select on columns""" + distinct_on: [verification_tokens_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [verification_tokens_order_by!] + + """filter the rows returned""" + where: verification_tokens_bool_exp + ): [verification_tokens!]! + + """ + fetch aggregated fields from the table: "verification_tokens" + """ + verification_tokens_aggregate( + """distinct select on columns""" + distinct_on: [verification_tokens_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [verification_tokens_order_by!] + + """filter the rows returned""" + where: verification_tokens_bool_exp + ): verification_tokens_aggregate! + + """ + fetch data from the table: "verification_tokens" using primary key columns + """ + verification_tokens_by_pk(token: String!): verification_tokens + + """ + fetch data from the table in a streaming manner: "verification_tokens" + """ + verification_tokens_stream( + """maximum number of rows returned in a single batch""" + batch_size: Int! + + """cursor to stream the results returned by the query""" + cursor: [verification_tokens_stream_cursor_input]! + + """filter the rows returned""" + where: verification_tokens_bool_exp + ): [verification_tokens!]! +} + +scalar timestamptz + +""" +Boolean expression to compare columns of type "timestamptz". All fields are combined with logical 'AND'. +""" +input timestamptz_comparison_exp { + _eq: timestamptz + _gt: timestamptz + _gte: timestamptz + _in: [timestamptz!] + _is_null: Boolean + _lt: timestamptz + _lte: timestamptz + _neq: timestamptz + _nin: [timestamptz!] +} + +""" +columns and relationships of "users" +""" +type users { + """An array relationship""" + accounts( + """distinct select on columns""" + distinct_on: [accounts_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [accounts_order_by!] + + """filter the rows returned""" + where: accounts_bool_exp + ): [accounts!]! + + """An aggregate relationship""" + accounts_aggregate( + """distinct select on columns""" + distinct_on: [accounts_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [accounts_order_by!] + + """filter the rows returned""" + where: accounts_bool_exp + ): accounts_aggregate! + email: String! + emailVerified: timestamptz + id: uuid! + image: String + name: String + + """An array relationship""" + sessions( + """distinct select on columns""" + distinct_on: [sessions_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [sessions_order_by!] + + """filter the rows returned""" + where: sessions_bool_exp + ): [sessions!]! + + """An aggregate relationship""" + sessions_aggregate( + """distinct select on columns""" + distinct_on: [sessions_select_column!] + + """limit the number of rows returned""" + limit: Int + + """skip the first n rows. Use only with order_by""" + offset: Int + + """sort the rows by one or more columns""" + order_by: [sessions_order_by!] + + """filter the rows returned""" + where: sessions_bool_exp + ): sessions_aggregate! +} + +""" +aggregated selection of "users" +""" +type users_aggregate { + aggregate: users_aggregate_fields + nodes: [users!]! +} + +""" +aggregate fields of "users" +""" +type users_aggregate_fields { + count(columns: [users_select_column!], distinct: Boolean): Int! + max: users_max_fields + min: users_min_fields +} + +""" +Boolean expression to filter rows from the table "users". All fields are combined with a logical 'AND'. +""" +input users_bool_exp { + _and: [users_bool_exp!] + _not: users_bool_exp + _or: [users_bool_exp!] + accounts: accounts_bool_exp + accounts_aggregate: accounts_aggregate_bool_exp + email: String_comparison_exp + emailVerified: timestamptz_comparison_exp + id: uuid_comparison_exp + image: String_comparison_exp + name: String_comparison_exp + sessions: sessions_bool_exp + sessions_aggregate: sessions_aggregate_bool_exp +} + +""" +unique or primary key constraints on table "users" +""" +enum users_constraint { + """ + unique or primary key constraint on columns "email" + """ + users_email_key + + """ + unique or primary key constraint on columns "id" + """ + users_pkey +} + +""" +input type for inserting data into table "users" +""" +input users_insert_input { + accounts: accounts_arr_rel_insert_input + email: String + emailVerified: timestamptz + id: uuid + image: String + name: String + sessions: sessions_arr_rel_insert_input +} + +"""aggregate max on columns""" +type users_max_fields { + email: String + emailVerified: timestamptz + id: uuid + image: String + name: String +} + +"""aggregate min on columns""" +type users_min_fields { + email: String + emailVerified: timestamptz + id: uuid + image: String + name: String +} + +""" +response of any mutation on the table "users" +""" +type users_mutation_response { + """number of rows affected by the mutation""" + affected_rows: Int! + + """data from the rows affected by the mutation""" + returning: [users!]! +} + +""" +input type for inserting object relation for remote table "users" +""" +input users_obj_rel_insert_input { + data: users_insert_input! + + """upsert condition""" + on_conflict: users_on_conflict +} + +""" +on_conflict condition type for table "users" +""" +input users_on_conflict { + constraint: users_constraint! + update_columns: [users_update_column!]! = [] + where: users_bool_exp +} + +"""Ordering options when selecting data from "users".""" +input users_order_by { + accounts_aggregate: accounts_aggregate_order_by + email: order_by + emailVerified: order_by + id: order_by + image: order_by + name: order_by + sessions_aggregate: sessions_aggregate_order_by +} + +"""primary key columns input for table: users""" +input users_pk_columns_input { + id: uuid! +} + +""" +select columns of table "users" +""" +enum users_select_column { + """column name""" + email + + """column name""" + emailVerified + + """column name""" + id + + """column name""" + image + + """column name""" + name +} + +""" +input type for updating data in table "users" +""" +input users_set_input { + email: String + emailVerified: timestamptz + id: uuid + image: String + name: String +} + +""" +Streaming cursor of the table "users" +""" +input users_stream_cursor_input { + """Stream column input with initial value""" + initial_value: users_stream_cursor_value_input! + + """cursor ordering""" + ordering: cursor_ordering +} + +"""Initial value of the column from where the streaming should start""" +input users_stream_cursor_value_input { + email: String + emailVerified: timestamptz + id: uuid + image: String + name: String +} + +""" +update columns of table "users" +""" +enum users_update_column { + """column name""" + email + + """column name""" + emailVerified + + """column name""" + id + + """column name""" + image + + """column name""" + name +} + +input users_updates { + """sets the columns of the filtered rows to the given values""" + _set: users_set_input + + """filter the rows which have to be updated""" + where: users_bool_exp! +} + +scalar uuid + +""" +Boolean expression to compare columns of type "uuid". All fields are combined with logical 'AND'. +""" +input uuid_comparison_exp { + _eq: uuid + _gt: uuid + _gte: uuid + _in: [uuid!] + _is_null: Boolean + _lt: uuid + _lte: uuid + _neq: uuid + _nin: [uuid!] +} + +""" +columns and relationships of "verification_tokens" +""" +type verification_tokens { + expires: timestamptz! + identifier: String! + token: String! +} + +""" +aggregated selection of "verification_tokens" +""" +type verification_tokens_aggregate { + aggregate: verification_tokens_aggregate_fields + nodes: [verification_tokens!]! +} + +""" +aggregate fields of "verification_tokens" +""" +type verification_tokens_aggregate_fields { + count(columns: [verification_tokens_select_column!], distinct: Boolean): Int! + max: verification_tokens_max_fields + min: verification_tokens_min_fields +} + +""" +Boolean expression to filter rows from the table "verification_tokens". All fields are combined with a logical 'AND'. +""" +input verification_tokens_bool_exp { + _and: [verification_tokens_bool_exp!] + _not: verification_tokens_bool_exp + _or: [verification_tokens_bool_exp!] + expires: timestamptz_comparison_exp + identifier: String_comparison_exp + token: String_comparison_exp +} + +""" +unique or primary key constraints on table "verification_tokens" +""" +enum verification_tokens_constraint { + """ + unique or primary key constraint on columns "token" + """ + verification_tokens_pkey +} + +""" +input type for inserting data into table "verification_tokens" +""" +input verification_tokens_insert_input { + expires: timestamptz + identifier: String + token: String +} + +"""aggregate max on columns""" +type verification_tokens_max_fields { + expires: timestamptz + identifier: String + token: String +} + +"""aggregate min on columns""" +type verification_tokens_min_fields { + expires: timestamptz + identifier: String + token: String +} + +""" +response of any mutation on the table "verification_tokens" +""" +type verification_tokens_mutation_response { + """number of rows affected by the mutation""" + affected_rows: Int! + + """data from the rows affected by the mutation""" + returning: [verification_tokens!]! +} + +""" +on_conflict condition type for table "verification_tokens" +""" +input verification_tokens_on_conflict { + constraint: verification_tokens_constraint! + update_columns: [verification_tokens_update_column!]! = [] + where: verification_tokens_bool_exp +} + +"""Ordering options when selecting data from "verification_tokens".""" +input verification_tokens_order_by { + expires: order_by + identifier: order_by + token: order_by +} + +"""primary key columns input for table: verification_tokens""" +input verification_tokens_pk_columns_input { + token: String! +} + +""" +select columns of table "verification_tokens" +""" +enum verification_tokens_select_column { + """column name""" + expires + + """column name""" + identifier + + """column name""" + token +} + +""" +input type for updating data in table "verification_tokens" +""" +input verification_tokens_set_input { + expires: timestamptz + identifier: String + token: String +} + +""" +Streaming cursor of the table "verification_tokens" +""" +input verification_tokens_stream_cursor_input { + """Stream column input with initial value""" + initial_value: verification_tokens_stream_cursor_value_input! + + """cursor ordering""" + ordering: cursor_ordering +} + +"""Initial value of the column from where the streaming should start""" +input verification_tokens_stream_cursor_value_input { + expires: timestamptz + identifier: String + token: String +} + +""" +update columns of table "verification_tokens" +""" +enum verification_tokens_update_column { + """column name""" + expires + + """column name""" + identifier + + """column name""" + token +} + +input verification_tokens_updates { + """sets the columns of the filtered rows to the given values""" + _set: verification_tokens_set_input + + """filter the rows which have to be updated""" + where: verification_tokens_bool_exp! +} + diff --git a/packages/adapter-hasura/src/index.ts b/packages/adapter-hasura/src/index.ts new file mode 100644 index 00000000..c7c1c399 --- /dev/null +++ b/packages/adapter-hasura/src/index.ts @@ -0,0 +1,493 @@ +/** + *
+ *

Official Hasura adapter for Auth.js / NextAuth.js.

+ * + * + * + *
+ * + * ## Installation + * + * ```bash npm2yarn2pnpm + * npm install next-auth @auth/hasura-adapter graphql graphql-request + * ``` + * + * @module @auth/hasura-adapter + */ + +import { GraphQLClient } from "graphql-request" +import type { Adapter, AdapterAccount } from "@auth/core/adapters" +import { useFragment } from "./lib" +import { + AccountFragmentDoc, + CreateAccountDocument, + CreateSessionDocument, + CreateUserDocument, + CreateVerificationTokenDocument, + DeleteAccountDocument, + DeleteSessionDocument, + DeleteUserDocument, + DeleteVerificationTokenDocument, + GetSessionAndUserDocument, + GetUserDocument, + GetUsersDocument, + SessionFragmentDoc, + UpdateSessionDocument, + UpdateUserDocument, + UserFragmentDoc, + VerificationTokenFragmentDoc, +} from "./lib/graphql" +import type { + AccountFragment, + CreateAccountMutation, + CreateAccountMutationVariables, + CreateSessionMutation, + CreateSessionMutationVariables, + CreateUserMutation, + CreateUserMutationVariables, + CreateVerificationTokenMutation, + CreateVerificationTokenMutationVariables, + DeleteAccountMutation, + DeleteAccountMutationVariables, + DeleteSessionMutation, + DeleteSessionMutationVariables, + DeleteUserMutation, + DeleteUserMutationVariables, + DeleteVerificationTokenMutation, + DeleteVerificationTokenMutationVariables, + GetSessionAndUserQuery, + GetSessionAndUserQueryVariables, + GetUserQuery, + GetUserQueryVariables, + GetUsersQuery, + GetUsersQueryVariables, + UpdateSessionMutation, + UpdateSessionMutationVariables, + UpdateUserMutation, + UpdateUserMutationVariables, +} from "./lib/graphql" +import { formatDateConversion } from "./utils" +import type { NonNullify } from "./utils" + +interface HasuraAdapterArgs { + endpoint: string + adminSecret: string + graphqlRequestOptions?: any +} + +/** + * + * ## Setup + * + * 1. Create the next-auth schema in your database using SQL. + * + * ```sql + * CREATE TABLE accounts ( + * id uuid DEFAULT gen_random_uuid() NOT NULL, + * type text NOT NULL, + * provider text NOT NULL, + * "providerAccountId" text NOT NULL, + * refresh_token text, + * access_token text, + * expires_at integer, + * token_type text, + * scope text, + * id_token text, + * session_state text, + * "userId" uuid NOT NULL, + * ); + * + * CREATE TABLE sessions ( + * id uuid DEFAULT gen_random_uuid() NOT NULL, + * "sessionToken" text NOT NULL, + * "userId" uuid NOT NULL, + * expires timestamptz NOT NULL + * ); + * + * CREATE TABLE users ( + * id uuid DEFAULT gen_random_uuid() NOT NULL, + * name text, + * email text NOT NULL, + * "emailVerified" timestamptz, + * image text + * ); + * + * CREATE TABLE verification_tokens ( + * token text NOT NULL, + * identifier text NOT NULL, + * expires timestamptz NOT NULL + * ); + * + * CREATE TABLE provider_type ( + * value text NOT NULL + * ); + * + * ALTER TABLE ONLY accounts + * ADD CONSTRAINT accounts_pkey PRIMARY KEY (id); + * + * ALTER TABLE ONLY sessions + * ADD CONSTRAINT sessions_pkey PRIMARY KEY ("sessionToken"); + * + * ALTER TABLE ONLY users + * ADD CONSTRAINT users_email_key UNIQUE (email); + * + * ALTER TABLE ONLY users + * ADD CONSTRAINT users_pkey PRIMARY KEY (id); + * + * ALTER TABLE ONLY verification_tokens + * ADD CONSTRAINT verification_tokens_pkey PRIMARY KEY (token); + * + * ALTER TABLE ONLY provider_type + * ADD CONSTRAINT provider_type_pkey PRIMARY KEY (value); + * + * ALTER TABLE ONLY accounts + * ADD CONSTRAINT "accounts_userId_fkey" FOREIGN KEY ("userId") REFERENCES public.users(id) ON UPDATE RESTRICT ON DELETE CASCADE; + * + * ALTER TABLE ONLY sessions + * ADD CONSTRAINT "sessions_userId_fkey" FOREIGN KEY ("userId") REFERENCES public.users(id) ON UPDATE RESTRICT ON DELETE CASCADE; + * + * INSERT INTO provider_type (value) VALUES ('credentials'), ('email'), ('oauth'), ('oidc'); + * + * ALTER TABLE ONLY accounts + * ADD CONSTRAINT "accounts_type_fkey" FOREIGN KEY ("type") REFERENCES public.provider_type(value) ON UPDATE RESTRICT ON DELETE RESTRICT; + * ``` + * + * :::info + * Tips: [Track all the tables and relationships in Hasura](https://hasura.io/docs/latest/schema/postgres/using-existing-database/#step-1-track-tablesviews) + * ::: + * + *1. Configure your NextAuth.js to use the Hasura Adapter: + * + * ```javascript title="pages/api/auth/[...nextauth].js" + * import NextAuth from "next-auth" + * import { HasuraAdapter } from "@next-auth/hasura-adapter" + * + * // For more information on each option (and a full list of options) go to + * // https://next-auth.js.org/configuration/options + * export default nextAuth({ + * adapter: HasuraAdapter({ + * endpoint: "", + * adminSecret: "", + * graphqlRequestOptions: { + * // Optional graphql-request options + * }, + * }), + * ... + * }) + * ``` + * + *## Passing dynamic headers + * + *If you use [graphql-request's dynamic headers feature](https://github.com/prisma-labs/graphql-request#passing-dynamic-headers-to-the-client), you are responsible for passing the 'X-Hasura-Admin-Secret' header + * + *```js + *export default nextAuth({ + * adapter: HasuraAdapter({ + * endpoint: "", + * adminSecret: "", + * graphqlRequestOptions: { + * headers: () => ({ + * "X-Hasura-Admin-Secret": "", + * // your headers here + * }), + * }, + * }), + * ... + *}) + *``` + + */ +export const HasuraAdapter = ({ + endpoint, + adminSecret, + graphqlRequestOptions, +}: HasuraAdapterArgs): Adapter => { + const client = new GraphQLClient(endpoint, { + fetch: fetch ?? undefined, + ...graphqlRequestOptions, + headers: + graphqlRequestOptions?.headers instanceof Function + ? graphqlRequestOptions?.headers + : { + ...graphqlRequestOptions?.headers, + "x-hasura-admin-secret": adminSecret, + }, + }) + + return { + // User + createUser: async (newUser) => { + const variables: CreateUserMutationVariables = { + data: formatDateConversion(newUser, "emailVerified", "toDatabase"), + } + const { insert_users_one } = await client.request( + CreateUserDocument.toString(), + variables + ) + const user = useFragment(UserFragmentDoc, insert_users_one) + + if (!user) { + throw new Error("Error creating user") + } + return formatDateConversion(user, "emailVerified", "toJS") + }, + getUser: async (id) => { + const variables: GetUserQueryVariables = { id } + const { users_by_pk } = await client.request( + GetUserDocument.toString(), + variables + ) + const user = useFragment(UserFragmentDoc, users_by_pk) + + return user ? formatDateConversion(user, "emailVerified", "toJS") : null + }, + getUserByEmail: async (email) => { + const variables: GetUsersQueryVariables = { + where: { email: { _eq: email } }, + } + const { users } = await client.request( + GetUsersDocument.toString(), + variables + ) + + const user = useFragment(UserFragmentDoc, users?.[0]) + + if (!user) return null + + return user ? formatDateConversion(user, "emailVerified", "toJS") : null + }, + getUserByAccount: async ({ providerAccountId, provider }) => { + const variables: GetUsersQueryVariables = { + where: { + accounts: { + provider: { _eq: provider }, + providerAccountId: { _eq: providerAccountId }, + }, + }, + } + const { users } = await client.request( + GetUsersDocument.toString(), + variables + ) + const user = useFragment(UserFragmentDoc, users?.[0]) + + if (!user) return null + + return user ? formatDateConversion(user, "emailVerified", "toJS") : null + }, + updateUser: async ({ id, ...data }) => { + const variables: UpdateUserMutationVariables = { + id, + data: formatDateConversion(data, "emailVerified", "toDatabase"), + } + const { update_users_by_pk } = await client.request( + UpdateUserDocument.toString(), + variables + ) + const user = useFragment(UserFragmentDoc, update_users_by_pk) + + if (!user) { + throw new Error("Error updating user") + } + + return formatDateConversion(user, "emailVerified", "toJS") + }, + deleteUser: async (id) => { + const variables: DeleteUserMutationVariables = { + id, + } + const { delete_users_by_pk } = await client.request( + DeleteUserDocument.toString(), + variables + ) + const user = useFragment(UserFragmentDoc, delete_users_by_pk) + + if (!user) { + throw new Error("Error deleting user") + } + return formatDateConversion(user, "emailVerified", "toJS") + }, + // Session + createSession: async (data) => { + const variables: CreateSessionMutationVariables = { + data: formatDateConversion(data, "expires", "toDatabase"), + } + const { insert_sessions_one } = + await client.request( + CreateSessionDocument.toString(), + variables + ) + const session = useFragment(SessionFragmentDoc, insert_sessions_one) + + if (!session) { + throw new Error("Error creating session") + } + session.expires + return formatDateConversion(session, "expires", "toJS") + }, + getSessionAndUser: async (sessionToken) => { + const variables: GetSessionAndUserQueryVariables = { + sessionToken, + } + const { sessions } = await client.request( + GetSessionAndUserDocument.toString(), + variables + ) + const session = sessions?.[0] + + if (!session) { + return null + } + + const { user, ...sessionData } = session + + return { + session: formatDateConversion( + useFragment(SessionFragmentDoc, sessionData), + "expires", + "toJS" + ), + user: formatDateConversion( + useFragment(UserFragmentDoc, user), + "emailVerified", + "toJS" + ), + } + }, + updateSession: async ({ sessionToken, ...data }) => { + const variables: UpdateSessionMutationVariables = { + sessionToken, + data: formatDateConversion(data, "expires", "toDatabase"), + } + const { update_sessions } = await client.request( + UpdateSessionDocument.toString(), + variables + ) + const session = update_sessions?.returning?.[0] + + if (!session) { + return null + } + + return formatDateConversion( + useFragment(SessionFragmentDoc, session), + "expires", + "toJS" + ) + }, + deleteSession: async (sessionToken) => { + const variables: DeleteSessionMutationVariables = { + sessionToken, + } + const { delete_sessions } = await client.request( + DeleteSessionDocument.toString(), + variables + ) + const session = delete_sessions?.returning?.[0] + + if (!session) { + return null + } + + return formatDateConversion( + useFragment(SessionFragmentDoc, session), + "expires", + "toJS" + ) + }, + // Account + linkAccount: async (data) => { + const variables: CreateAccountMutationVariables = { data } + const { insert_accounts_one } = + await client.request( + CreateAccountDocument.toString(), + variables + ) + + if (!insert_accounts_one) { + return + } + + const account = useFragment( + AccountFragmentDoc, + insert_accounts_one + ) as NonNullify< + Omit & { type: "email" | "oauth" | "oidc" } + > + if (account) { + return account as AdapterAccount + } + }, + unlinkAccount: async ({ providerAccountId, provider }) => { + const variables: DeleteAccountMutationVariables = { + provider, + providerAccountId, + } + const { delete_accounts } = await client.request( + DeleteAccountDocument.toString(), + variables + ) + const account = delete_accounts?.returning[0] + + if (!account) { + return undefined + } + + const accountFragment = useFragment( + AccountFragmentDoc, + account + ) as NonNullify< + Omit & { type: "email" | "oauth" | "oidc" } + > + if (accountFragment) { + return accountFragment as AdapterAccount + } + }, + // Verification Token + createVerificationToken: async (data) => { + const variables: CreateVerificationTokenMutationVariables = { + data: formatDateConversion(data, "expires", "toDatabase"), + } + const { insert_verification_tokens_one } = + await client.request( + CreateVerificationTokenDocument.toString(), + variables + ) + + if (!insert_verification_tokens_one) { + return null + } + + return formatDateConversion( + useFragment( + VerificationTokenFragmentDoc, + insert_verification_tokens_one + ), + "expires", + "toJS" + ) + }, + useVerificationToken: async ({ identifier, token }) => { + const variables: DeleteVerificationTokenMutationVariables = { + identifier, + token, + } + const { delete_verification_tokens } = + await client.request( + DeleteVerificationTokenDocument.toString(), + variables + ) + const verificationToken = delete_verification_tokens?.returning?.[0] + + if (!verificationToken) { + return null + } + + return formatDateConversion( + useFragment(VerificationTokenFragmentDoc, verificationToken), + "expires", + "toJS" + ) + }, + } +} diff --git a/packages/adapter-hasura/src/lib/.gitignore b/packages/adapter-hasura/src/lib/.gitignore new file mode 100644 index 00000000..d6b7ef32 --- /dev/null +++ b/packages/adapter-hasura/src/lib/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/packages/adapter-hasura/src/queries/account.graphql b/packages/adapter-hasura/src/queries/account.graphql new file mode 100644 index 00000000..907ac6dd --- /dev/null +++ b/packages/adapter-hasura/src/queries/account.graphql @@ -0,0 +1,29 @@ +mutation CreateAccount($data: accounts_insert_input!) { + insert_accounts_one(object: $data) { + ...Account + } +} + +mutation DeleteAccount($provider: String!, $providerAccountId: String!) { + delete_accounts( + where: { + provider: { _eq: $provider } + providerAccountId: { _eq: $providerAccountId } + } + ) { + returning { + ...Account + } + } +} + +query GetAccount($provider: String!, $providerAccountId: String!) { + accounts( + where: { + provider: { _eq: $provider } + providerAccountId: { _eq: $providerAccountId } + } + ) { + ...Account + } +} diff --git a/packages/adapter-hasura/src/queries/delete.graphql b/packages/adapter-hasura/src/queries/delete.graphql new file mode 100644 index 00000000..f10f7bf9 --- /dev/null +++ b/packages/adapter-hasura/src/queries/delete.graphql @@ -0,0 +1,14 @@ +mutation DeleteAll { + delete_accounts(where: {}) { + affected_rows + } + delete_sessions(where: {}) { + affected_rows + } + delete_users(where: {}) { + affected_rows + } + delete_verification_tokens(where: {}) { + affected_rows + } +} diff --git a/packages/adapter-hasura/src/queries/fragments.graphql b/packages/adapter-hasura/src/queries/fragments.graphql new file mode 100644 index 00000000..4dcfcc85 --- /dev/null +++ b/packages/adapter-hasura/src/queries/fragments.graphql @@ -0,0 +1,35 @@ +fragment User on users { + id + name + email + image + emailVerified +} + +fragment Session on sessions { + id + userId + expires + sessionToken +} + +fragment Account on accounts { + id + type + scope + userId + id_token + provider + expires_at + token_type + access_token + refresh_token + session_state + providerAccountId +} + +fragment VerificationToken on verification_tokens { + token + expires + identifier +} diff --git a/packages/adapter-hasura/src/queries/session.graphql b/packages/adapter-hasura/src/queries/session.graphql new file mode 100644 index 00000000..46cc3962 --- /dev/null +++ b/packages/adapter-hasura/src/queries/session.graphql @@ -0,0 +1,39 @@ +query GetSessionAndUser($sessionToken: String!) { + sessions(where: { sessionToken: { _eq: $sessionToken } }) { + ...Session + user { + ...User + } + } +} + +query GetSession($sessionToken: String!) { + sessions_by_pk(sessionToken: $sessionToken) { + ...Session + } +} + +mutation CreateSession($data: sessions_insert_input!) { + insert_sessions_one(object: $data) { + ...Session + } +} + +mutation UpdateSession($sessionToken: String, $data: sessions_set_input!) { + update_sessions( + where: { sessionToken: { _eq: $sessionToken } } + _set: $data + ) { + returning { + ...Session + } + } +} + +mutation DeleteSession($sessionToken: String!) { + delete_sessions(where: { sessionToken: { _eq: $sessionToken } }) { + returning { + ...Session + } + } +} diff --git a/packages/adapter-hasura/src/queries/user.graphql b/packages/adapter-hasura/src/queries/user.graphql new file mode 100644 index 00000000..e82a55a4 --- /dev/null +++ b/packages/adapter-hasura/src/queries/user.graphql @@ -0,0 +1,29 @@ +query GetUser($id: uuid!) { + users_by_pk(id: $id) { + ...User + } +} + +query GetUsers($where: users_bool_exp!) { + users(where: $where) { + ...User + } +} + +mutation CreateUser($data: users_insert_input!) { + insert_users_one(object: $data) { + ...User + } +} + +mutation UpdateUser($id: uuid!, $data: users_set_input!) { + update_users_by_pk(pk_columns: { id: $id }, _set: $data) { + ...User + } +} + +mutation DeleteUser($id: uuid!) { + delete_users_by_pk(id: $id) { + ...User + } +} diff --git a/packages/adapter-hasura/src/queries/verification-token.graphql b/packages/adapter-hasura/src/queries/verification-token.graphql new file mode 100644 index 00000000..2ae5b4f3 --- /dev/null +++ b/packages/adapter-hasura/src/queries/verification-token.graphql @@ -0,0 +1,23 @@ +mutation CreateVerificationToken($data: verification_tokens_insert_input!) { + insert_verification_tokens_one(object: $data) { + ...VerificationToken + } +} + +mutation DeleteVerificationToken($identifier: String!, $token: String!) { + delete_verification_tokens( + where: { token: { _eq: $token }, identifier: { _eq: $identifier } } + ) { + returning { + ...VerificationToken + } + } +} + +query GetVerificationToken($identifier: String!, $token: String!) { + verification_tokens( + where: { token: { _eq: $token }, identifier: { _eq: $identifier } } + ) { + ...VerificationToken + } +} diff --git a/packages/adapter-hasura/src/utils.ts b/packages/adapter-hasura/src/utils.ts new file mode 100644 index 00000000..dd9582ab --- /dev/null +++ b/packages/adapter-hasura/src/utils.ts @@ -0,0 +1,47 @@ +export type NonNullify = { + [K in keyof T]: T[K] extends null | infer U ? U : T[K] +} + +type FormatToJS = T[K] extends string + ? Omit & Record + : Omit & Record + +type FormatToDatabase = T[K] extends Date + ? Omit & Record + : Omit & Record + +export function formatDateConversion( + object: T, + key: K, + direction: "toJS" +): FormatToJS + +export function formatDateConversion( + object: T, + key: K, + direction: "toDatabase" +): FormatToDatabase + +export function formatDateConversion( + object: T, + key: K, + direction: "toJS" | "toDatabase" +) { + if (!object) return object + + const value = object[key] + + if (value === undefined) return object + + if (direction === "toJS") { + return { + ...object, + [key]: value ? new Date(value as string) : null, + } as FormatToJS + } else { + return { + ...object, + [key]: value ? (value as unknown as Date).toISOString() : null, + } as FormatToDatabase + } +} diff --git a/packages/adapter-hasura/tests/index.test.ts b/packages/adapter-hasura/tests/index.test.ts new file mode 100644 index 00000000..c87c883d --- /dev/null +++ b/packages/adapter-hasura/tests/index.test.ts @@ -0,0 +1,110 @@ +import { runBasicTests } from "@auth/adapter-test" +import { GraphQLClient } from "graphql-request" +import { HasuraAdapter } from "../src" +import { useFragment } from "../src/lib" +import { + AccountFragmentDoc, + DeleteAllDocument, + GetAccountDocument, + GetSessionDocument, + GetUserDocument, + GetVerificationTokenDocument, + SessionFragmentDoc, + UserFragmentDoc, + VerificationTokenFragmentDoc, +} from "../src/lib/graphql" +import type { + GetAccountQuery, + GetAccountQueryVariables, + GetSessionQuery, + GetSessionQueryVariables, + GetUserQuery, + GetUserQueryVariables, + GetVerificationTokenQuery, + GetVerificationTokenQueryVariables, +} from "../src/lib/graphql" +import { formatDateConversion } from "../src/utils" + +const client = new GraphQLClient("http://localhost:8080/v1/graphql", { + headers: { + "x-hasura-admin-secret": "myadminsecretkey", + }, +}) + +runBasicTests({ + adapter: HasuraAdapter({ + adminSecret: "myadminsecretkey", + endpoint: "http://localhost:8080/v1/graphql", + }), + db: { + connect: async () => { + await client.request(DeleteAllDocument.toString()) + }, + disconnect: async () => { + await client.request(DeleteAllDocument.toString()) + }, + user: async (id) => { + const variables: GetUserQueryVariables = { id } + const { users_by_pk } = await client.request( + GetUserDocument.toString(), + variables + ) + const user = useFragment(UserFragmentDoc, users_by_pk) + + return user ? formatDateConversion(user, "emailVerified", "toJS") : null + }, + account: async ({ providerAccountId, provider }) => { + const variables: GetAccountQueryVariables = { + provider, + providerAccountId, + } + const { accounts } = await client.request( + GetAccountDocument.toString(), + variables + ) + + const account = useFragment(AccountFragmentDoc, accounts?.[0]) + return account ?? null + }, + session: async (sessionToken) => { + const variables: GetSessionQueryVariables = { + sessionToken, + } + const { sessions_by_pk } = await client.request( + GetSessionDocument.toString(), + variables + ) + if (!sessions_by_pk) { + return null + } + + return formatDateConversion( + useFragment(SessionFragmentDoc, sessions_by_pk), + "expires", + "toJS" + ) + }, + verificationToken: async ({ identifier, token }) => { + const variables: GetVerificationTokenQueryVariables = { + identifier, + token, + } + const { verification_tokens } = + await client.request( + GetVerificationTokenDocument.toString(), + variables + ) + const verificationToken = verification_tokens?.[0] + + if (!verificationToken) { + return null + } + + return formatDateConversion( + useFragment(VerificationTokenFragmentDoc, verificationToken), + "expires", + "toJS" + ) + }, + }, +}) diff --git a/packages/adapter-hasura/tests/test.sh b/packages/adapter-hasura/tests/test.sh new file mode 100755 index 00000000..048cc8af --- /dev/null +++ b/packages/adapter-hasura/tests/test.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# Start Hasura +docker-compose up -d + +echo "Waiting 5 sec for Hasura to start..." +sleep 5 + +# Always stop container, but exit with 1 when tests are failing +if npx jest;then + docker compose down -v +else + docker compose down -v && exit 1 +fi diff --git a/packages/adapter-hasura/tsconfig.json b/packages/adapter-hasura/tsconfig.json new file mode 100644 index 00000000..a24e2d98 --- /dev/null +++ b/packages/adapter-hasura/tsconfig.json @@ -0,0 +1,21 @@ +{ + "extends": "@auth/tsconfig/tsconfig.base.json", + "compilerOptions": { + "allowJs": true, + "baseUrl": ".", + "isolatedModules": true, + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "node", + "outDir": ".", + "rootDir": "src", + "skipDefaultLibCheck": true, + "strictNullChecks": true, + "stripInternal": true, + "declarationMap": true, + "declaration": true, + "verbatimModuleSyntax": true + }, + "include": ["src/**/*"], + "exclude": ["*.js", "*.d.ts"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6c97d7e3..c17a88ff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -466,6 +466,40 @@ importers: specifier: ^29.3.1 version: 29.3.1(@types/node@18.16.3) + packages/adapter-hasura: + dependencies: + '@auth/core': + specifier: workspace:* + version: link:../core + devDependencies: + '@auth/adapter-test': + specifier: workspace:* + version: link:../adapter-test + '@auth/tsconfig': + specifier: workspace:* + version: link:../tsconfig + '@graphql-codegen/cli': + specifier: ^5.0.0 + version: 5.0.0(@types/node@18.16.3)(graphql@16.8.1)(typescript@5.2.2) + '@graphql-codegen/client-preset': + specifier: ^4.1.0 + version: 4.1.0(graphql@16.8.1) + '@graphql-typed-document-node/core': + specifier: ^3.2.0 + version: 3.2.0(graphql@16.8.1) + graphql: + specifier: ^16.8.1 + version: 16.8.1 + graphql-request: + specifier: ^6.1.0 + version: 6.1.0(graphql@16.8.1) + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.16.3) + typescript: + specifier: ^5.2.2 + version: 5.2.2 + packages/adapter-kysely: dependencies: '@auth/core': @@ -1227,6 +1261,44 @@ packages: js-yaml: 4.1.0 dev: true + /@ardatan/relay-compiler@12.0.0(graphql@16.8.1): + resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} + hasBin: true + peerDependencies: + graphql: '*' + dependencies: + '@babel/core': 7.22.1 + '@babel/generator': 7.22.3 + '@babel/parser': 7.22.4 + '@babel/runtime': 7.20.13 + '@babel/traverse': 7.22.4 + '@babel/types': 7.22.4 + babel-preset-fbjs: 3.4.0(@babel/core@7.22.1) + chalk: 4.1.2 + fb-watchman: 2.0.1 + fbjs: 3.0.4 + 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 + dev: true + + /@ardatan/sync-fetch@0.0.1: + resolution: {integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==} + engines: {node: '>=14'} + dependencies: + node-fetch: 2.6.9 + transitivePeerDependencies: + - encoding + dev: true + /@aws-crypto/crc32@3.0.0: resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} requiresBuild: true @@ -2683,6 +2755,14 @@ packages: dependencies: '@babel/highlight': 7.18.6 + /@babel/code-frame@7.22.13: + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.20 + chalk: 2.4.2 + dev: true + /@babel/compat-data@7.18.5: resolution: {integrity: sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg==} engines: {node: '>=6.9.0'} @@ -2692,6 +2772,11 @@ packages: resolution: {integrity: sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==} engines: {node: '>=6.9.0'} + /@babel/compat-data@7.22.20: + resolution: {integrity: sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/compat-data@7.22.3: resolution: {integrity: sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==} engines: {node: '>=6.9.0'} @@ -2787,6 +2872,29 @@ packages: transitivePeerDependencies: - supports-color + /@babel/core@7.23.0: + resolution: {integrity: sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@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.0) + '@babel/helpers': 7.23.1 + '@babel/parser': 7.23.0 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.0 + '@babel/types': 7.23.0 + convert-source-map: 2.0.0 + debug: 4.3.4(supports-color@7.2.0) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/generator@7.18.2: resolution: {integrity: sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==} engines: {node: '>=6.9.0'} @@ -2812,6 +2920,16 @@ packages: '@jridgewell/trace-mapping': 0.3.17 jsesc: 2.5.2 + /@babel/generator@7.23.0: + resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + '@jridgewell/gen-mapping': 0.3.2 + '@jridgewell/trace-mapping': 0.3.17 + jsesc: 2.5.2 + dev: true + /@babel/helper-annotate-as-pure@7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} @@ -2920,6 +3038,17 @@ packages: lru-cache: 5.1.1 semver: 6.3.0 + /@babel/helper-compilation-targets@7.22.15: + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.22.20 + '@babel/helper-validator-option': 7.22.15 + browserslist: 4.22.1 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + /@babel/helper-create-class-features-plugin@7.20.2(@babel/core@7.18.5): resolution: {integrity: sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==} engines: {node: '>=6.9.0'} @@ -3063,6 +3192,11 @@ packages: resolution: {integrity: sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==} engines: {node: '>=6.9.0'} + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-explode-assignable-expression@7.18.6: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} @@ -3084,12 +3218,27 @@ packages: '@babel/template': 7.21.9 '@babel/types': 7.22.4 + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 + dev: true + /@babel/helper-hoist-variables@7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.4 + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + /@babel/helper-member-expression-to-functions@7.20.7: resolution: {integrity: sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==} engines: {node: '>=6.9.0'} @@ -3123,6 +3272,13 @@ packages: dependencies: '@babel/types': 7.22.4 + /@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.23.0 + dev: true + /@babel/helper-module-transforms@7.18.0: resolution: {integrity: sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==} engines: {node: '>=6.9.0'} @@ -3169,6 +3325,20 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.0): + resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.0 + '@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 + dev: true + /@babel/helper-optimise-call-expression@7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} @@ -3193,6 +3363,11 @@ packages: resolution: {integrity: sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==} engines: {node: '>=6.9.0'} + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-remap-async-to-generator@7.18.9(@babel/core@7.18.5): resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} @@ -3264,6 +3439,13 @@ packages: dependencies: '@babel/types': 7.22.4 + /@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.23.0 + dev: true + /@babel/helper-skip-transparent-expression-wrappers@7.20.0: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} @@ -3277,14 +3459,31 @@ packages: dependencies: '@babel/types': 7.22.4 + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + /@babel/helper-string-parser@7.21.5: resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==} engines: {node: '>=6.9.0'} + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-option@7.16.7: resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==} engines: {node: '>=6.9.0'} @@ -3298,6 +3497,11 @@ packages: resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-option@7.22.15: + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-wrap-function@7.19.0: resolution: {integrity: sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==} engines: {node: '>=6.9.0'} @@ -3330,6 +3534,17 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helpers@7.23.1: + resolution: {integrity: sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.0 + '@babel/types': 7.23.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/highlight@7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} @@ -3338,6 +3553,15 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 + /@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.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + /@babel/parser@7.18.5: resolution: {integrity: sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==} engines: {node: '>=6.0.0'} @@ -3359,6 +3583,14 @@ packages: dependencies: '@babel/types': 7.22.4 + /@babel/parser@7.23.0: + resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.0 + dev: true + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.17.12(@babel/core@7.18.5): resolution: {integrity: sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw==} engines: {node: '>=6.9.0'} @@ -4359,6 +4591,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.22.1): + resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.1 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-import-assertions@7.17.12(@babel/core@7.18.5): resolution: {integrity: sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw==} engines: {node: '>=6.9.0'} @@ -4399,6 +4641,16 @@ packages: '@babel/helper-plugin-utils': 7.21.5 dev: true + /@babel/plugin-syntax-import-assertions@7.20.0(@babel/core@7.23.0): + resolution: {integrity: sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.0 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.1): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: @@ -5199,6 +5451,17 @@ packages: '@babel/helper-plugin-utils': 7.21.5 dev: true + /@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.22.1): + 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.1 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.1) + dev: true + /@babel/plugin-transform-for-of@7.18.1(@babel/core@7.18.5): resolution: {integrity: sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==} engines: {node: '>=6.9.0'} @@ -6901,6 +7164,15 @@ packages: '@babel/parser': 7.22.4 '@babel/types': 7.22.4 + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + dev: true + /@babel/traverse@7.18.5: resolution: {integrity: sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==} engines: {node: '>=6.9.0'} @@ -6970,6 +7242,24 @@ packages: transitivePeerDependencies: - supports-color + /@babel/traverse@7.23.0: + resolution: {integrity: sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==} + engines: {node: '>=6.9.0'} + 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(supports-color@7.2.0) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/types@7.18.4: resolution: {integrity: sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==} engines: {node: '>=6.9.0'} @@ -6993,6 +7283,15 @@ packages: '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 + /@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.20 + to-fast-properties: 2.0.0 + dev: true + /@balazsorban/monorepo-release@0.3.1(patch_hash=lwil2v6lrmyuiogkuptpgelrem): resolution: {integrity: sha512-ZMd6WVcUkGFYTkqPMTxAeNGrIfMZneKiIDOo1gC/NqWjGSC69zVCFQDASKPwWitJoYj3qWIlL9PXFiQ0J0ikGQ==} engines: {node: '>=18.18.0'} @@ -8869,6 +9168,605 @@ packages: dev: true optional: true + /@graphql-codegen/add@5.0.0(graphql@16.8.1): + resolution: {integrity: sha512-ynWDOsK2yxtFHwcJTB9shoSkUd7YXd6ZE57f0nk7W5cu/nAgxZZpEsnTPEpZB/Mjf14YRGe2uJHQ7AfElHjqUQ==} + 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.8.1) + graphql: 16.8.1 + tslib: 2.5.2 + dev: true + + /@graphql-codegen/cli@5.0.0(@types/node@18.16.3)(graphql@16.8.1)(typescript@5.2.2): + resolution: {integrity: sha512-A7J7+be/a6e+/ul2KI5sfJlpoqeqwX8EzktaKCeduyVKgOLA6W5t+NUGf6QumBDXU8PEOqXk3o3F+RAwCWOiqA==} + hasBin: true + peerDependencies: + '@parcel/watcher': ^2.1.0 + 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 + peerDependenciesMeta: + '@parcel/watcher': + optional: true + dependencies: + '@babel/generator': 7.22.3 + '@babel/template': 7.21.9 + '@babel/types': 7.22.4 + '@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.16.3)(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.16.3)(graphql@16.8.1) + '@graphql-tools/url-loader': 8.0.0(@types/node@18.16.3)(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(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.2(@types/node@18.16.3)(graphql@16.8.1)(typescript@5.2.2) + inquirer: 8.2.4 + 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.7.3 + string-env-interpolation: 1.0.1 + ts-log: 2.2.5 + tslib: 2.5.2 + yaml: 2.3.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - cosmiconfig-toml-loader + - encoding + - enquirer + - supports-color + - typescript + - utf-8-validate + dev: true + + /@graphql-codegen/client-preset@4.1.0(graphql@16.8.1): + resolution: {integrity: sha512-/3Ymb/fjxIF1+HGmaI1YwSZbWsrZAWMSQjh3dU425eBjctjsVQ6gzGRr+l/gE5F1mtmCf+vlbTAT03heAc/QIw==} + 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: + '@babel/helper-plugin-utils': 7.21.5 + '@babel/template': 7.21.9 + '@graphql-codegen/add': 5.0.0(graphql@16.8.1) + '@graphql-codegen/gql-tag-operations': 4.0.1(graphql@16.8.1) + '@graphql-codegen/plugin-helpers': 5.0.1(graphql@16.8.1) + '@graphql-codegen/typed-document-node': 5.0.1(graphql@16.8.1) + '@graphql-codegen/typescript': 4.0.1(graphql@16.8.1) + '@graphql-codegen/typescript-operations': 4.0.1(graphql@16.8.1) + '@graphql-codegen/visitor-plugin-common': 4.0.1(graphql@16.8.1) + '@graphql-tools/documents': 1.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.5.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-codegen/core@4.0.0(graphql@16.8.1): + 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.8.1) + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.5.2 + dev: true + + /@graphql-codegen/gql-tag-operations@4.0.1(graphql@16.8.1): + resolution: {integrity: sha512-qF6wIbBzW8BNT+wiVsBxrYOs2oYcsxQ7mRvCpfEI3HnNZMAST/uX76W8MqFEJvj4mw7NIDv7xYJAcAZIWM5LWw==} + 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.8.1) + '@graphql-codegen/visitor-plugin-common': 4.0.1(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + auto-bind: 4.0.0 + graphql: 16.8.1 + tslib: 2.5.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-codegen/plugin-helpers@5.0.1(graphql@16.8.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.6(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.2 + dev: true + + /@graphql-codegen/schema-ast@4.0.0(graphql@16.8.1): + 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.8.1) + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.5.2 + dev: true + + /@graphql-codegen/typed-document-node@5.0.1(graphql@16.8.1): + resolution: {integrity: sha512-VFkhCuJnkgtbbgzoCAwTdJe2G1H6sd3LfCrDqWUrQe53y2ukfSb5Ov1PhAIkCBStKCMQBUY9YgGz9GKR40qQ8g==} + 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.8.1) + '@graphql-codegen/visitor-plugin-common': 4.0.1(graphql@16.8.1) + auto-bind: 4.0.0 + change-case-all: 1.0.15 + graphql: 16.8.1 + tslib: 2.5.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-codegen/typescript-operations@4.0.1(graphql@16.8.1): + resolution: {integrity: sha512-GpUWWdBVUec/Zqo23aFLBMrXYxN2irypHqDcKjN78JclDPdreasAEPcIpMfqf4MClvpmvDLy4ql+djVAwmkjbw==} + 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.8.1) + '@graphql-codegen/typescript': 4.0.1(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.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-codegen/typescript@4.0.1(graphql@16.8.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.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.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-codegen/visitor-plugin-common@4.0.1(graphql@16.8.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.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.6(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.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-tools/apollo-engine-loader@8.0.0(graphql@16.8.1): + 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: + '@ardatan/sync-fetch': 0.0.1 + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + '@whatwg-node/fetch': 0.9.13 + graphql: 16.8.1 + tslib: 2.5.2 + transitivePeerDependencies: + - encoding + dev: true + + /@graphql-tools/batch-execute@9.0.2(graphql@16.8.1): + 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 + dependencies: + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + dataloader: 2.2.2 + graphql: 16.8.1 + tslib: 2.5.2 + value-or-promise: 1.0.12 + dev: true + + /@graphql-tools/code-file-loader@8.0.2(graphql@16.8.1): + 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 + dependencies: + '@graphql-tools/graphql-tag-pluck': 8.0.2(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + globby: 11.1.0 + graphql: 16.8.1 + tslib: 2.5.2 + unixify: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@graphql-tools/delegate@10.0.3(graphql@16.8.1): + resolution: {integrity: sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw==} + 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(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.6(graphql@16.8.1) + dataloader: 2.2.2 + graphql: 16.8.1 + tslib: 2.5.2 + dev: true + + /@graphql-tools/documents@1.0.0(graphql@16.8.1): + resolution: {integrity: sha512-rHGjX1vg/nZ2DKqRGfDPNC55CWZBMldEVcH+91BThRa6JeT80NqXknffLLEZLRUxyikCfkwMsk6xR3UNMqG0Rg==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 16.8.1 + lodash.sortby: 4.7.0 + tslib: 2.5.2 + dev: true + + /@graphql-tools/executor-graphql-ws@1.1.0(graphql@16.8.1): + 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 + dependencies: + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + '@types/ws': 8.5.3 + graphql: 16.8.1 + graphql-ws: 5.14.1(graphql@16.8.1) + isomorphic-ws: 5.0.0(ws@8.14.1) + tslib: 2.5.2 + ws: 8.14.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /@graphql-tools/executor-http@1.0.2(@types/node@18.16.3)(graphql@16.8.1): + resolution: {integrity: sha512-JKTB4E3kdQM2/1NEcyrVPyQ8057ZVthCV5dFJiKktqY9IdmF00M8gupFcW3jlbM/Udn78ickeUBsUzA3EouqpA==} + 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.6(graphql@16.8.1) + '@repeaterjs/repeater': 3.0.4 + '@whatwg-node/fetch': 0.9.13 + extract-files: 11.0.0 + graphql: 16.8.1 + meros: 1.3.0(@types/node@18.16.3) + tslib: 2.5.2 + value-or-promise: 1.0.12 + transitivePeerDependencies: + - '@types/node' + dev: true + + /@graphql-tools/executor-legacy-ws@1.0.3(graphql@16.8.1): + resolution: {integrity: sha512-rr3IDeO9Dh+8u8KIro++5kzJJYPHkcrIAWzqXtN663nhInC85iW7Ko91yOYwf7ovBci/7s+4Rqe4ZRyca1LGjQ==} + 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.6(graphql@16.8.1) + '@types/ws': 8.5.3 + graphql: 16.8.1 + isomorphic-ws: 5.0.0(ws@8.14.1) + tslib: 2.5.2 + ws: 8.14.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /@graphql-tools/executor@1.2.0(graphql@16.8.1): + 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 + dependencies: + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + '@repeaterjs/repeater': 3.0.4 + graphql: 16.8.1 + tslib: 2.5.2 + value-or-promise: 1.0.12 + dev: true + + /@graphql-tools/git-loader@8.0.2(graphql@16.8.1): + 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 + dependencies: + '@graphql-tools/graphql-tag-pluck': 8.0.2(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + graphql: 16.8.1 + is-glob: 4.0.3 + micromatch: 4.0.5 + tslib: 2.5.2 + unixify: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@graphql-tools/github-loader@8.0.0(@types/node@18.16.3)(graphql@16.8.1): + resolution: {integrity: sha512-VuroArWKcG4yaOWzV0r19ElVIV6iH6UKDQn1MXemND0xu5TzrFme0kf3U9o0YwNo0kUYEk9CyFM0BYg4he17FA==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@ardatan/sync-fetch': 0.0.1 + '@graphql-tools/executor-http': 1.0.2(@types/node@18.16.3)(graphql@16.8.1) + '@graphql-tools/graphql-tag-pluck': 8.0.2(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + '@whatwg-node/fetch': 0.9.13 + graphql: 16.8.1 + tslib: 2.5.2 + value-or-promise: 1.0.12 + transitivePeerDependencies: + - '@types/node' + - encoding + - supports-color + dev: true + + /@graphql-tools/graphql-file-loader@8.0.0(graphql@16.8.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 + dependencies: + '@graphql-tools/import': 7.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + globby: 11.1.0 + graphql: 16.8.1 + tslib: 2.5.2 + unixify: 1.0.0 + dev: true + + /@graphql-tools/graphql-tag-pluck@8.0.2(graphql@16.8.1): + 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 + dependencies: + '@babel/core': 7.23.0 + '@babel/parser': 7.22.4 + '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.23.0) + '@babel/traverse': 7.22.4 + '@babel/types': 7.22.4 + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.5.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@graphql-tools/import@7.0.0(graphql@16.8.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 + dependencies: + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + graphql: 16.8.1 + resolve-from: 5.0.0 + tslib: 2.5.2 + dev: true + + /@graphql-tools/json-file-loader@8.0.0(graphql@16.8.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 + dependencies: + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + globby: 11.1.0 + graphql: 16.8.1 + tslib: 2.5.2 + unixify: 1.0.0 + dev: true + + /@graphql-tools/load@8.0.0(graphql@16.8.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 + dependencies: + '@graphql-tools/schema': 10.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + graphql: 16.8.1 + p-limit: 3.1.0 + tslib: 2.5.2 + dev: true + + /@graphql-tools/merge@9.0.0(graphql@16.8.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 + dependencies: + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.5.2 + dev: true + + /@graphql-tools/optimize@2.0.0(graphql@16.8.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 + dependencies: + graphql: 16.8.1 + tslib: 2.5.2 + dev: true + + /@graphql-tools/prisma-loader@8.0.1(@types/node@18.16.3)(graphql@16.8.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 + dependencies: + '@graphql-tools/url-loader': 8.0.0(@types/node@18.16.3)(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + '@types/js-yaml': 4.0.6 + '@types/json-stable-stringify': 1.0.34 + '@whatwg-node/fetch': 0.9.13 + chalk: 4.1.2 + debug: 4.3.4(supports-color@7.2.0) + dotenv: 16.0.3 + 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.14.0 + js-yaml: 4.1.0 + json-stable-stringify: 1.0.2 + lodash: 4.17.21 + scuid: 1.1.0 + tslib: 2.5.2 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@graphql-tools/relay-operation-optimizer@7.0.0(graphql@16.8.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 + dependencies: + '@ardatan/relay-compiler': 12.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.5.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@graphql-tools/schema@10.0.0(graphql@16.8.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 + dependencies: + '@graphql-tools/merge': 9.0.0(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.5.2 + value-or-promise: 1.0.12 + dev: true + + /@graphql-tools/url-loader@8.0.0(@types/node@18.16.3)(graphql@16.8.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 + dependencies: + '@ardatan/sync-fetch': 0.0.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.2(@types/node@18.16.3)(graphql@16.8.1) + '@graphql-tools/executor-legacy-ws': 1.0.3(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(graphql@16.8.1) + '@graphql-tools/wrap': 10.0.1(graphql@16.8.1) + '@types/ws': 8.5.3 + '@whatwg-node/fetch': 0.9.13 + graphql: 16.8.1 + isomorphic-ws: 5.0.0(ws@8.14.1) + tslib: 2.5.2 + value-or-promise: 1.0.12 + ws: 8.14.1 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - utf-8-validate + dev: true + + /@graphql-tools/utils@10.0.6(graphql@16.8.1): + resolution: {integrity: sha512-hZMjl/BbX10iagovakgf3IiqArx8TPsotq5pwBld37uIX1JiZoSbgbCIFol7u55bh32o6cfDEiiJgfAD5fbeyQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + dset: 3.1.2 + graphql: 16.8.1 + tslib: 2.5.2 + dev: true + + /@graphql-tools/wrap@10.0.1(graphql@16.8.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 + dependencies: + '@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.6(graphql@16.8.1) + graphql: 16.8.1 + tslib: 2.5.2 + value-or-promise: 1.0.12 + dev: true + + /@graphql-typed-document-node/core@3.2.0(graphql@16.8.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 + dependencies: + graphql: 16.8.1 + dev: true + /@grpc/grpc-js@1.7.3: resolution: {integrity: sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==} engines: {node: ^8.13.0 || >=10.10.0} @@ -8987,6 +9885,18 @@ packages: slash: 3.0.0 dev: true + /@jest/console@29.7.0: + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 18.16.3 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + dev: true + /@jest/core@26.6.3: resolution: {integrity: sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==} engines: {node: '>= 10.14.2'} @@ -9241,6 +10151,49 @@ packages: - ts-node 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 + 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.16.3 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.8.0 + exit: 0.1.2 + graceful-fs: 4.2.10 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@18.16.3) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /@jest/create-cache-key-function@27.5.1: resolution: {integrity: sha512-dmH1yW+makpTSURTy8VzdUwFnfQh1G8R+DxO2Ho2FFmBbKFEVm+3jWdvFhE2VqB/LATCTokkP0dotjyQyw5/AQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -9298,6 +10251,16 @@ packages: jest-mock: 29.5.0 dev: true + /@jest/environment@29.7.0: + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.16.3 + jest-mock: 29.7.0 + dev: true + /@jest/expect-utils@28.1.1: resolution: {integrity: sha512-n/ghlvdhCdMI/hTcnn4qV57kQuV9OTsZzH1TTCVARANKhl6hXJqLKUkwX69ftMGpsbpt96SsDD8n8LD2d9+FRw==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -9319,6 +10282,13 @@ packages: jest-get-type: 29.4.3 dev: true + /@jest/expect-utils@29.7.0: + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + dev: true + /@jest/expect@28.1.1: resolution: {integrity: sha512-/+tQprrFoT6lfkMj4mW/mUIfAmmk/+iQPmg7mLDIFOf2lyf7EBHaS+x3RbeR0VZVMe55IvX7QRoT/2aK3AuUXg==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -9339,6 +10309,16 @@ packages: - supports-color dev: true + /@jest/expect@29.7.0: + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + /@jest/fake-timers@26.6.2: resolution: {integrity: sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==} engines: {node: '>= 10.14.2'} @@ -9399,6 +10379,18 @@ packages: jest-util: 29.5.0 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} + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 18.16.3 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: true + /@jest/globals@26.6.2: resolution: {integrity: sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==} engines: {node: '>= 10.14.2'} @@ -9440,6 +10432,18 @@ packages: - supports-color dev: true + /@jest/globals@29.7.0: + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + /@jest/reporters@26.6.2: resolution: {integrity: sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==} engines: {node: '>= 10.14.2'} @@ -9587,6 +10591,43 @@ packages: - 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 + 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.19 + '@types/node': 18.16.3 + chalk: 4.1.2 + collect-v8-coverage: 1.0.1 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.10 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-instrument: 6.0.1 + istanbul-lib-report: 3.0.0 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.4 + 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 + transitivePeerDependencies: + - supports-color + dev: true + /@jest/schemas@28.1.3: resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} @@ -9601,6 +10642,13 @@ packages: '@sinclair/typebox': 0.25.24 dev: true + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + /@jest/source-map@26.6.2: resolution: {integrity: sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==} engines: {node: '>= 10.14.2'} @@ -9637,6 +10685,15 @@ packages: graceful-fs: 4.2.10 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} + dependencies: + '@jridgewell/trace-mapping': 0.3.19 + callsites: 3.1.0 + graceful-fs: 4.2.10 + dev: true + /@jest/test-result@26.6.2: resolution: {integrity: sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==} engines: {node: '>= 10.14.2'} @@ -9677,6 +10734,16 @@ packages: collect-v8-coverage: 1.0.1 dev: true + /@jest/test-result@29.7.0: + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.4 + collect-v8-coverage: 1.0.1 + dev: true + /@jest/test-sequencer@26.6.3: resolution: {integrity: sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==} engines: {node: '>= 10.14.2'} @@ -9726,6 +10793,16 @@ packages: slash: 3.0.0 dev: true + /@jest/test-sequencer@29.7.0: + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.10 + jest-haste-map: 29.7.0 + slash: 3.0.0 + dev: true + /@jest/transform@26.6.2: resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} engines: {node: '>= 10.14.2'} @@ -9818,6 +10895,29 @@ packages: - supports-color dev: true + /@jest/transform@29.7.0: + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.22.1 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.19 + 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.10 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.5 + pirates: 4.0.5 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + dev: true + /@jest/types@26.6.2: resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} engines: {node: '>= 10.14.2'} @@ -9899,6 +10999,18 @@ packages: chalk: 4.1.2 dev: true + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 18.16.3 + '@types/yargs': 17.0.10 + chalk: 4.1.2 + dev: true + /@jridgewell/gen-mapping@0.1.1: resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} engines: {node: '>=6.0.0'} @@ -9945,6 +11057,13 @@ packages: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + /@jridgewell/trace-mapping@0.3.19: + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + /@js-joda/core@3.2.0: resolution: {integrity: sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==} dev: true @@ -10512,6 +11631,32 @@ packages: resolution: {integrity: sha512-003xWiCuvePbLaPHT+CRuaV4GlyCAVm6XYSbBZDHoWZGn1mNkVKFaDbGJjjxmEFvizUwlCoM6O18FCBMMky2zQ==} dev: false + /@peculiar/asn1-schema@2.3.6: + resolution: {integrity: sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA==} + dependencies: + asn1js: 3.0.5 + pvtsutils: 1.3.5 + tslib: 2.5.2 + dev: true + + /@peculiar/json-schema@1.1.12: + resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} + engines: {node: '>=8.0.0'} + dependencies: + tslib: 2.5.2 + dev: true + + /@peculiar/webcrypto@1.4.3: + resolution: {integrity: sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A==} + engines: {node: '>=10.12.0'} + dependencies: + '@peculiar/asn1-schema': 2.3.6 + '@peculiar/json-schema': 1.1.12 + pvtsutils: 1.3.5 + tslib: 2.5.2 + webcrypto-core: 1.7.7 + dev: true + /@playwright/test@1.29.2: resolution: {integrity: sha512-+3/GPwOgcoF0xLz/opTnahel1/y42PdcgZ4hs+BZGIUjtmEFSXGg+nFoaH3NSmuc7a6GSFwXDJ5L7VXpqzigNg==} engines: {node: '>=14'} @@ -10623,6 +11768,10 @@ packages: requiresBuild: true dev: true + /@repeaterjs/repeater@3.0.4: + resolution: {integrity: sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA==} + dev: true + /@rollup/pluginutils@5.0.2(rollup@3.15.0): resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} engines: {node: '>=14.0.0'} @@ -10703,6 +11852,10 @@ packages: resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} dev: true + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + /@sindresorhus/is@0.14.0: resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} engines: {node: '>=6'} @@ -11984,6 +13137,10 @@ packages: resolution: {integrity: sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==} dev: true + /@types/js-yaml@4.0.6: + resolution: {integrity: sha512-ACTuifTSIIbyksx2HTon3aFtCKWcID7/h3XEmRpDYdMCXxPbl+m9GteOJeaAkiAta/NJaSFuA7ahZ0NkwajDSw==} + dev: true + /@types/jsdom@16.2.14: resolution: {integrity: sha512-6BAy1xXEmMuHeAJ4Fv4yXKwBDTGTOseExKE3OaHiNycdHdZw59KfYzrt0DkDluvwmik1HRt6QS7bImxUmpSy+w==} dependencies: @@ -11996,6 +13153,10 @@ packages: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true + /@types/json-stable-stringify@1.0.34: + resolution: {integrity: sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw==} + dev: true + /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true @@ -12884,6 +14045,54 @@ packages: '@xtuc/long': 4.2.2 dev: true + /@whatwg-node/events@0.0.3: + resolution: {integrity: sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==} + dev: true + + /@whatwg-node/events@0.1.1: + resolution: {integrity: sha512-AyQEn5hIPV7Ze+xFoXVU3QTHXVbWPrzaOkxtENMPMuNL6VVHrp4hHfDt9nrQpjO7BgvuM95dMtkycX5M/DZR3w==} + engines: {node: '>=16.0.0'} + dev: true + + /@whatwg-node/fetch@0.8.8: + resolution: {integrity: sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg==} + dependencies: + '@peculiar/webcrypto': 1.4.3 + '@whatwg-node/node-fetch': 0.3.6 + busboy: 1.6.0 + urlpattern-polyfill: 8.0.2 + web-streams-polyfill: 3.2.1 + dev: true + + /@whatwg-node/fetch@0.9.13: + resolution: {integrity: sha512-PPtMwhjtS96XROnSpowCQM85gCUG2m7AXZFw0PZlGbhzx2GK7f2iOXilfgIJ0uSlCuuGbOIzfouISkA7C4FJOw==} + engines: {node: '>=16.0.0'} + dependencies: + '@whatwg-node/node-fetch': 0.4.19 + urlpattern-polyfill: 9.0.0 + dev: true + + /@whatwg-node/node-fetch@0.3.6: + resolution: {integrity: sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA==} + dependencies: + '@whatwg-node/events': 0.0.3 + busboy: 1.6.0 + fast-querystring: 1.1.2 + fast-url-parser: 1.1.3 + tslib: 2.5.2 + dev: true + + /@whatwg-node/node-fetch@0.4.19: + resolution: {integrity: sha512-AW7/m2AuweAoSXmESrYQr/KBafueScNbn2iNO0u6xFr2JZdPmYsSm5yvAXYk6yDLv+eDmSSKrf7JnFZ0CsJIdA==} + engines: {node: '>=16.0.0'} + dependencies: + '@whatwg-node/events': 0.1.1 + busboy: 1.6.0 + fast-querystring: 1.1.2 + fast-url-parser: 1.1.3 + tslib: 2.5.2 + dev: true + /@xata.io/client@0.13.4(typescript@5.2.2): resolution: {integrity: sha512-eODWMjW185bPR3YcBSWOHeH5FlxsVSq8lbCoHxrjt8TZAthXb9MHwEUhgh39GrkwcQ181XRz2XwKDJAipIRg6A==} peerDependencies: @@ -13039,6 +14248,15 @@ packages: transitivePeerDependencies: - supports-color + /agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} + dependencies: + debug: 4.3.4(supports-color@7.2.0) + transitivePeerDependencies: + - supports-color + dev: true + /agentkeepalive@4.2.1: resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==} engines: {node: '>= 8.0.0'} @@ -13453,6 +14671,15 @@ packages: dependencies: safer-buffer: 2.1.2 + /asn1js@3.0.5: + resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} + engines: {node: '>=12.0.0'} + dependencies: + pvtsutils: 1.3.5 + pvutils: 1.1.3 + tslib: 2.5.2 + dev: true + /assert-plus@1.0.0: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} @@ -13473,6 +14700,11 @@ packages: tslib: 2.5.2 dev: true + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true + /async-lock@1.3.2: resolution: {integrity: sha512-phnXdS3RP7PPcmP6NWWzWMU0sLTeyvtZCxBPpZdkYE3seGLKSQZs9FrmVO/qwypq98FUtWWUEYxziLkdGk5nnA==} dev: true @@ -13507,6 +14739,11 @@ packages: engines: {node: '>= 4.5.0'} hasBin: true + /auto-bind@4.0.0: + resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} + engines: {node: '>=8'} + dev: true + /autoprefixer@10.4.13(postcss@8.4.19): resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} engines: {node: ^10 || ^12 || >=14} @@ -13655,6 +14892,24 @@ packages: - supports-color dev: true + /babel-jest@29.7.0(@babel/core@7.22.1): + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.22.1 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.1.19 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.22.1) + chalk: 4.1.2 + graceful-fs: 4.2.10 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /babel-loader@8.3.0(@babel/core@7.22.1)(webpack@5.75.0): resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} @@ -13744,6 +14999,16 @@ packages: '@types/babel__traverse': 7.17.1 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.21.9 + '@babel/types': 7.22.4 + '@types/babel__core': 7.1.19 + '@types/babel__traverse': 7.17.1 + dev: true + /babel-plugin-jsx-dom-expressions@0.35.8(@babel/core@7.22.1): resolution: {integrity: sha512-IzObXlDFA80wyEW/IUtCxaUAoJnq4CTpvcvC1xBZBlMpJDwmK6mIYnTZ9xgFyGCrAjC0LxVcqeDQx31gJJ4UJQ==} peerDependencies: @@ -13922,6 +15187,10 @@ packages: /babel-plugin-syntax-jsx@6.18.0: resolution: {integrity: sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==} + /babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: + resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} + dev: true + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.1): resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: @@ -13941,6 +15210,43 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.1) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.1) + /babel-preset-fbjs@3.4.0(@babel/core@7.22.1): + resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.1 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-proposal-object-rest-spread': 7.20.2(@babel/core@7.22.1) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.1) + '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.1) + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.1) + '@babel/plugin-transform-arrow-functions': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-block-scoped-functions': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-block-scoping': 7.20.2(@babel/core@7.22.1) + '@babel/plugin-transform-classes': 7.20.7(@babel/core@7.22.1) + '@babel/plugin-transform-computed-properties': 7.18.9(@babel/core@7.22.1) + '@babel/plugin-transform-destructuring': 7.20.2(@babel/core@7.22.1) + '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.22.1) + '@babel/plugin-transform-for-of': 7.18.8(@babel/core@7.22.1) + '@babel/plugin-transform-function-name': 7.18.9(@babel/core@7.22.1) + '@babel/plugin-transform-literals': 7.18.9(@babel/core@7.22.1) + '@babel/plugin-transform-member-expression-literals': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-modules-commonjs': 7.19.6(@babel/core@7.22.1) + '@babel/plugin-transform-object-super': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-parameters': 7.20.3(@babel/core@7.22.1) + '@babel/plugin-transform-property-literals': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-react-jsx': 7.19.0(@babel/core@7.22.1) + '@babel/plugin-transform-shorthand-properties': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-transform-spread': 7.20.7(@babel/core@7.22.1) + '@babel/plugin-transform-template-literals': 7.18.9(@babel/core@7.22.1) + babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 + transitivePeerDependencies: + - supports-color + dev: true + /babel-preset-jest@26.6.2(@babel/core@7.22.1): resolution: {integrity: sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==} engines: {node: '>= 10.14.2'} @@ -13985,6 +15291,17 @@ packages: babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.1) dev: true + /babel-preset-jest@29.6.3(@babel/core@7.22.1): + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.1 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.1) + dev: true + /babel-preset-preact@2.0.0(@babel/core@7.18.5): resolution: {integrity: sha512-gqJCALE4XXEienLkzgAQ351XyoVHTIiZRAKjEJupK7cTVhFyovEuSrVoNrTNrUu3R78vAarjxkrR6j0vr+Rg8Q==} dependencies: @@ -14545,6 +15862,14 @@ packages: /caniuse-lite@1.0.30001541: resolution: {integrity: sha512-bLOsqxDgTqUBkzxbNlSBt8annkDpQB9NdzdTbO2ooJ+eC/IQcvDspDc058g84ejCelF7vHUx57KIOjEecOHXaw==} + /capital-case@1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + dependencies: + no-case: 3.0.4 + tslib: 2.5.2 + upper-case-first: 2.0.2 + dev: true + /capture-exit@2.0.0: resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} engines: {node: 6.* || 8.* || >= 10.*} @@ -14640,6 +15965,38 @@ packages: engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: true + /change-case-all@1.0.15: + resolution: {integrity: sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ==} + dependencies: + change-case: 4.1.2 + is-lower-case: 2.0.2 + is-upper-case: 2.0.2 + lower-case: 2.0.2 + lower-case-first: 2.0.2 + sponge-case: 1.0.1 + swap-case: 2.0.2 + title-case: 3.0.3 + upper-case: 2.0.2 + upper-case-first: 2.0.2 + dev: true + + /change-case@4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + dependencies: + camel-case: 4.1.2 + capital-case: 1.0.4 + constant-case: 3.0.4 + dot-case: 3.0.4 + header-case: 2.0.4 + no-case: 3.0.4 + param-case: 3.0.4 + pascal-case: 3.1.2 + path-case: 3.0.4 + sentence-case: 3.0.4 + snake-case: 3.0.4 + tslib: 2.5.2 + dev: true + /char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -14874,6 +16231,14 @@ packages: string-width: 1.0.2 dev: false + /cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + 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'} @@ -14896,7 +16261,6 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - dev: false /cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -15086,7 +16450,6 @@ packages: /common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} - dev: false /commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -15214,6 +16577,14 @@ packages: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} dev: true + /constant-case@3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + dependencies: + no-case: 3.0.4 + tslib: 2.5.2 + upper-case: 2.0.2 + dev: true + /content-disposition@0.5.2: resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} engines: {node: '>= 0.6'} @@ -15367,6 +16738,22 @@ packages: yaml: 1.10.2 dev: true + /cosmiconfig@8.3.6(typescript@5.2.2): + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + typescript: 5.2.2 + dev: true + /crc-32@1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} @@ -15381,6 +16768,25 @@ packages: readable-stream: 3.6.0 dev: true + /create-jest@29.7.0(@types/node@18.16.3): + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.10 + jest-config: 29.7.0(@types/node@18.16.3) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /cross-env@5.2.1: resolution: {integrity: sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==} engines: {node: '>=4.0'} @@ -16337,6 +17743,10 @@ packages: whatwg-url: 11.0.0 dev: true + /dataloader@2.2.2: + resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} + dev: true + /date-fns@1.30.1: resolution: {integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==} dev: false @@ -16360,6 +17770,10 @@ packages: resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} dev: true + /debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + dev: true + /debug@2.6.9(supports-color@7.2.0): resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -16484,6 +17898,15 @@ packages: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true + /dedent@1.5.1: + resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + dev: true + /deep-eql@4.1.3: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} @@ -16731,6 +18154,11 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + /difflib@0.2.4: resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} dependencies: @@ -17023,6 +18451,11 @@ packages: postgres: 3.3.5 dev: true + /dset@3.1.2: + resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} + engines: {node: '>=4'} + dev: true + /duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: @@ -18561,6 +19994,17 @@ packages: jest-util: 29.5.0 dev: true + /expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + dev: true + /express-basic-auth@1.2.1: resolution: {integrity: sha512-L6YQ1wQ/mNjVLAmK3AG1RK6VkokA1BIY6wmiH304Xtt/cLTps40EusZsU1Uop+v9lTDPxdtzbFmdXfFO3KEnwA==} dependencies: @@ -18692,6 +20136,11 @@ packages: - supports-color dev: false + /extract-files@11.0.0: + resolution: {integrity: sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==} + engines: {node: ^12.20 || >= 14.13} + dev: true + /extract-zip@1.7.0(supports-color@7.2.0): resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==} hasBin: true @@ -18724,6 +20173,10 @@ packages: - supports-color dev: true + /fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + dev: true + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -18755,6 +20208,12 @@ packages: /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + /fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + dependencies: + fast-decode-uri-component: 1.0.1 + dev: true + /fast-text-encoding@1.0.4: resolution: {integrity: sha512-x6lDDm/tBAzX9kmsPcZsNbvDs3Zey3+scsxaZElS8xWLgUMAg/oFLeewfUz0mu1CblHhhsu15jGkraldkFh8KQ==} dev: true @@ -19904,8 +21363,69 @@ packages: lodash: 4.17.21 dev: false - /graphql@16.5.0: - resolution: {integrity: sha512-qbHgh8Ix+j/qY+a/ZcJnFQ+j8ezakqPiHwPiZhV/3PgGlgf96QMBB5/f2rkiC9sgLoy/xvT6TSiaf2nTHJh5iA==} + /graphql-config@5.0.2(@types/node@18.16.3)(graphql@16.8.1)(typescript@5.2.2): + 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.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.16.3)(graphql@16.8.1) + '@graphql-tools/utils': 10.0.6(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.5.2 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - encoding + - typescript + - utf-8-validate + dev: true + + /graphql-request@6.1.0(graphql@16.8.1): + resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} + peerDependencies: + graphql: 14 - 16 + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.8.1) + cross-fetch: 3.1.5 + graphql: 16.8.1 + transitivePeerDependencies: + - encoding + dev: true + + /graphql-tag@2.12.6(graphql@16.8.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 + dependencies: + graphql: 16.8.1 + tslib: 2.5.2 + dev: true + + /graphql-ws@5.14.1(graphql@16.8.1): + resolution: {integrity: sha512-aqkls1espsygP1PfkAuuLIV96IbztQ6EaADse97pw8wRIMT3+AL/OYfS8V2iCRkc0gzckitoDRGCQEdnySggiA==} + engines: {node: '>=10'} + peerDependencies: + graphql: '>=0.11 <=16' + dependencies: + graphql: 16.8.1 + dev: true + + /graphql@16.8.1: + resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} dev: true @@ -20135,6 +21655,13 @@ packages: hasBin: true dev: true + /header-case@2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + dependencies: + capital-case: 1.0.4 + tslib: 2.5.2 + dev: true + /headers-polyfill@3.0.7: resolution: {integrity: sha512-JoLCAdCEab58+2/yEmSnOlficyHFpIl0XJqwu3l+Unkm1gXpFUYsThz6Yha3D6tNhocWkCPfyW0YVIGWFqTi7w==} dev: true @@ -20349,6 +21876,16 @@ packages: - supports-color dev: true + /http-proxy-agent@7.0.0: + resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4(supports-color@7.2.0) + transitivePeerDependencies: + - supports-color + dev: true + /http-proxy-middleware@2.0.6(@types/express@4.17.15): resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} engines: {node: '>=12.0.0'} @@ -20406,6 +21943,16 @@ packages: transitivePeerDependencies: - supports-color + /https-proxy-agent@7.0.2: + resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4(supports-color@7.2.0) + transitivePeerDependencies: + - supports-color + dev: true + /human-signals@1.1.1: resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} engines: {node: '>=8.12.0'} @@ -20494,6 +22041,11 @@ packages: resolution: {integrity: sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==} dev: true + /immutable@3.7.6: + resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} + engines: {node: '>=0.8.0'} + dev: true + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -20502,6 +22054,11 @@ packages: resolve-from: 4.0.0 dev: true + /import-from@4.0.0: + resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} + engines: {node: '>=12.2'} + dev: true + /import-lazy@2.1.0: resolution: {integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==} engines: {node: '>=4'} @@ -20667,6 +22224,14 @@ packages: resolution: {integrity: sha512-Bm6H79i01DjgGTCWjUuCjJ6QDo1HB96PT/xCYuyJUP9WFbVDrLSbG4EZCvOCun2rNswZb0c3e4Jt/ws795esHA==} dev: true + /is-absolute@1.0.0: + resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} + engines: {node: '>=0.10.0'} + dependencies: + is-relative: 1.0.0 + is-windows: 1.0.2 + dev: true + /is-accessor-descriptor@0.1.6: resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} engines: {node: '>=0.10.0'} @@ -20883,6 +22448,12 @@ packages: dev: true optional: true + /is-lower-case@2.0.2: + resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} + dependencies: + tslib: 2.5.2 + dev: true + /is-map@2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: true @@ -20994,6 +22565,13 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-relative@1.0.0: + resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} + engines: {node: '>=0.10.0'} + dependencies: + is-unc-path: 1.0.0 + dev: true + /is-root@2.1.0: resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} engines: {node: '>=6'} @@ -21062,11 +22640,24 @@ packages: /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + /is-unc-path@1.0.0: + resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} + engines: {node: '>=0.10.0'} + dependencies: + unc-path-regex: 0.1.2 + dev: true + /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} dev: true + /is-upper-case@2.0.2: + resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} + dependencies: + tslib: 2.5.2 + dev: true + /is-url@1.2.4: resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} dev: true @@ -21105,7 +22696,6 @@ packages: /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} - dev: false /is-word-character@1.0.4: resolution: {integrity: sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==} @@ -21169,6 +22759,14 @@ packages: - encoding dev: true + /isomorphic-ws@5.0.0(ws@8.14.1): + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.14.1 + dev: true + /isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} @@ -21200,6 +22798,19 @@ packages: transitivePeerDependencies: - supports-color + /istanbul-lib-instrument@6.0.1: + resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.22.1 + '@babel/parser': 7.22.4 + '@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'} @@ -21267,6 +22878,15 @@ packages: p-limit: 3.1.0 dev: true + /jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + dev: true + /jest-circus@27.5.1: resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -21349,6 +22969,35 @@ packages: - supports-color 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} + 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.16.3 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.1 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.0.2 + slash: 3.0.0 + stack-utils: 2.0.5 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + dev: true + /jest-cli@26.6.3: resolution: {integrity: sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==} engines: {node: '>= 10.14.2'} @@ -21517,6 +23166,34 @@ packages: - ts-node dev: true + /jest-cli@29.7.0(@types/node@18.16.3): + 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 + 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.16.3) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@18.16.3) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /jest-config@26.6.3: resolution: {integrity: sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==} engines: {node: '>= 10.14.2'} @@ -21708,6 +23385,46 @@ packages: - supports-color dev: true + /jest-config@29.7.0(@types/node@18.16.3): + 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 + dependencies: + '@babel/core': 7.22.1 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.16.3 + babel-jest: 29.7.0(@babel/core@7.22.1) + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.3.0 + glob: 7.2.3 + graceful-fs: 4.2.10 + 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 + dev: true + /jest-diff@26.6.2: resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} engines: {node: '>= 10.14.2'} @@ -21747,6 +23464,16 @@ packages: pretty-format: 29.5.0 dev: true + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + /jest-docblock@26.0.0: resolution: {integrity: sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==} engines: {node: '>= 10.14.2'} @@ -21775,6 +23502,13 @@ packages: detect-newline: 3.1.0 dev: true + /jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + detect-newline: 3.1.0 + dev: true + /jest-each@26.6.2: resolution: {integrity: sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==} engines: {node: '>= 10.14.2'} @@ -21819,6 +23553,17 @@ packages: pretty-format: 29.5.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} + 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-jsdom@26.6.2: resolution: {integrity: sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==} engines: {node: '>= 10.14.2'} @@ -21922,6 +23667,18 @@ packages: jest-util: 29.5.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} + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.16.3 + jest-mock: 29.7.0 + jest-util: 29.7.0 + dev: true + /jest-get-type@26.3.0: resolution: {integrity: sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==} engines: {node: '>= 10.14.2'} @@ -21946,6 +23703,11 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.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-haste-map@26.6.2: resolution: {integrity: sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==} engines: {node: '>= 10.14.2'} @@ -22027,6 +23789,25 @@ packages: fsevents: 2.3.2 dev: true + /jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.5 + '@types/node': 18.16.3 + anymatch: 3.1.3 + fb-watchman: 2.0.1 + graceful-fs: 4.2.10 + 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 + /jest-image-snapshot@4.2.0(jest@26.6.3): resolution: {integrity: sha512-6aAqv2wtfOgxiJeBayBCqHo1zX+A12SUNNzo7rIxiXh6W6xYVu8QyHWkada8HeRi+QUTHddp0O0Xa6kmQr+xbQ==} engines: {node: '>= 10.14.2'} @@ -22132,6 +23913,14 @@ packages: pretty-format: 29.5.0 dev: true + /jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + dev: true + /jest-matcher-utils@26.6.2: resolution: {integrity: sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==} engines: {node: '>= 10.14.2'} @@ -22182,6 +23971,16 @@ packages: pretty-format: 29.5.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} + 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@26.6.2: resolution: {integrity: sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==} engines: {node: '>= 10.14.2'} @@ -22242,6 +24041,21 @@ packages: stack-utils: 2.0.5 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} + dependencies: + '@babel/code-frame': 7.21.4 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.10 + micromatch: 4.0.5 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.5 + dev: true + /jest-mock@26.6.2: resolution: {integrity: sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==} engines: {node: '>= 10.14.2'} @@ -22283,6 +24097,15 @@ packages: jest-util: 29.5.0 dev: true + /jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 18.16.3 + jest-util: 29.7.0 + dev: true + /jest-pnp-resolver@1.2.2(jest-resolve@26.6.2): resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} engines: {node: '>=6'} @@ -22331,6 +24154,18 @@ packages: jest-resolve: 29.5.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 + dependencies: + jest-resolve: 29.7.0 + dev: true + /jest-regex-util@26.0.0: resolution: {integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==} engines: {node: '>= 10.14.2'} @@ -22351,6 +24186,11 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.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-resolve-dependencies@26.6.3: resolution: {integrity: sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==} engines: {node: '>= 10.14.2'} @@ -22393,6 +24233,16 @@ packages: - supports-color dev: true + /jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + dev: true + /jest-resolve@26.6.2: resolution: {integrity: sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==} engines: {node: '>= 10.14.2'} @@ -22453,6 +24303,21 @@ packages: slash: 3.0.0 dev: true + /jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.10 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.2(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.6 + resolve.exports: 2.0.2 + slash: 3.0.0 + dev: true + /jest-runner@26.6.3: resolution: {integrity: sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==} engines: {node: '>= 10.14.2'} @@ -22575,6 +24440,35 @@ packages: - supports-color dev: true + /jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.16.3 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.10 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + dev: true + /jest-runtime@26.6.3: resolution: {integrity: sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==} engines: {node: '>= 10.14.2'} @@ -22705,6 +24599,36 @@ packages: - 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} + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.16.3 + chalk: 4.1.2 + cjs-module-lexer: 1.2.2 + collect-v8-coverage: 1.0.1 + glob: 7.2.3 + graceful-fs: 4.2.10 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /jest-serializer@26.6.2: resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} engines: {node: '>= 10.14.2'} @@ -22837,6 +24761,34 @@ packages: - 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} + dependencies: + '@babel/core': 7.22.1 + '@babel/generator': 7.22.3 + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.1) + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.1) + '@babel/types': 7.22.4 + '@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.1) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.10 + jest-diff: 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 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + /jest-util@26.6.2: resolution: {integrity: sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==} engines: {node: '>= 10.14.2'} @@ -22897,6 +24849,18 @@ packages: 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} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 18.16.3 + chalk: 4.1.2 + ci-info: 3.8.0 + graceful-fs: 4.2.10 + picomatch: 2.3.1 + dev: true + /jest-validate@26.6.2: resolution: {integrity: sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==} engines: {node: '>= 10.14.2'} @@ -22945,6 +24909,18 @@ packages: pretty-format: 29.5.0 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} + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + dev: true + /jest-watch-typeahead@1.1.0(jest@28.1.1): resolution: {integrity: sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -23029,6 +25005,20 @@ packages: string-length: 4.0.2 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} + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.16.3 + 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@26.6.2: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} @@ -23066,6 +25056,16 @@ packages: supports-color: 8.1.1 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} + dependencies: + '@types/node': 18.16.3 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + /jest@26.6.3: resolution: {integrity: sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==} engines: {node: '>= 10.14.2'} @@ -23183,10 +25183,30 @@ packages: - ts-node dev: true + /jest@29.7.0(@types/node@18.16.3): + 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 + dependencies: + '@jest/core': 29.7.0 + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@18.16.3) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /jiti@1.20.0: resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} hasBin: true - dev: false /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -23223,7 +25243,6 @@ packages: /jose@4.14.0: resolution: {integrity: sha512-LSA/XenLPwqk6e2L+PSUNuuY9G4NGsvjRWz6sJcUBmzTLEPJqQh46FHSUxnAQ64AWOkRO6bSXpy3yXuEKZkbIA==} - dev: false /joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} @@ -23449,9 +25468,23 @@ packages: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true + /json-stable-stringify@1.0.2: + resolution: {integrity: sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==} + dependencies: + jsonify: 0.0.1 + dev: true + /json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + /json-to-pretty-yaml@1.2.2: + resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} + engines: {node: '>= 0.2.0'} + dependencies: + remedial: 1.0.8 + remove-trailing-spaces: 1.0.8 + dev: true + /json5@1.0.1: resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} hasBin: true @@ -23486,6 +25519,10 @@ packages: graceful-fs: 4.2.10 dev: true + /jsonify@0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + dev: true + /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} @@ -23953,6 +25990,25 @@ packages: figures: 2.0.0 dev: false + /listr2@4.0.5: + resolution: {integrity: sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==} + engines: {node: '>=12'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + dependencies: + cli-truncate: 2.1.0 + colorette: 2.0.19 + log-update: 4.0.0 + p-map: 4.0.0 + rfdc: 1.3.0 + rxjs: 7.8.1 + through: 2.3.8 + wrap-ansi: 7.0.0 + dev: true + /listr@0.14.3: resolution: {integrity: sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==} engines: {node: '>=6'} @@ -24150,6 +26206,16 @@ packages: wrap-ansi: 3.0.1 dev: false + /log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + dependencies: + ansi-escapes: 4.3.2 + cli-cursor: 3.1.0 + slice-ansi: 4.0.0 + wrap-ansi: 6.2.0 + dev: true + /logform@2.4.1: resolution: {integrity: sha512-7XB/tqc3VRbri9pRjU6E97mQ8vC27ivJ3lct4jhyT+n0JNDd4YKldFl0D75NqDp46hk8RC7Ma1Vjv/UPf67S+A==} dependencies: @@ -24181,6 +26247,12 @@ packages: get-func-name: 2.0.0 dev: true + /lower-case-first@2.0.2: + resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} + dependencies: + tslib: 2.5.2 + dev: true + /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: @@ -24373,7 +26445,6 @@ packages: /map-cache@0.2.2: resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} engines: {node: '>=0.10.0'} - dev: false /map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} @@ -24610,6 +26681,18 @@ packages: web-worker: 1.2.0 dev: true + /meros@1.3.0(@types/node@18.16.3): + resolution: {integrity: sha512-2BNGOimxEz5hmjUG2FwoxCt5HN7BXdaWyFqEwxPTrJzVdABtrL4TiHTcsWSFAxPQ/tOnEaQEJh3qWq71QRMY+w==} + engines: {node: '>=13'} + peerDependencies: + '@types/node': '>=13' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@types/node': 18.16.3 + dev: true + /methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} @@ -24757,6 +26840,13 @@ packages: dependencies: brace-expansion: 1.1.11 + /minimatch@4.2.3: + resolution: {integrity: sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 1.1.11 + dev: true + /minimatch@5.1.6: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} @@ -25067,7 +27157,7 @@ packages: chalk: 4.1.1 chokidar: 3.5.3 cookie: 0.4.2 - graphql: 16.5.0 + graphql: 16.8.1 headers-polyfill: 3.0.7 inquirer: 8.2.4 is-node-process: 1.0.1 @@ -25505,7 +27595,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: remove-trailing-separator: 1.1.0 - dev: false /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -25585,6 +27674,10 @@ packages: boolbase: 1.0.0 dev: true + /nullthrows@1.1.1: + resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} + dev: true + /number-is-nan@1.0.1: resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} engines: {node: '>=0.10.0'} @@ -26011,6 +28104,15 @@ packages: is-hexadecimal: 1.0.4 dev: true + /parse-filepath@1.0.2: + resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} + engines: {node: '>=0.8'} + dependencies: + is-absolute: 1.0.0 + map-cache: 0.2.2 + path-root: 0.1.1 + dev: true + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -26080,6 +28182,13 @@ packages: engines: {node: '>=0.10.0'} dev: false + /path-case@3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.5.2 + dev: true + /path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} @@ -26112,6 +28221,18 @@ packages: /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'} + dev: true + + /path-root@0.1.1: + resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} + engines: {node: '>=0.10.0'} + dependencies: + path-root-regex: 0.1.2 + dev: true + /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: true @@ -27584,6 +29705,15 @@ packages: react-is: 18.2.0 dev: true + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + /pretty-format@3.8.0: resolution: {integrity: sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==} dev: false @@ -27811,6 +29941,17 @@ packages: resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} dev: true + /pvtsutils@1.3.5: + resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} + dependencies: + tslib: 2.6.2 + dev: true + + /pvutils@1.1.3: + resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} + engines: {node: '>=6.0.0'} + dev: true + /q@1.4.1: resolution: {integrity: sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} @@ -28314,6 +30455,16 @@ packages: engines: {node: '>= 0.10'} dev: true + /relay-runtime@12.0.0: + resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} + dependencies: + '@babel/runtime': 7.20.13 + fbjs: 3.0.4 + invariant: 2.2.4 + transitivePeerDependencies: + - encoding + dev: true + /remark-emoji@2.2.0: resolution: {integrity: sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==} dependencies: @@ -28368,9 +30519,16 @@ packages: mdast-squeeze-paragraphs: 4.0.0 dev: true + /remedial@1.0.8: + resolution: {integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==} + dev: true + /remove-trailing-separator@1.1.0: resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} - dev: false + + /remove-trailing-spaces@1.0.8: + resolution: {integrity: sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==} + dev: true /renderkid@3.0.0: resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} @@ -28439,7 +30597,6 @@ packages: /require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: false /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -28844,6 +31001,10 @@ packages: ajv-keywords: 5.1.0(ajv@8.11.0) dev: true + /scuid@1.1.0: + resolution: {integrity: sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==} + dev: true + /section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -28878,6 +31039,11 @@ packages: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + /semver@7.0.0: resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} hasBin: true @@ -28935,6 +31101,14 @@ packages: - supports-color dev: true + /sentence-case@3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + dependencies: + no-case: 3.0.4 + tslib: 2.5.2 + upper-case-first: 2.0.2 + dev: true + /seq-queue@0.0.5: resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} dev: true @@ -29150,6 +31324,10 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + /signedsource@1.0.0: + resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} + dev: true + /simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} requiresBuild: true @@ -29222,6 +31400,24 @@ packages: engines: {node: '>=0.10.0'} dev: false + /slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + 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'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + /smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -29236,6 +31432,13 @@ packages: nodemailer: 6.7.3 dev: true + /snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.5.2 + dev: true + /snapdragon-node@2.1.1: resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} engines: {node: '>=0.10.0'} @@ -29582,6 +31785,12 @@ packages: engines: {node: '>= 10.x'} dev: true + /sponge-case@1.0.1: + resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} + dependencies: + tslib: 2.5.2 + dev: true + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -29751,6 +31960,10 @@ packages: events: 3.3.0 dev: true + /string-env-interpolation@1.0.1: + resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} + dev: true + /string-length@1.0.1: resolution: {integrity: sha512-MNCACnufWUf3pQ57O5WTBMkKhzYIaKEcUioO0XHrTMafrbBaNk4IyDOLHBv5xbXO0jLLdsYWeFjpjG2hVHRDtw==} engines: {node: '>=0.10.0'} @@ -30349,6 +32562,12 @@ packages: stable: 0.1.8 dev: true + /swap-case@2.0.2: + resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} + dependencies: + tslib: 2.5.2 + dev: true + /symbol-observable@1.2.0: resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} engines: {node: '>=0.10.0'} @@ -30684,6 +32903,12 @@ packages: engines: {node: '>=14.0.0'} dev: true + /title-case@3.0.3: + resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + dependencies: + tslib: 2.5.2 + dev: true + /tlds@1.208.0: resolution: {integrity: sha512-6kbY7GJpRQXwBddSOAbVUZXjObbCGFXliWWN+kOSEoRWIOyRWLB6zdeKC/Tguwwenl/KsUx016XR50EdHYsxZw==} hasBin: true @@ -30947,6 +33172,10 @@ packages: yargs-parser: 20.2.9 dev: true + /ts-log@2.2.5: + resolution: {integrity: sha512-PGcnJoTBnVGy6yYNFxWVNkdcAuAMstvutN9MgDJIV6L0oG8fB+ZNNy1T+wJzah8RPGor1mZuPQkVfXNDpy9eHA==} + dev: true + /tsconfig-paths@3.14.1: resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} dependencies: @@ -30966,6 +33195,10 @@ packages: /tslib@2.5.2: resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==} + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true + /tsup@6.5.0(typescript@5.2.2): resolution: {integrity: sha512-36u82r7rYqRHFkD15R20Cd4ercPkbYmuvRkz3Q1LCm5BsiFNUgpo36zbjVhCOgvjyxNBWNKHsaD5Rl8SykfzNA==} engines: {node: '>=14'} @@ -31325,6 +33558,11 @@ packages: which-boxed-primitive: 1.0.2 dev: true + /unc-path-regex@0.1.2: + resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} + engines: {node: '>=0.10.0'} + dev: true + /underscore@1.13.4: resolution: {integrity: sha512-BQFnUDuAQ4Yf/cYY5LNrK9NCJFKriaRbD9uR1fTeXnBeoa97W0i41qkZfGO9pSo8I5KzjAcSY2XYtdf0oKd7KQ==} dev: true @@ -31506,6 +33744,13 @@ packages: engines: {node: '>= 10.0.0'} dev: true + /unixify@1.0.0: + resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} + engines: {node: '>=0.10.0'} + dependencies: + normalize-path: 2.1.1 + dev: true + /unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} @@ -31607,6 +33852,18 @@ packages: xdg-basedir: 4.0.0 dev: true + /upper-case-first@2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + dependencies: + tslib: 2.5.2 + dev: true + + /upper-case@2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + dependencies: + tslib: 2.5.2 + dev: true + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -31663,6 +33920,14 @@ packages: resolution: {integrity: sha512-DOE84vZT2fEcl9gqCUTcnAw5ZY5Id55ikUcziSUntuEFL3pRvavg5kwDmTEUJkeCHInTlV/HexFomgYnzO5kdQ==} dev: true + /urlpattern-polyfill@8.0.2: + resolution: {integrity: sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==} + dev: true + + /urlpattern-polyfill@9.0.0: + resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==} + dev: true + /use-composed-ref@1.3.0(react@18.2.0): resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} peerDependencies: @@ -31801,6 +34066,11 @@ packages: resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==} dev: true + /value-or-promise@1.0.12: + resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} + engines: {node: '>=12'} + dev: true + /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -32089,10 +34359,25 @@ packages: resolution: {integrity: sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==} dev: true + /web-streams-polyfill@3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} + dev: true + /web-worker@1.2.0: resolution: {integrity: sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==} dev: true + /webcrypto-core@1.7.7: + resolution: {integrity: sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g==} + dependencies: + '@peculiar/asn1-schema': 2.3.6 + '@peculiar/json-schema': 1.1.12 + asn1js: 3.0.5 + pvtsutils: 1.3.5 + tslib: 2.5.2 + dev: true + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -32370,7 +34655,6 @@ packages: /which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - dev: false /which-typed-array@1.1.8: resolution: {integrity: sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==} @@ -32474,7 +34758,6 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: false /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} @@ -32604,7 +34887,6 @@ packages: /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: false /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} @@ -32625,6 +34907,10 @@ packages: /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + /yaml-ast-parser@0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + dev: true + /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -32640,7 +34926,6 @@ packages: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 - dev: false /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} @@ -32667,7 +34952,6 @@ packages: which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 - dev: false /yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} diff --git a/turbo.json b/turbo.json index 87c84838..1e49b419 100644 --- a/turbo.json +++ b/turbo.json @@ -91,6 +91,7 @@ "@auth/dynamodb-adapter#build", "@auth/fauna-adapter#build", "@auth/firebase-adapter#build", + "@auth/hasura-adapter#build", "@auth/kysely-adapter#build", "@auth/mikro-orm-adapter#build", "@auth/mongodb-adapter#build", @@ -121,6 +122,7 @@ "@auth/dynamodb-adapter#build", "@auth/fauna-adapter#build", "@auth/firebase-adapter#build", + "@auth/hasura-adapter#build", "@auth/kysely-adapter#build", "@auth/mikro-orm-adapter#build", "@auth/mongodb-adapter#build",